雖然一直沒有親手搭建過vue項目,可是2.0的時候就開始自學(但並無實踐項目)。而後公司最近有我的用3.0作了個項目,公司讓我參與進去,我就順便學習了一把3.0。(美滋滋)javascript
由於電腦的環境仍是以前自學時候的2.0,所以如今須要先升級到3.0。下面是具體步驟:css
1. npm uninstall -g vue-clihtml
2. npm install -g @vue/clivue
3. vue create [new-dir] //進去後會有一些選擇讓你作,我選的default,而後下載用選npmjava
4. cd [new-dir] webpack
4. npm run serve web
至此3.0版本的項目就初始化好。能夠看到目錄結構真的是很是的精簡。我參考同事已經作好的項目,是多了幾個文件,分別是:vue-cli
1. vue.config.jsnpm
2. .env & .env.development & .env.[其餘環境]json
下面就講下vue.config.js (一個配置文件,替代了2.0的webpack.config.js)
官方說vue.config.js是一個可配的文件,若是存在(與package.json同級),會被@vue/cli-service自動加載
功能:完成關於端口號的配置,打包以後的路徑配置,圖片的配置等。
i:chainWebpack
容許對內部webpack配置作更細粒度的修改,好比修改、增長loader(鏈式操做)
chainWebpack:config=>{ config.module.rule('xx').tap( () => {return {key:val,key:val}} ) //修改loader選項 config.module.rule('xx').end() //添加一個新的loader config.plugin('xx').tap( args => { ...; return args} ) //修改插件選項 }
ii:configureWebpack
調整webpack配置(development(開發)/production(生產))
若是須要基於環境有條件的配置,或者想直接修改配置,就能夠返回一個函數,參數會收到已解析好的而配置,在函數內可直接改配置
configureWebpack: config => {
if (process.env.NODE_ENV === 'production') { //xxxxx }else if(process.env.NODE_ENV==='development'){
//xxxx
} },
iii:css
css的處理
css: { loaderOptions: { //向css相關的loader傳遞選項 設置後每一個sass文件都會預加載這兩個文件 sass: { data: `@import "@/env/${process.env.VUE_APP_PROJECT_ENV}/css/_variables.scss"; @import "@/css/_variables.scss";` } } }
//聲明變量具體的值(主題文件夾下的css文件夾)
$variable-color-theme: #ff8c05;
$variable-color-theme-deeper: #ff7505;
$variable-color-theme-disabled: #f7d5b1;
//主題色是變量(外層css文件夾)
$color-theme: $variable-color-theme;
$color-theme-deeper: $variable-color-theme-deeper;
$color-theme-disabled: $variable-color-theme-disabled;
iv: productionSourceMap:false
若是設置成false,項目在打包後是會壓縮加密的,運行速度會加快,可是運行時報錯是沒法得知
若是設置成ftrue, 項目會加載所有源碼,則會具體顯示運行時的報錯,運行速度會變慢,並且暴露了源碼
v: vue-loader+transformAssetUrls
vue-loader: 解析和轉換.vue文件,提取出其中的邏輯代碼js/css/html,再分別把他們交給對應的loader去處理
transformAssetUrls: 模板編譯中,編譯器將某些資源的某些屬性轉成可被調用(etc: img的src屬性),使得這些資源能夠被webpack處理
chainWebpack: config => { config.module .rule('vue') .use('vue-loader') .loader('vue-loader') .tap(() => { return { transformAssetUrls: { video: ['src', 'poster'], source: 'src', img: 'src', image: 'xlink:href' } } }) }
vi:聲明新的路徑變量 @env
如下@env表明的路徑變量爲src/env下的,若是是esim環境,就在/esim目錄裏,若是是wesim環境,就在/wesim目錄裏
用於:在不一樣環境下,可能同一位置上引入的組件內容不同,用於導入這些組件的時候,聲明路徑
configureWebpack: config => { Object.assign(config.resolve.alias, {'@env': path.resolve(`src/env/${process.env.VUE_APP_PROJECT_ENV}`)}) }
vii:filemanager-webpack-plugin
用於:在build以前及以後複製、打包、移動、刪除文件以及文件夾
const FileManagerPlugin = require('filemanager-webpack-plugin') configureWebpack: config => { if (process.env.NODE_ENV === 'production') { config.plugins.push(new FileManagerPlugin({ onEnd: { archive: [ { source: './dist', destination: `./dist/${process.env.VUE_APP_DOMAIN}-${packageInfo.version}.tar`, format: 'tar', } ] } })) } },