之前一直用的vue-cli2顾复,vli3與cli2創(chuàng)建命令不同
一創(chuàng)建項目:vue create 文件名 (不支持駝峰见咒,含大寫字母)
① 除最后兩個现使,其他選項都是你此前保存的預(yù)設(shè)配置(如下圖第一個“ my-default”是我之前保存的預(yù)設(shè)配置荐绝,如今便可以直接用了):
如果沒有配置保存過一汽,則只有以下兩個選項:
② default(babel,eslint):默認(rèn)設(shè)置(直接enter)非常適合快速創(chuàng)建一個新項目的原型低滩,沒有帶任何輔助功能的 npm包
③ Manually select features:自定義配置(按方向鍵 ↓)是我們所需要的面向生產(chǎn)的項目召夹,提供可選功能的 npm 包
手動選擇需要添加的配置項:
( ) Babel //轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼恕沫,從而在現(xiàn)有環(huán)境執(zhí)行监憎。
( ) TypeScript// TypeScript是一個JavaScript(后綴.js)的超集(后綴.ts)包含并擴展了 JavaScript 的語法,需要被編譯輸出為 JavaScript在瀏覽器運行
( ) Progressive Web App (PWA) Support// 漸進式Web應(yīng)用程序
( ) Router // vue-router(vue路由)
( ) Vuex // vuex(vue的狀態(tài)管理模式)
( ) CSS Pre-processors // CSS 預(yù)處理器(如:less婶溯、sass)
( ) Linter / Formatter // 代碼風(fēng)格檢查和格式化(如:ESlint)
( ) Unit Testing // 單元測試(unit tests)
( ) E2E Testing // e2e(end to end) 測試
選擇完后直接enter鲸阔,然后會提示你選擇對應(yīng)功能的具體工具包,選擇自己擅長或者使用廣泛的(方便遇到問題時百度)迄委,簡介如下:
①是否使用history router:
Vue-Router 利用了瀏覽器自身的hash 模式和 history 模式的特性來實現(xiàn)前端路由(通過調(diào)用瀏覽器提供的接口)
② css預(yù)處理器
主要為css解決瀏覽器兼容褐筛、簡化CSS代碼 等問題
③ ESLint:
提供一個插件化的javascript代碼檢測工具,ESLint + Prettier //使用較多
④ 何時檢測:save
⑤ 單元測試 :
? Pick a unit testing solution: (Use arrow keys)
Mocha + Chai //mocha靈活,只提供簡單的測試結(jié)構(gòu)叙身,如果需要其他功能需要添加其他庫/插件完成渔扎。必須在全局環(huán)境中安裝
Jest //安裝配置簡單,容易上手信轿。內(nèi)置Istanbul赞警,可以查看到測試覆蓋率,相較于Mocha:配置簡潔虏两、測試代碼簡潔愧旦、易于和babel集成、內(nèi)置豐富的expect
⑥ 如何存放配置 :
⑦ 是否保存本次配置(y:記錄本次配置定罢,然后需要你起個名; n:不記錄本次配置):
⑧ 搭建完成:
二項目結(jié)構(gòu):
項目結(jié)構(gòu)差別:
① vuex(狀態(tài)管理):
vue cli 2 中 :vuex是搭建完成后自己npm install的笤虫,并不包括在搭建過程中。可以看到vue cli 2的vuex默認(rèn)文件夾(store)又包含了三個js文件:action(存放一些調(diào)用外部API接口的異步執(zhí)行的的方法琼蚯,然后commit mutations改變mutations 數(shù)據(jù))酬凳、index(初始化mutations 數(shù)據(jù),是store的出口)遭庶、mutations(處理數(shù)據(jù)邏輯的同步執(zhí)行的方法的集合宁仔,Vuex中store數(shù)據(jù)改變的唯一方法commit mutations)
vue cli 3 中:vuex是包含在搭建過程供選擇的預(yù)設(shè)。vue cli 3 中默認(rèn)只用一個store.js代替了原來的store文件夾中的三個js文件峦睡。action翎苫、mutations、state以及store 的 getters 的用法有很多
② router (路由):
vue cli 2: “ router/index.js ”
vue cli 3:“router.js”(用法和做的事都一樣)
③ 去掉 static 榨了、 新增 public 文件夾
vue cli 2 :static 是 webpack 默認(rèn)存放靜態(tài)資源的文件夾煎谍,打包時會直接復(fù)制一份到dist文件夾不會經(jīng)過 webpack 編譯
vue cli 3 : 摒棄 static 新增了 public 。vue cli 3 中“靜態(tài)資源”兩種處理方式:
經(jīng)webpack 處理:在 JavaScript 被導(dǎo)入或在 template/CSS 中通過“相對路徑”被引用的資源會被編譯并壓縮
不經(jīng)webpack 處理:放置在 public
目錄下或通過絕對路徑被引用的資源將會“直接被拷貝”一份龙屉,不做任何編譯壓縮處理
④ index.html :
vue cli 2 :“index.html ”
vue cli 3 :“public/index.html ”此模板會被 html-webpack-plugin 處理的
⑤ src/views:
vue cli 3 的 src文件夾 新增 views文件夾 用來存放 “頁面”呐粘,區(qū)分 components(組件)
⑥ 去掉 build(根據(jù)config中的配置來定義規(guī)則)、config(配置不同環(huán)境的參數(shù))文件夾 :
vue cli 3 中转捕,這些配置 你可以通過 命令行參數(shù)作岖、或 vue.config.js
(在根目錄 新建一個 vue.config.js 同名文件)里的 devServer 字段配置開發(fā)服務(wù)器
⑦ babel.config.js:
配置Babel 。Vue CLI 使用了 Babel 7 中的新配置格式 babel.config.js
五芝。和 .babelrc
或 package.json
中的 babel
字段不同痘儡,這個配置文件不會使用基于文件位置的方案,而是會一致地運用到項目根目錄以下的所有文件与柑,包括 node_modules
內(nèi)部的依賴谤辜。官方推薦在 Vue CLI 項目中始終使用 babel.config.js
取代其它格式蓄坏。
⑧ 根目錄的一些其他文件的改變:
之前所有的配置文件都在vue create 搭建時preset預(yù)設(shè) 或者 后期可以通過 命令參數(shù) 价捧、 vue.config.js 中配置
根據(jù)需要在根目錄下新建 vue.config.js自行配置,eg:(簡單配置涡戳,更多配置詳情參見官網(wǎng):https://cli.vuejs.org/zh/config/)
module.exports = {
baseUrl: '/',// 部署應(yīng)用時的根路徑(默認(rèn)'/'),也可用相對路徑(存在使用限制)
outputDir: 'dist',// 運行時生成的生產(chǎn)環(huán)境構(gòu)建文件的目錄(默認(rèn)''dist''结蟋,構(gòu)建之前會被清除)
assetsDir: '',//放置生成的靜態(tài)資源(s、css渔彰、img嵌屎、fonts)的(相對于 outputDir 的)目錄(默認(rèn)'')
indexPath: 'index.html',//指定生成的 index.html 的輸出路徑(相對于 outputDir)也可以是一個絕對路徑。
pages: {//pages 里配置的路徑和文件名在你的文檔目錄必須存在 否則啟動服務(wù)會報錯
index: {//除了 entry 之外都是可選的
entry: 'src/index/main.js',// page 的入口,每個“page”應(yīng)該有一個對應(yīng)的 JavaScript 入口文件
template: 'public/index.html',// 模板來源
filename: 'index.html',// 在 dist/index.html 的輸出
title: 'Index Page',// 當(dāng)使用 title 選項時,在 template 中使用:<title><%= htmlWebpackPlugin.options.title %></title>
chunks: ['chunk-vendors', 'chunk-common', 'index'] // 在這個頁面中包含的塊恍涂,默認(rèn)情況下會包含,提取出來的通用 chunk 和 vendor chunk
},
subpage: 'src/subpage/main.js'//官方解釋:當(dāng)使用只有入口的字符串格式時,模板會被推導(dǎo)為'public/subpage.html',若找不到就回退到'public/index.html',輸出文件名會被推導(dǎo)為'subpage.html'
},
lintOnSave: true,// 是否在保存的時候檢查
productionSourceMap: true,// 生產(chǎn)環(huán)境是否生成 sourceMap 文件
css: {
extract: true,// 是否使用css分離插件 ExtractTextPlugin
sourceMap: false,// 開啟 CSS source maps
loaderOptions: {},// css預(yù)設(shè)器配置項
modules: false// 啟用 CSS modules for all css / pre-processor files.
},
devServer: {// 環(huán)境配置
host: 'localhost',
port: 8080,
https: false,
hotOnly: false,
open: true, //配置自動啟動瀏覽器
proxy: {// 配置多個代理(配置一個 proxy: 'http://localhost:4000' )
'/api': {
target: '<url>',
ws: true,
changeOrigin: true
},
'/foo': {
target: '<other_url>'
}
}
},
pluginOptions: {// 第三方插件配置
// ...
}
};