--- sidebar: auto --- # Configuration Reference ## Global CLI Config Some global configurations for `@vue/cli`, such as your preferred package manager and your locally saved presets, are stored in a JSON file named `.vuerc` in your home directory. You can edit this file directly with your editor of choice to change the saved options. You can also use the `vue config` command to inspect or modify the global CLI config. ## Target Browsers See the [Browser Compatibility](../guide/browser-compatibility.md#browserslist) section in guide. ## vue.config.js `vue.config.js` is an optional config file that will be automatically loaded by `@vue/cli-service` if it's present in your project root (next to `package.json`). You can also use the `vue` field in `package.json`, but do note in that case you will be limited to JSON-compatible values only. The file should export an object containing options: ``` js // vue.config.js module.exports = { // options... } ``` ### baseUrl Deprecated since Vue CLI 3.3, please use [`publicPath`](#publicPath) instead. ### publicPath - Type: `string` - Default: `'/'` The base URL your application bundle will be deployed at (known as `baseUrl` before Vue CLI 3.3). This is the equivalent of webpack's `output.publicPath`, but Vue CLI also needs this value for other purposes, so you should **always use `publicPath` instead of modifying webpack `output.publicPath`**. By default, Vue CLI assumes your app will be deployed at the root of a domain, e.g. `https://www.my-app.com/`. If your app is deployed at a sub-path, you will need to specify that sub-path using this option. For example, if your app is deployed at `https://www.foobar.com/my-app/`, set `publicPath` to `'/my-app/'`. The value can also be set to an empty string (`''`) or a relative path (`./`) so that all assets are linked using relative paths. This allows the built bundle to be deployed under any public path, or used in a file system based environment like a Cordova hybrid app. ::: warning Limitations of relative publicPath Relative `publicPath` has some limitations and should be avoided when: - You are using HTML5 `history.pushState` routing; - You are using the `pages` option to build a multi-paged app. ::: This value is also respected during development. If you want your dev server to be served at root instead, you can use a conditional value: ``` js module.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/' } ``` ### outputDir - Type: `string` - Default: `'dist'` The directory where the production build files will be generated in when running `vue-cli-service build`. Note the target directory will be removed before building (this behavior can be disabled by passing `--no-clean` when building). ::: tip Always use `outputDir` instead of modifying webpack `output.path`. ::: ### assetsDir - Type: `string` - Default: `''` A directory (relative to `outputDir`) to nest generated static assets (js, css, img, fonts) under. ::: tip `assetsDir` is ignored when overwriting the filename or chunkFilename from the generated assets. ::: ### indexPath - Type: `string` - Default: `'index.html'` Specify the output path for the generated `index.html` (relative to `outputDir`). Can also be an absolute path. ### filenameHashing - Type: `boolean` - Default: `true` By default, generated static assets contains hashes in their filenames for better caching control. However, this requires the index HTML to be auto-generated by Vue CLI. If you cannot make use of the index HTML generated by Vue CLI, you can disable filename hashing by setting this option to `false`. ### pages - Type: `Object` - Default: `undefined` Build the app in multi-page mode. Each "page" should have a corresponding JavaScript entry file. The value should be an object where the key is the name of the entry, and the value is either: - An object that specifies its `entry`, `template`, `filename`, `title` and `chunks` (all optional except `entry`). Any other properties added beside those will also be passed directly to `html-webpack-plugin`, allowing user to customize said plugin; - Or a string specifying its `entry`. ``` js module.exports = { pages: { index: { // entry for the page entry: 'src/index/main.js', // the source template template: 'public/index.html', // output as dist/index.html filename: 'index.html', // when using title option, // template title tag needs to be <%= htmlWebpackPlugin.options.title %> title: 'Index Page', // chunks to include on this page, by default includes // extracted common chunks and vendor chunks. chunks: ['chunk-vendors', 'chunk-common', 'index'] }, // when using the entry-only string format, // template is inferred to be `public/subpage.html` // and falls back to `public/index.html` if not found. // Output filename is inferred to be `subpage.html`. subpage: 'src/subpage/main.js' } } ``` ::: tip When building in multi-page mode, the webpack config will contain different plugins (there will be multiple instances of `html-webpack-plugin` and `preload-webpack-plugin`). Make sure to run `vue inspect` if you are trying to modify the options for those plugins. ::: ### lintOnSave - Type: `boolean | 'error'` - Default: `true` Whether to perform lint-on-save during development using [eslint-loader](https://github.com/webpack-contrib/eslint-loader). This value is respected only when [`@vue/cli-plugin-eslint`](https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint) is installed. When set to `true`, `eslint-loader` will emit lint errors as warnings. By default, warnings are only logged to the terminal and does not fail the compilation. To make lint errors show up in the browser overlay, you can use `lintOnSave: 'error'`. This will force `eslint-loader` to always emit errors. this also means lint errors will now cause the compilation to fail. Alternatively, you can configure the overlay to display both warnings and errors: ``` js // vue.config.js module.exports = { devServer: { overlay: { warnings: true, errors: true } } } ``` When `lintOnSave` is a truthy value, `eslint-loader` will be applied in both development and production. If you want to disable `eslint-loader` during production build, you can use the following config: ``` js // vue.config.js module.exports = { lintOnSave: process.env.NODE_ENV !== 'production' } ``` ### runtimeCompiler - Type: `boolean` - Default: `false` Whether to use the build of Vue core that includes the runtime compiler. Setting it to `true` will allow you to use the `template` option in Vue components, but will incur around an extra 10kb payload for your app. See also: [Runtime + Compiler vs. Runtime only](https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only). ### transpileDependencies - Type: `Array` - Default: `[]` By default `babel-loader` ignores all files inside `node_modules`. If you want to explicitly transpile a dependency with Babel, you can list it in this option. ### productionSourceMap - Type: `boolean` - Default: `true` Setting this to `false` can speed up production builds if you don't need source maps for production. ### crossorigin - Type: `string` - Default: `undefined` Configure the `crossorigin` attribute on `` and `