--- 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 | 'warning' | 'default' | '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` or `'warning'`, `eslint-loader` will emit lint errors as warnings. By default, warnings are only logged to the terminal and does not fail the compilation, so this is a good default for development. To make lint errors show up in the browser overlay, you can use `lintOnSave: 'default'`. This will force `eslint-loader` to actually emit errors. this also means lint errors will now cause the compilation to fail. Setting it to `'errors'` will force eslint-loader to emit warnings as errors as well, which means warnings will also show up in the overlay. 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. ::: warning Jest config This option is not respected by the [cli-unit-jest plugin](#jest), because in jest, we don't have to transpile code from `/node_modules` unless it uses non-standard features - Node >8.11 supports the latest ECMAScript features already. However, jest sometimes has to transform content from node_modules if that code uses ES6 `import`/`export` syntax. In that case, use the `transformIgnorePatterns` option in `jest.config.js`. See [the plugin's README](https://github.com/vuejs/vue-cli/blob/dev/packages/%40vue/cli-plugin-unit-jest/README.md) for more information. ::: ### 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 `