vue2搭建項(xiàng)目

準(zhǔn)備

安裝并生成項(xiàng)目

1、nodejs
2蒸痹、vue-cli

// 安裝
npm install -g vue-cli
// 生成項(xiàng)目
vue init webpack my-project
vue-cli.png

webpack配置

1、自動(dòng)打開(kāi)瀏覽器

config - index.js

autoOpenBrowser: true,
// 本質(zhì)上為設(shè)置的build - webpack.dev.conf.js 中的 open:true

2、錯(cuò)誤映射關(guān)系

config - index.js

// dev
devtool: 'cheap-module-eval-source-map', // 不用動(dòng)
// build
devtool: 'cheap-module-source-map', // 可換蛔糯,線上報(bào)錯(cuò)有提示信息

3、打包文件名及URL前綴

項(xiàng)目可能區(qū)分不同的端窖式,比如PC蚁飒,APP,后臺(tái)管理系統(tǒng)萝喘,多個(gè)項(xiàng)目放在同一個(gè)服務(wù)器下淮逻,使用同一個(gè)域名琼懊,只是前綴不同。
config
config文件夾下新建basePath.js文件

'use strict'
module.exports ='hotel-ecm' // 項(xiàng)目打包名稱及URL前綴

config - index.js

const basePath = require('./basePath')
// build

// Template for index.html
index: path.resolve(__dirname, `../${basePath}/index.html`),

// Paths
assetsRoot: path.resolve(__dirname, `../${basePath}`),
// 文件夾名稱,本質(zhì)上為設(shè)置的build - webpack.dev.conf.js 中的 output - path
assetsSubDirectory: 'static',
assetsPublicPath: `/${basePath}/`,
// URL前綴,本質(zhì)上為設(shè)置的build - webpack.dev.conf.js 中的 output - publicPath

router - index.js
如果設(shè)置了URL前綴爬早,則路由中也需要做配置

const basePath = require('../../config/basePath')

const router = new Router({
  base: `/${basePath}/`,
  mode: 'history',
  routes: []
})

4肩碟、loader

less-loader

安裝

npm install --save-dev less-loader less

安裝完成后就可以使用了,不需要配置
使用
HelloWorld.vue

<style lang="less" scoped>
.father {
  .son {
    color: #00ff00;
  }
}
</style>

或者提取出來(lái)
HelloWorld.vue

<style lang="less" scoped>
@import './HelloWorld.less';
.father {
  .son {
    color: #00ff00;
  }
}
</style>

HelloWorld.less

.less-father {
    .less-son {
        color: #ff0000;
    }
}

5凸椿、axios

安裝
npm install axios --save
配置

src文件夾下新建api文件夾削祈,在api文件夾新建http.js,api.js
http.js

import axios from 'axios'

axios.defaults.timeout = 50000

axios.defaults.baseURL = '/api/ecm/'

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
// 權(quán)限 token
axios.defaults.headers.common['Authorization'] = 'token';

// http request 攔截器
axios.interceptors.request.use(
    config => {

      return config
    },
    err => {
      return Promise.reject(err)
    }
)

// http response 攔截器
axios.interceptors.response.use(
  response => {
    if (response) {
      
    }
    return response
  },
  error => {
    
    if (error.response) {
      switch (error.response.status) {
        case 401:
          console.log('error', error.response.data)
          break                
      }
    }
    return Promise.reject(error)
  }
)

export default axios

api.js

import axios from './http'

const api = {
    // 示例
    exampleManage: {
        getMethod: params => axios.get('/get/get', { params }),
        postMethod: formData => axios.post('/post/post', formData),
        putMethod: formData => axios.put('/put/put', formData),
        deleteMethod: params => axios.get('/delete/delete', { params }),
    },
    // 權(quán)限管理
    base: {
        logout: params => axios.get('/logout', { params: params }), // 退出
        menu: () => axios.get('/index/getUserMenuList'), // 菜單
        userInfo: () => axios.get('/user/getCurrentUser'), // 用戶信息
    },    
}

export default api

config - index.js

proxyTable: {
  '/api': {        
    target: 'http://10.96.80.22:8083/',
    changeOrigin: true,
    pathRewrite: {
      '^/api': '/api'
    }
  }
},

main.js

import qs from 'qs'
Vue.prototype.$qs = qs

6、moment

安裝
npm install moment -S
配置

main.js

// 時(shí)間處理 示例
// const time = this.$moment(timestamp).format('YYYY-MM-DD HH:mm:ss')
import Moment from 'moment'
Vue.prototype.$moment = Moment

7脑漫、babel-polyfill

解決ie兼容性問(wèn)題

安裝
npm install babel-polyfill --save
配置

main.js
在最頂端引入

import 'babel-polyfill';

webpack.base.conf.js

module.exports = {
    entry: {
        app: ['babel-polyfill', './src/main.js']
    },
}

8髓抑、ui框架

iview或者element-ui

安裝
npm install iview --save
npm i element-ui -S
配置

main.js

import iView from 'iview';
import 'iview/dist/styles/iview.css';
Vue.use(iView);
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
主題

src/theme -index.less

@import '~iview/src/styles/index.less';

// Here are the variables to cover, such as:
@primary-color: #fc9153;

main.js

import './theme/index.less'

build-utils

less: generateLoaders('less', { javascriptEnabled: true }),

9、樣式

src/assets/css/base.css

@charset "UTF-8";

body, div, dl, dt, dd, ul, ol, li,
h1, h2, h3, h4, h5, h6, pre, code,
form, fieldset, legend, input, button,
textarea, p, blockquote, th, td {
    margin: 0;
    padding: 0;
}

fieldset, img {
    border: 0;
}

/* remember to define focus styles! */
:focus {
    outline: 0;
}

address, caption, cite, code, dfn,
em, i, strong, th, var, optgroup {
    font-style: normal;
    font-weight: normal;
}

h1, h2, h3, h4, h5, h6 {
    font-size: 100%;
    font-weight: normal;
}

abbr, acronym {
    border: 0;
    font-variant: normal;
}

input, button, textarea,
select, optgroup, option {
    font-family: inherit;
    font-size: inherit;
    font-style: inherit;
    font-weight: inherit;
}

code, kbd, samp, tt {
    font-size: 100%;
}

/*@purpose To enable resizing for IE */
/*@branch For IE6-Win, IE7-Win */
input, button, textarea, select {
    *font-size: 100%;
}

body {
    line-height: 1.5;
    font-family: "微軟雅黑";
}

ol, ul {
    list-style: none;
}

/* tables still need 'cellspacing="0"' in the markup */
table {
    border-collapse: collapse;
    border-spacing: 0;
}

caption, th {
    text-align: left;
}

sup, sub {
    font-size: 100%;
    vertical-align: baseline;
}

/* remember to highlight anchors and inserts somehow! */
:link, :visited, ins {
    text-decoration: none;
}

blockquote, q {
    quotes: none;
}

blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}

.clearfix:before, .clearfix:after {
    display: table;
    content: "";
}

.clearfix:after {
    clear: both;
}

.clearfix {
    zoom: 1;
}

/*浮動(dòng)*/
.fl {
    float: left;
}

.fr {
    float: right;
}

/*對(duì)齊*/
.tac {
    text-align: center;
}

.tar {
    text-align: right;
}

src/assets/css/global.less

@baseColor: #fc9153;

html,
body {
  background: #f4f5f7;
  min-width: 1200px;
  min-height: 100%;
  overflow-x: hidden;
}

main.js

import './assets/css/base.css'
import './assets/css/global.less'

10优幸、全局變量

配置完之后吨拍,別的文件就可以使用src/assets/css/global.less@baseColor這樣的全局變量

安裝
npm i sass-resources-loader --save-dev
配置

build-utils

function lessResourceLoader() {//配置less
    var loaders = [
        cssLoader,
        'less-loader',
        {
            loader: 'sass-resources-loader',
            options: {
                resources: [
                    path.resolve(__dirname, '../src/assets/css/global.less'),
                ]
            }
        }
    ];
    if (options.extract) {
        return ExtractTextPlugin.extract({
            use: loaders,
            fallback: 'vue-style-loader'
        })
    } else {
        return ['vue-style-loader'].concat(loaders)
    }
}


// 同文件,應(yīng)用上述的方法
// less: generateLoaders('less'),
    less: lessResourceLoader(),
注意點(diǎn)

src/assets/css/global.less
less文件中不可以引用當(dāng)前目錄的css

11网杆、圖片

網(wǎng)站導(dǎo)航

網(wǎng)站導(dǎo)航

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末羹饰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碳却,更是在濱河造成了極大的恐慌队秩,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昼浦,死亡現(xiàn)場(chǎng)離奇詭異馍资,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)关噪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)鸟蟹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人使兔,你說(shuō)我怎么就攤上這事建钥。” “怎么了虐沥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵熊经,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我置蜀,道長(zhǎng)奈搜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任盯荤,我火速辦了婚禮,結(jié)果婚禮上焕盟,老公的妹妹穿的比我還像新娘秋秤。我一直安慰自己宏粤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布灼卢。 她就那樣靜靜地躺著绍哎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鞋真。 梳的紋絲不亂的頭發(fā)上崇堰,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音涩咖,去河邊找鬼海诲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛檩互,可吹牛的內(nèi)容都是我干的特幔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼闸昨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚯斯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起饵较,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拍嵌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后循诉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體撰茎,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年打洼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了龄糊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡募疮,死狀恐怖炫惩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阿浓,我是刑警寧澤他嚷,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站芭毙,受9級(jí)特大地震影響筋蓖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜退敦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一粘咖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侈百,春花似錦瓮下、人聲如沸翰铡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锭魔。三九已至,卻和暖如春路呜,著一層夾襖步出監(jiān)牢的瞬間迷捧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工胀葱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漠秋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓巡社,卻偏偏與公主長(zhǎng)得像膛堤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晌该,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359