vue-config-js配置參考
vue-cli3 腳手架搭建完成后,項目目錄中沒有 vue.config.js 文件,需要手動創建

創建vue.config.js
vue.config.js 是一個可選的配置文件,如果項目的 (和 package.json 同級的) 根目錄中存在這個文件,那么它會被 @vue/cli-service 自動加載。你也可以使用 package.json 中的 vue 字段,但是注意這種寫法需要你嚴格遵照 JSON 的格式來寫。
在根目錄中創建 vue.config.js

vue.config.js配置
這個文件應該導出一個包含了選項的對象:

配置選項
publicPath
Type: string
Default: '/'
部署應用包時的基本 URL, 用法和 webpack 本身的 output.publicPath 一致。
這個值也可以被設置為空字符串 ('') 或是相對路徑 ('./'),這樣所有的資源都會被鏈接為相對路徑,這樣打出來的包可以被部署在任意路徑。

把開發服務器架設在根路徑,可以使用一個條件式的值:

outputDir
Type: string
Default: 'dist'
輸出文件目錄,當運行 vue-cli-service build 時生成的生產環境構建文件的目錄。注意目標目錄在構建之前會被清除 (構建時傳入 --no-clean 可關閉該行為)。

assetsDir
Type: string
Default: ''
放置生成的靜態資源 (js、css、img、fonts) 的目錄。

注:從生成的資源覆寫 filename 或 chunkFilename 時,assetsDir 會被忽略。
indexPath
Type: string
Default: 'index.html'
指定生成的 index.html 的輸出路徑 (相對於 outputDir)。也可以是一個絕對路徑。

filenameHashing
Type: boolean
Default: true
默認情況下,生成的靜態資源在它們的文件名中包含了 hash 以便更好的控制緩存。然而,這也要求 index 的 HTML 是被 Vue CLI 自動生成的。如果你無法使用 Vue CLI 生成的 index HTML,你可以通過將這個選項設為 false 來關閉文件名哈希。

pages
Type: Object
Default: undefined
在 multi-page(多頁)模式下構建應用。每個“page”應該有一個對應的 JavaScript 入口文件。
其值應該是一個對象,對象的 key 是入口的名字,value 是:
一個指定了 entry, template, filename, title 和 chunks 的對象 (除了 entry 之外都是可選的);
或一個指定其 entry 的字符串。

注:當在 多頁應用 模式下構建時,webpack 配置會包含不一樣的插件 (這時會存在多個 html-webpack-plugin 和 preload-webpack-plugin 的實例)。如果你試圖修改這些插件的選項,請確認運行 vue inspect。
lintOnSave
Type: boolean | 'error'
Default: true
是否在保存的時候使用 `eslint-loader` 進行檢查。 有效的值:`ture` | `false` | `"error"` 當設置為 `"error"` 時,檢查出的錯誤會觸發編譯失敗。

runtimeCompiler
Type: boolean
Default: false
是否使用包含運行時編譯器的 Vue 構建版本。設置為 true 后你就可以在 Vue 組件中使用 template 選項了,但是這會讓你的應用額外增加 10kb 左右。

transpileDependencies
Type: Array<string | RegExp>
Default: []
默認情況下 babel-loader 會忽略所有 node_modules 中的文件。如果你想要通過 Babel 顯式轉譯一個依賴,可以在這個選項中列出來。
productionSourceMap
Type: boolean
Default: true
如果你不需要生產環境的 source map,可以將其設置為 false 以加速生產環境構建。
crossorigin
Type: string
Default: undefined
設置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 標簽的 crossorigin 屬性。
integrity
Type: boolean
Default: false
在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 標簽上啟用 Subresource Integrity (SRI)。如果你構建后的文件是部署在 CDN 上的,啟用該選項可以提供額外的安全性。
Webpack相關配置
configureWebpack
Type: Object | Function
如果這個值是一個對象,則會通過 webpack-merge 合並到最終的配置中。
如果這個值是一個函數,則會接收被解析的配置作為參數。該函數及可以修改配置並不返回任何東西,也可以返回一個被克隆或合並過的配置版本。
chainWebpack
Type: Function
是一個函數,會接收一個基於 webpack-chain 的 ChainableConfig 實例。允許對內部的 webpack 配置進行更細粒度的修改。
Css相關配置

css.modules
Type: boolean
Default: false
默認情況下,只有 *.module.[ext] 結尾的文件才會被視作 CSS Modules 模塊。設置為 true 后你就可以去掉文件名中的 .module 並將所有的 *.(css|scss|sass|less|styl(us)?) 文件視為 CSS Modules 模塊。
css.extract
Type: boolean | Object
Default: 生產環境下是 true,開發環境下是 false
是否將組件中的 CSS 提取至一個獨立的 CSS 文件中 (而不是動態注入到 JavaScript 中的 inline 代碼)。
css.sourceMap
Type: boolean
Default: false
是否為 CSS 開啟 source map。設置為 true 之后可能會影響構建的性能。
css.loaderOptions
Type: Object
Default: {}
向 CSS 相關的 loader 傳遞選項。
支持的 loader 有:
devServer
Type: Object
所有 webpack-dev-server 的選項都支持。注意:
有些值像 host、port 和 https 可能會被命令行參數覆寫。
有些值像 publicPath 和 historyApiFallback 不應該被修改,因為它們需要和開發服務器的 publicPath 同步以保障正常的工作。
devServer.proxy
Type: string | Object
如果你的前端應用和后端 API 服務器沒有運行在同一個主機上,你需要在開發環境下將 API 請求代理到 API 服務器。這個問題可以通過 vue.config.js 中的 devServer.proxy 選項來配置。

parallel
Type: boolean
Default: require('os').cpus().length > 1
是否為 Babel 或 TypeScript 使用 thread-loader。該選項在系統的 CPU 有多於一個內核時自動啟用,僅作用於生產構建。
pwa
Type: Object
向 PWA 插件傳遞選項。
pluginOptions
Type: Object
這是一個不進行任何 schema 驗證的對象,因此它可以用來傳遞任何第三方插件選項。
// Vue.config.js 配置選項
module.exports = {
// 選項
// 基本路徑
publicPath: "./",
// 構建時的輸出目錄
outputDir: "dist",
// 放置靜態資源的目錄
assetsDir: "static",
// html 的輸出路徑
indexPath: "index.html",
//文件名哈希
filenameHashing: true,
//用於多頁配置,默認是 undefined
pages: {
index: {
// page 的入口文件
entry: 'src/index/main.js',
// 模板文件
template: 'public/index.html',
// 在 dist/index.html 的輸出文件
filename: 'index.html',
// 當使用頁面 title 選項時,
// template 中的 title 標簽需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: 'Index Page',
// 在這個頁面中包含的塊,默認情況下會包含
// 提取出來的通用 chunk 和 vendor chunk。
chunks: ['chunk-vendors', 'chunk-common', 'index']
},
// 當使用只有入口的字符串格式時,
// 模板文件默認是 `public/subpage.html`
// 如果不存在,就回退到 `public/index.html`。
// 輸出文件默認是 `subpage.html`。
subpage: 'src/subpage/main.js'
},
// 是否在保存的時候使用 `eslint-loader` 進行檢查。
lintOnSave: true,
// 是否使用帶有瀏覽器內編譯器的完整構建版本
runtimeCompiler: false,
// babel-loader 默認會跳過 node_modules 依賴。
transpileDependencies: [ /* string or regex */ ],
// 是否為生產環境構建生成 source map?
productionSourceMap: true,
// 設置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 標簽的 crossorigin 屬性。
crossorigin: "",
// 在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 標簽上啟用 Subresource Integrity (SRI)。
integrity: false,
// 調整內部的 webpack 配置
configureWebpack: () => {}, //(Object | Function)
chainWebpack: () => {},
// 配置 webpack-dev-server 行為。
devServer: {
open: process.platform === 'darwin',
host: '0.0.0.0',
port: 8080,
https: false,
hotOnly: false,
// 查閱 https://github.com/vuejs/vue-docs-zh-cn/blob/master/vue-cli/cli-service.md#配置代理
proxy: {
'/api': {
target: "http://app.rmsdmedia.com",
changeOrigin: true,
secure: false,
pathRewrite: {
"^/api": ""
}
},
'/foo': {
target: '<other_url>'
}
}, // string | Object
before: app => {}
},
// CSS 相關選項
css: {
// 將組件內的 CSS 提取到一個單獨的 CSS 文件 (只用在生產環境中)
// 也可以是一個傳遞給 `extract-text-webpack-plugin` 的選項對象
extract: true,
// 是否開啟 CSS source map?
sourceMap: false,
// 為預處理器的 loader 傳遞自定義選項。比如傳遞給
// Css-loader 時,使用 `{ Css: { ... } }`。
loaderOptions: {
css: {
// 這里的選項會傳遞給 css-loader
},
postcss: {
// 這里的選項會傳遞給 postcss-loader
}
},
// 為所有的 CSS 及其預處理文件開啟 CSS Modules。
// 這個選項不會影響 `*.vue` 文件。
modules: false
},
// 在生產環境下為 Babel 和 TypeScript 使用 `thread-loader`
// 在多核機器下會默認開啟。
parallel: require('os').cpus().length > 1,
// PWA 插件的選項。
// 查閱 https://github.com/vuejs/vue-docs-zh-cn/blob/master/vue-cli-plugin-pwa/README.md
pwa: {},
// 三方插件的選項
pluginOptions: {
// ...
}
}