cli的包名變動css
# cli 2.x
npm install -g vue-cli
# cli 3.x
# 3.x 安裝時,若是以前安裝了2.x須要卸載2.x再安裝
npm install -g @vue/cli
複製代碼
cli2.x
vue init <template-name> <project-name>
npm i
npm run dev
複製代碼
cli3.x
- 安裝新增
TypeScript
配置選項- 新增
圖形化安裝
方法- 保留了2.x以前的安裝方法
vue create hello-world
npm i
npm run serve
# 使用vue ui建立新項目(3.x新增)
vue ui
# 使用舊版(2.X)建立
npm install -g @vue/cli-init
# 'vue init'的運行效果與‘vue-cli@2.x’相同
vue init webpack projectname
複製代碼
config
目錄刪除,使用模式的.env
文件代替[模式
]cli3
新增模式
概念,每一個模式在項目中都有對應的配置文件,項目啓動時,對應的文件就會加載,與環境變量不一樣,一個模式能夠包括多個環境變量html
Vue CLI
項目默認有三個模式:
development
模式用於 vue-cli-service serve
production
模式用於 vue-cli-service build
和 vue-cli-service test:e2e
test
模式用於 vue-cli-service test:unit
--mode
指定NODE_ENV=development npm run serve --mode mymode # 模式包含多個環境變量
複製代碼
cli3.x
爲模式與環境變量指定了一個.env
配置文件.env # 全部環境
.env.mode # mode模式加載的配置文件[優先級高於.env]
.env.mode.development # mode模式下,development環境所加載的配置文件[優先級最高]
複製代碼
.env
文件詳細信息
config
目錄的VUE_APP_
開頭的變量能夠再代碼中經過process.env
訪問,其餘的變量不可訪問NODE_ENV
和BASE_URL
3.x
版本的config
目錄雖然刪除,可是若是不習慣.env
的方式,能夠不設置任何模式,只指定NODE_ENV,按2.x的config方法配置參數vue
刪除了static
目錄,它的靜態資源轉移到public
目錄中,經過/xx.xx
能夠直接訪問webpack
public
詳細信息index.html
入口文件從根目錄轉到public
目錄下,它擁有3個特殊插值
<%= VALUE %>
用來作不轉義插值;<%- VALUE %>
用來作 HTML 轉義插值;<% expression %>
用來描述 JavaScript 流程控制public
目錄存放cli3
項目的靜態資源有兩種處理方式
avaScript
或template/css(vue)
中經過相對路徑導入。這類資源會被webpack處理(不在public
目錄)public
目錄或者使用絕對路徑被導入的靜態資源。這類資源會被直接拷貝,不會通過webpack
處理cli3.x
項目配置的不一樣(build
目錄刪除)2.x
版本的項目配置是在config
和build
中完成,可是,到了3.x
版本,這兩個目錄都被刪除,若是須要自定義配置,須要本身新建vue.config.js
文件git
publicPath
webpack
的output.publicPath
vue
項目中其餘地方會用到publicPath
,因此不要修改webpack
的output.publicPath
baseUrl
的,baseUrl 3.3
後已棄用outputDir
build
構建的文件存放的目錄output.path
,但只能修改outputDir
,不能修改output.path
assetsDir
編譯後,在outputDir
目錄中存放靜態資源的目錄lintOnSave
配置eslint
後,是否每次保存lint
代碼,默認啓動runtimeCompiler
是否使用包含運行時編譯器的 Vue 構建版本,默認不啓動configureWebpack
& chainWebpack
webpack
內容的,前者是合併對象,後者是鏈式調用cli3.6
]webpack
的build
代碼壓縮默認不開啓,須要設置環境變量爲productio
n纔會開啓devServer
支持全部webpack-dev-server
選項
host、port、https
proxy
module.exports = {
port: 8100,
devServer: {
proxy: 'http://localhost:4000'
}
}
複製代碼
在cli3.x
中能夠使用vue serve
和vue build
命令對單個*.vue
文件進行快速原型開發web
vue serve 的缺點就是它須要安裝全局依賴,這使得它在不一樣機器上的一致性不能獲得保證。所以這隻適用於快速原型開發vue-router
npm install -g @vue/cli-service-global
複製代碼
單個文件vuex
<template>
<h1>Hello!</h1>
</template>
複製代碼
vue serve
運行文件vue serve myComponent.vue
Usage: serve [options] [entry]
在開發環境模式下零配置爲 .js 或 .vue 文件啓動一個服務器
Options:
-o, --open 打開瀏覽器
-c, --copy 將本地 URL 複製到剪切板
-h, --help 輸出用法信息
複製代碼
vue build
編譯文件vue build myComponent.vue
Usage: build [options] [entry]
在生產環境模式下零配置構建一個 .js 或 .vue 文件
Options:
-t, --target <target> 構建目標 (app | lib | wc | wc-async, 默認值:app)
-n, --name <name> 庫的名字或 Web Components 組件的名字 (默認值:入口文件名)
-d, --dest <dir> 輸出目錄 (默認值:dist)
-h, --help 輸出用法信息
複製代碼
vue cli3
新增一個UI圖形化管理頁面,能夠經過它新建項目、管理原有項目的插件vue-cli
vue ui # 啓動圖形化界面
複製代碼
第1、第三種選擇後直接建立項目,第二種執行下一步,且功能與配置頁的信息與以前命令行安裝的相同express
cli
插件vue cli3.x
使用了一套基於插件的架構,cli的相關依賴都是以@vue/cli-plugin-
開頭的webpack
配置,也能夠向 vue-cli-service
注入命令vue add
插件的安裝cli3.x
項目提供了vue add
命令來安裝插件
vue add @vue/cli-plugin-eslint
複製代碼
同時,該命令能夠識別下列寫法,命令與上一行的命令等價
vue add eslint
vue add @vue/eslint
複製代碼
該命令也能夠在一個指定的範圍內安裝第三方插件
# 插件名:@foo/vue-cli-plugin-bar
vue add @foo/bar
複製代碼
也能夠向插件傳遞生成器選項
這樣會跳過命令提示
vue add @vue/eslint --config airbnb --lintOn save
複製代碼
vue-router
和vuex
它們沒有對應的插件,可是依舊能夠使用vue add
在項目中添加它們
vue add router
vue add vuex
複製代碼
vue invoke
調用生成器該命令會跳過安裝過程直接調用插件的生成器,接收和vue add一致的參數
vue invoke @foo/bar
複製代碼
若是隻須要在項目中直接訪問插件API,而不須要建立完整的插件 能夠使用vuePlugin.service配置
{
"vuePlugins": {
"service": ["my-commands.js"]
}
}
複製代碼
或者 vuePlugin.ui 添加爲UI插件
{
"vuePlugins": {
"ui": ["my-ui.js"]
}
}
複製代碼
預設配置是一個包含建立新項目時所需的預約義選項和插件的JSON對象,只要在建立項目時,選中這個對象文件,就能安裝文件的JSON內容常見項目,實現快速自定義建立項目
{
"useConfigFiles": true,
"router": true,
"vuex": true,
"cssPreprocessor": "sass",
"plugins": {
"@vue/cli-plugin-babel": {},
"@vue/cli-plugin-eslint": {
"config": "airbnb",
"lintOn": ["save", "commit"]
}
},
"configs": {
"vue": {...},
"postcss": {...},
"eslintConfig": {...},
"jest": {...}
}
}
複製代碼
預設配置包括插件生成器配置和集成工具的配置等待 這些配置會根據useConfigFiles
合併到package.json
或相應的配置文件中,如當 "useConfigFiles": true
的時候,configs
的值將會被合併到 vue.config.js
中
預設配置中的插件能夠顯示的指定版本範圍,若是沒有值是由registry中最新版本(官方推薦指定)
{
"plugins": {
"@vue/cli-plugin-eslint": {
"version": "^3.0.0",
// ... 該插件的其它選項
}
}
}
複製代碼
每一個插件在項目建立的過程當中均可以注入它本身的命令提示,不過當你使用了預設配置,這些命令提示就會被跳過,若是須要展現命令提示,則須要設置"prompts": true
便可
{
"plugins": {
"@vue/cli-plugin-eslint": {
// 讓用戶選取他們本身的 ESLint 配置
"prompts": true
}
}
}
複製代碼
vue create過程當中保存的預設配置默認存放在~/.vuerc 將預設配置寫在vuerc的'presets'屬性中能夠再建立項目時,能夠顯示多個預設配置。直接選擇須要的建立項目便可
{
"useTaobaoRegistry": false,
"packageManager": "npm",
"presets": { // 預設配置添加的地方,可添加多個預設配置
"my_sets": { // 名爲‘my_sets’的預設配置
"useConfigFiles": true,
"router": true,
"vuex": true,
"cssPreprocessor": "sass",
"plugins": {
"@vue/cli-plugin-babel": {},
"@vue/cli-plugin-eslint": {
"config": "airbnb",
"lintOn": ["save", "commit"]
}
}
}
}
}
複製代碼
vue create
命令中使用--preset
指定預設配置該種形式只能加載json形式的文件,它有兩種形式:本地預設和遠程預設
若是--preset
選項的值是一個相對或絕對文件路徑,或是以 .json
結尾,則加載本地預設,不然加載遠程預設
# ./my-preset 應當是一個包含 preset.json 的文件夾
vue create --preset ./my-preset my-project
# 或者,直接使用當前工做目錄下的 json 文件:
vue create --preset my-preset.json my-project
複製代碼
從git上獲取別人分享的預設
git repo
將一個預設配置分享給其餘開發者,repo
應該包含如下文件: *preset.json
: 包含預設配置數據的主要文件(必需)。
generator.js
: 一個能夠注入或是修改項目中文件的 Generator。prompts.js
:一個能夠爲 generator
收集選項的 prompts
文件# 從 GitHub repo 使用預設配置
vue create --preset username/repo my-project
複製代碼
GitLab
和 BitBucke
t 也是支持的。若是要從私有 repo 獲取,請確保使用 --clone
選項:vue create --preset gitlab:username/repo --clone my-project
vue create --preset bitbucket:username/repo --clone my-project
# 自託管的 repo
vue create --preset gitlab:my-gitlab-server.com:group/projectname --clone my-project
vue create --preset direct:ssh://git@my-gitlab-server.com/group/projectname.git --clone my-project
複製代碼
const path = require('path')
function resolve (dir) {
return path.join(__dirname, dir)
}
module.exports = {
publicPath: '/',
assetsDir: 'static',
productionSourceMap: false,
configureWebpack: config => {
if (process.env.VUE_APP_NODE_ENV === 'production') {
// 爲生產環境修改配置...
} else {
// 爲開發環境修改配置...
}
},
// 解析別名處理
chainWebpack: config => {
config.resolve.alias
.set('@img', resolve('src/assets/img'))
.set('@c', resolve('src/components'))
.set('@m', resolve('src/mixins'))
.set('@v', resolve('src/views'))
.set('@s', resolve('src/store'))
},
// 配置高於chainWebpack中關於 css loader 的配置
css: {
// 是否開啓支持 foo.module.css 樣式
modules: false,
// 是否使用 css 分離插件 ExtractTextPlugin,採用獨立樣式文件載入,不採用 <style> 方式內聯至 html 文件中
extract: true,
// 是否構建樣式地圖,false 將提升構建速度
sourceMap: false,
// css預設器配置項
loaderOptions: {
css: {
// options here will be passed to css-loader
},
postcss: {
// options here will be passed to postcss-loader
}
}
},
devServer: {
port: 8010
}
}
複製代碼