全局 CLI 配置
有些針對(duì) @vue/cli 的全局配置,例如你慣用的包管理器和你本地保存的 preset,都保存在 home 目錄下一個(gè)名叫 .vuerc 的 JSON 文件。你可以用編輯器直接編輯這個(gè)文件來更改已保存的選項(xiàng)。
你也可以使用 vue config 命令來審查或修改全局的 CLI 配置。
目標(biāo)瀏覽器
請(qǐng)查閱指南中的瀏覽器兼容性章節(jié)。
vue.config.js
vue.config.js 是一個(gè)可選的配置文件,如果項(xiàng)目的 (和 package.json 同級(jí)的) 根目錄中存在這個(gè)文件,那么它會(huì)被 @vue/cli-service 自動(dòng)加載。你也可以使用 package.json 中的 vue 字段,但是注意這種寫法需要你嚴(yán)格遵照 JSON 的格式來寫。
這個(gè)文件應(yīng)該導(dǎo)出一個(gè)包含了選項(xiàng)的對(duì)象:
module.exports = {
}
baseUrl
從 Vue CLI 3.3 起已棄用,請(qǐng)使用publicPath。
publicPath
- Type: string
- Default: '/'
- 部署應(yīng)用包時(shí)的基本 URL。用法和 webpack 本身的 output.publicPath 一致,但是 Vue CLI 在一些其他地方也需要用到這個(gè)值,所以請(qǐng)始終使用 publicPath 而不要直接修改 webpack 的 output.publicPath。默認(rèn)情況下,Vue CLI 會(huì)假設(shè)你的應(yīng)用是被部署在一個(gè)域名的根路徑上,例如 https://www.my-app.com/。如果應(yīng)用被部署在一個(gè)子路徑上,你就需要用這個(gè)選項(xiàng)指定這個(gè)子路徑。例如,如果你的應(yīng)用被部署在 https://www.my-app.com/my-app/,則設(shè)置 publicPath 為 /my-app/。這個(gè)值也可以被設(shè)置為空字符串 ('') 或是相對(duì)路徑 ('./'),這樣所有的資源都會(huì)被鏈接為相對(duì)路徑,這樣打出來的包可以被部署在任意路徑,也可以用在類似 Cordova hybrid 應(yīng)用的文件系統(tǒng)中。相對(duì) publicPath 的限制相對(duì)路徑的 publicPath 有一些使用上的限制。在以下情況下,應(yīng)當(dāng)避免使用相對(duì) publicPath:當(dāng)使用基于 HTML5 history.pushState 的路由時(shí);當(dāng)使用 pages 選項(xiàng)構(gòu)建多頁面應(yīng)用時(shí)。這個(gè)值在開發(fā)環(huán)境下同樣生效。如果你想把開發(fā)服務(wù)器架設(shè)在根路徑,你可以使用一個(gè)條件式的值:module.exports = {
publicPath: process.env.NODE_ENV === 'production'
? '/production-sub-path/'
: '/'
}
outputDir
- Type: string
- Default: 'dist'
- 當(dāng)運(yùn)行 vue-cli-service build 時(shí)生成的生產(chǎn)環(huán)境構(gòu)建文件的目錄。注意目標(biāo)目錄在構(gòu)建之前會(huì)被清除 (構(gòu)建時(shí)傳入 --no-clean 可關(guān)閉該行為)。提示請(qǐng)始終使用 outputDir 而不要修改 webpack 的 output.path。
assetsDir
- Type: string
- Default: ''
- 放置生成的靜態(tài)資源 (js、css、img、fonts) 的 (相對(duì)于 outputDir 的) 目錄。提示從生成的資源覆寫 filename 或 chunkFilename 時(shí),assetsDir 會(huì)被忽略。
indexPath
- Type: string
- Default: 'index.html'
- 指定生成的 index.html 的輸出路徑 (相對(duì)于 outputDir)。也可以是一個(gè)絕對(duì)路徑。
filenameHashing
- Type: boolean
- Default: true
- 默認(rèn)情況下,生成的靜態(tài)資源在它們的文件名中包含了 hash 以便更好的控制緩存。然而,這也要求 index 的 HTML 是被 Vue CLI 自動(dòng)生成的。如果你無法使用 Vue CLI 生成的 index HTML,你可以通過將這個(gè)選項(xiàng)設(shè)為 false 來關(guān)閉文件名哈希。
pages
- Type: Object
- Default: undefined
- 在 multi-page 模式下構(gòu)建應(yīng)用。每個(gè)“page”應(yīng)該有一個(gè)對(duì)應(yīng)的 JavaScript 入口文件。其值應(yīng)該是一個(gè)對(duì)象,對(duì)象的 key 是入口的名字,value 是:一個(gè)指定了 entry, template, filename, title 和 chunks 的對(duì)象 (除了 entry 之外都是可選的);或一個(gè)指定其 entry 的字符串。
module.exports = {
pages: {
index: {
entry: 'src/index/main.js',
template: 'public/index.html',
filename: 'index.html',
title: 'Index Page',
chunks: ['chunk-vendors', 'chunk-common', 'index']
},
subpage: 'src/subpage/main.js'
}
}
- 提示當(dāng)在 multi-page 模式下構(gòu)建時(shí),webpack 配置會(huì)包含不一樣的插件 (這時(shí)會(huì)存在多個(gè) html-webpack-plugin 和 preload-webpack-plugin 的實(shí)例)。如果你試圖修改這些插件的選項(xiàng),請(qǐng)確認(rèn)運(yùn)行 vue inspect。
lintOnSave
- Type: boolean | 'warning' | 'default' | 'error'
- Default: true
- 是否在開發(fā)環(huán)境下通過 eslint-loader 在每次保存時(shí) lint 代碼。這個(gè)值會(huì)在 @vue/cli-plugin-eslint 被安裝之后生效。設(shè)置為 true 或 'warning' 時(shí),eslint-loader 會(huì)將 lint 錯(cuò)誤輸出為編譯警告。默認(rèn)情況下,警告僅僅會(huì)被輸出到命令行,且不會(huì)使得編譯失敗。如果你希望讓 lint 錯(cuò)誤在開發(fā)時(shí)直接顯示在瀏覽器中,你可以使用 lintOnSave: 'error'。這會(huì)強(qiáng)制 eslint-loader 將 lint 錯(cuò)誤輸出為編譯錯(cuò)誤,同時(shí)也意味著 lint 錯(cuò)誤將會(huì)導(dǎo)致編譯失敗。或者,你也可以通過設(shè)置讓瀏覽器 overlay 同時(shí)顯示警告和錯(cuò)誤:// vue.config.js
module.exports = {
devServer: {
overlay: {
warnings: true,
errors: true
}
}
}
當(dāng) lintOnSave 是一個(gè) truthy 的值時(shí),eslint-loader 在開發(fā)和生產(chǎn)構(gòu)建下都會(huì)被啟用。如果你想要在生產(chǎn)構(gòu)建時(shí)禁用 eslint-loader,你可以用如下配置:// vue.config.js
module.exports = {
lintOnSave: process.env.NODE_ENV !== 'production'
}
runtimeCompiler
- Type: boolean
- Default: false
- 是否使用包含運(yùn)行時(shí)編譯器的 Vue 構(gòu)建版本。設(shè)置為 true 后你就可以在 Vue 組件中使用 template 選項(xiàng)了,但是這會(huì)讓你的應(yīng)用額外增加 10kb 左右。更多細(xì)節(jié)可查閱:Runtime + Compiler vs. Runtime only。
transpileDependencies
- Type: Array<string | RegExp>
- Default: []
- 默認(rèn)情況下 babel-loader 會(huì)忽略所有 node_modules 中的文件。如果你想要通過 Babel 顯式轉(zhuǎn)譯一個(gè)依賴,可以在這個(gè)選項(xiàng)中列出來。
productionSourceMap
- Type: boolean
- Default: true
- 如果你不需要生產(chǎn)環(huán)境的 source map,可以將其設(shè)置為 false 以加速生產(chǎn)環(huán)境構(gòu)建。
crossorigin
- Type: string
- Default: undefined
- 設(shè)置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 標(biāo)簽的 crossorigin 屬性。需要注意的是該選項(xiàng)僅影響由 html-webpack-plugin 在構(gòu)建時(shí)注入的標(biāo)簽 - 直接寫在模版 (public/index.html) 中的標(biāo)簽不受影響。更多細(xì)節(jié)可查閱: CORS settings attributes
integrity
- Type: boolean
- Default: false
- 在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 標(biāo)簽上啟用 Subresource Integrity (SRI)。如果你構(gòu)建后的文件是部署在 CDN 上的,啟用該選項(xiàng)可以提供額外的安全性。需要注意的是該選項(xiàng)僅影響由 html-webpack-plugin 在構(gòu)建時(shí)注入的標(biāo)簽 - 直接寫在模版 (public/index.html) 中的標(biāo)簽不受影響。另外,當(dāng)啟用 SRI 時(shí),preload resource hints 會(huì)被禁用,因?yàn)?nbsp;Chrome 的一個(gè) bug 會(huì)導(dǎo)致文件被下載兩次。
configureWebpack
- Type: Object | Function
- 如果這個(gè)值是一個(gè)對(duì)象,則會(huì)通過 webpack-merge 合并到最終的配置中。如果這個(gè)值是一個(gè)函數(shù),則會(huì)接收被解析的配置作為參數(shù)。該函數(shù)及可以修改配置并不返回任何東西,也可以返回一個(gè)被克隆或合并過的配置版本。更多細(xì)節(jié)可查閱:配合 webpack > 簡單的配置方式
chainWebpack
從 v4 起已棄用,請(qǐng)使用css.requireModuleExtension。 在 v3 中,這個(gè)選項(xiàng)含義與 css.requireModuleExtension 相反。
css.requireModuleExtension
- Type: boolean
- Default: true默認(rèn)情況下,只有 *.module.[ext] 結(jié)尾的文件才會(huì)被視作 CSS Modules 模塊。設(shè)置為 false 后你就可以去掉文件名中的 .module 并將所有的 *.(css|scss|sass|less|styl(us)?) 文件視為 CSS Modules 模塊。提示如果你在 css.loaderOptions.css 里配置了自定義的 CSS Module 選項(xiàng),則 css.requireModuleExtension 必須被顯式地指定為 true 或者 false,否則我們無法確定你是否希望將這些自定義配置應(yīng)用到所有 CSS 文件中。更多細(xì)節(jié)可查閱:配合 CSS > CSS Modules
css.extract
- Type: boolean | Object
- Default: 生產(chǎn)環(huán)境下是 true,開發(fā)環(huán)境下是 false是否將組件中的 CSS 提取至一個(gè)獨(dú)立的 CSS 文件中 (而不是動(dòng)態(tài)注入到 JavaScript 中的 inline 代碼)。同樣當(dāng)構(gòu)建 Web Components 組件時(shí)它總是會(huì)被禁用 (樣式是 inline 的并注入到了 shadowRoot 中)。當(dāng)作為一個(gè)庫構(gòu)建時(shí),你也可以將其設(shè)置為 false 免得用戶自己導(dǎo)入 CSS。提取 CSS 在開發(fā)環(huán)境模式下是默認(rèn)不開啟的,因?yàn)樗?CSS 熱重載不兼容。然而,你仍然可以將這個(gè)值顯性地設(shè)置為 true 在所有情況下都強(qiáng)制提取。
css.sourceMap
- Type: boolean
- Default: false
- 是否為 CSS 開啟 source map。設(shè)置為 true 之后可能會(huì)影響構(gòu)建的性能。
css.loaderOptions
- Type: Object
- Default: {}
- 向 CSS 相關(guān)的 loader 傳遞選項(xiàng)。例如:module.exports = {
css: {
loaderOptions: {
css: {
// 這里的選項(xiàng)會(huì)傳遞給 css-loader
},
postcss: {
// 這里的選項(xiàng)會(huì)傳遞給 postcss-loader
}
}
}
}
支持的 loader 有:css-loaderpostcss-loadersass-loaderless-loaderstylus-loader另外,也可以使用 scss 選項(xiàng),針對(duì) scss 語法進(jìn)行單獨(dú)配置(區(qū)別于 sass 語法)。更多細(xì)節(jié)可查閱:向預(yù)處理器 Loader 傳遞選項(xiàng)提示相比于使用 chainWebpack 手動(dòng)指定 loader 更推薦上面這樣做,因?yàn)檫@些選項(xiàng)需要應(yīng)用在使用了相應(yīng) loader 的多個(gè)地方。
devServer
devServer.proxy
- Type: string | Object
- 如果你的前端應(yīng)用和后端 API 服務(wù)器沒有運(yùn)行在同一個(gè)主機(jī)上,你需要在開發(fā)環(huán)境下將 API 請(qǐng)求代理到 API 服務(wù)器。這個(gè)問題可以通過 vue.config.js 中的 devServer.proxy 選項(xiàng)來配置。devServer.proxy 可以是一個(gè)指向開發(fā)環(huán)境 API 服務(wù)器的字符串:module.exports = {
devServer: {
proxy: 'http://localhost:4000'
}
}
這會(huì)告訴開發(fā)服務(wù)器將任何未知請(qǐng)求 (沒有匹配到靜態(tài)文件的請(qǐng)求) 代理到http://localhost:4000。如果你想要更多的代理控制行為,也可以使用一個(gè) path: options 成對(duì)的對(duì)象。完整的選項(xiàng)可以查閱 http-proxy-middleware 。module.exports = {
devServer: {
proxy: {
'/api': {
target: '<url>',
ws: true,
changeOrigin: true
},
'/foo': {
target: '<other_url>'
}
}
}
}
parallel
- Type: boolean
- Default: require('os').cpus().length > 1是否為 Babel 或 TypeScript 使用 thread-loader。該選項(xiàng)在系統(tǒng)的 CPU 有多于一個(gè)內(nèi)核時(shí)自動(dòng)啟用,僅作用于生產(chǎn)構(gòu)建。
pwa
- Type: Object
- 向 PWA 插件傳遞選項(xiàng)。
pluginOptions
- Type: Object
- 這是一個(gè)不進(jìn)行任何 schema 驗(yàn)證的對(duì)象,因此它可以用來傳遞任何第三方插件選項(xiàng)。例如:module.exports = {
pluginOptions: {
foo: {
// 插件可以作為 `options.pluginOptions.foo` 訪問這些選項(xiàng)。
}
}
}
Babel
Babel 可以通過 babel.config.js 進(jìn)行配置。
提示
Vue CLI 使用了 Babel 7 中的新配置格式 babel.config.js。和 .babelrc 或 package.json 中的 babel 字段不同,這個(gè)配置文件不會(huì)使用基于文件位置的方案,而是會(huì)一致地運(yùn)用到項(xiàng)目根目錄以下的所有文件,包括 node_modules 內(nèi)部的依賴。我們推薦在 Vue CLI 項(xiàng)目中始終使用 babel.config.js 取代其它格式。
所有的 Vue CLI 應(yīng)用都使用 @vue/babel-preset-app,它包含了 babel-preset-env、JSX 支持以及為最小化包體積優(yōu)化過的配置。通過它的文檔可以查閱到更多細(xì)節(jié)和 preset 選項(xiàng)。
同時(shí)查閱指南中的 Polyfill 章節(jié)。
ESLint
ESLint 可以通過 .eslintrc 或 package.json 中的 eslintConfig 字段來配置。
更多細(xì)節(jié)可查閱 @vue/cli-plugin-eslint。
TypeScript
TypeScript 可以通過 tsconfig.json 來配置。
更多細(xì)節(jié)可查閱 @vue/cli-plugin-typescript。
單元測試
Jest
更多細(xì)節(jié)可查閱 @vue/cli-plugin-unit-jest。
Mocha (配合 mocha-webpack)
更多細(xì)節(jié)可查閱 @vue/cli-plugin-unit-mocha。
E2E 測試
Cypress
更多細(xì)節(jié)可查閱 @vue/cli-plugin-e2e-cypress。
Nightwatch
更多細(xì)節(jié)可查閱 @vue/cli-plugin-e2e-nightwatch。
更多建議: