vue.config.js详解

vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 JSON 的格式来写。

这个文件应该导出一个包含了选项的对象:

// vue.config.js
module.exports = {
	//默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上,例如 https://www.my-app.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.my-app.com/my-app/,则设置 publicPath 为 /my-app/。
	//这个值也可以被设置为空字符串 ('') 或是相对路径 ('./')
	publicPath: './',
	outputDir:"dist",//当运行 vue-cli-service build 时生成的生产环境构建文件的目录名字  默认为"dist"
	assetsDir: './static',//当运行 vue-cli-service build 时生成的生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录  默认为"",默认与生成的index.html同级
	indexPath:"index.html",//npm run build之后生成的入口文件 默认为index.html,此属性可以省略,省略了默认就是index.html
	filenameHashing:true,//默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存。然而,这也要求 index 的 HTML 是被 Vue CLI 自动生成的。如果你无法使用 Vue CLI 生成的 index HTML,你可以通过将这个选项设为 false 来关闭文件名哈希。
	 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'
	 },
	
	//lintOnSave:
	//1.是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码。这个值会在 @vue/cli-plugin-eslint 被安装之后生效。
	//2.设置为 true 时,eslint-loader 会将 lint 错误输出为编译警告。默认情况下,警告仅仅会被输出到命令行,且不会使得编译失败。
	//3.如果你希望让 lint 错误在开发时直接显示在浏览器中,你可以使用 lintOnSave: 'error'。这会强制 eslint-loader 将 lint 错误输出为编译错误,同时也意味着 lint 错误将会导致编译失败。
	//4.或者,你也可以通过设置让浏览器 overlay 同时显示警告和错误:
	//module.exports = {
	  //devServer: {
	    //overlay: {
	    //  warnings: true,
	    //  errors: true
	    //}
	  //}
	//}
	lintOnSave:true,
	runtimeCompiler:false,//是否使用包含运行时编译器的 Vue 构建版本。设置为 true 后你就可以在 Vue 组件中使用 template 选项了,但是这会让你的应用额外增加 10kb 左右。
	transpileDependencies:[],//默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来。
	productionSourceMap:true,//如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建   这玩意设置成false之后,能把打包后的文件大小减小80%   当时我的项目大小是8m+  设成false之后变成了2m+     productionSourceMap:false,之后,就不会生成map文件,map文件的作用在于:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。也就是说map文件相当于是查看源码的一个东西。如果不需要定位问题,并且不想被看到源码,就把productionSourceMap 置为false,既可以减少包大小,也可以加密源码。
	crossorigin:"undefined",//设置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 标签的 crossorigin 属性。需要注意的是该选项仅影响由 html-webpack-plugin 在构建时注入的标签 - 直接写在模版 (public/index.html) 中的标签不受影响。
	integrity:false,//在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 标签上启用 Subresource Integrity (SRI)。如果你构建后的文件是部署在 CDN 上的,启用该选项可以提供额外的安全性。需要注意的是该选项仅影响由 html-webpack-plugin 在构建时注入的标签 - 直接写在模版 (public/index.html) 中的标签不受影响。另外,当启用 SRI 时,preload resource hints 会被禁用,因为 Chrome 的一个 bug 会导致文件被下载两次。
	configureWebpack:Object | Function,//下面举个例子:
	configureWebpack: config => {
        if (process.env.NODE_ENV === "production") {
            // 为生产环境修改配置...
            config.mode = "production";
            // 这里修改下 
			config.optimization.minimizer = [
				new UglifyJsPlugin({
					uglifyOptions: {
						compress: {
							warnings: false,
							drop_console: true, //console
							drop_debugger: true,
							pure_funcs: ['console.log'] //移除console
						}
					}
				})
			]
			//打包文件大小配置
			config["performance"] = {
				"maxEntrypointSize":10000000,
				"maxAssetSize":30000000
			}
        } else {
            // 为开发环境修改配置...
            config.mode = "development";
        }
 	},
//上面是统一使用configureWebpack的函数模式,然后函数模式里面默认会有一个config参数,需要增加或者修改configureWebpack对应的参数,就直接使用config去修改就可以了!
//我这里使用了两个功能,第一个是打包build的时候去掉console的调试信息,第二个就是修改打包静态资源文件大小设置的配置
	chainWebpack:function,//是一个函数,会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。下面举个例子
  	chainWebpack: config => {
	  config.resolve.alias
	    .set('@', resolve('src'))//设置@快捷到src目录
	    .set('view', resolve('src/view'))//设置view快捷指定到src/view目录
	    .set('$css',resolve('/static/css'))
	    .set('$common',resolve('/components'))
	    .set('$api',resolve('/api'))
	    .set('$page',resolve('/pages'))
	    .set('$js',resolve('/static/js'));
	    // 删除预加载
	  config.plugins.delete('preload')
	  config.plugins.delete('prefetch')
	    // 压缩代码
	  config.optimization.minimize(true)
	    // 分割代码
	  config.optimization.splitChunks({
	      chunks: 'all'
	  })
  	},
  	css:{
		modules:false,//默认情况下,只有 *.module.[ext] 结尾的文件才会被视作 CSS Modules 模块。设置为 true 后你就可以去掉文件名中的 .module 并将所有的 *.(css|scss|sass|less|styl(us)?) 文件视为 CSS Modules 模块。
		extract:true,//Default: 生产环境下是 true,开发环境下是 false  是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。
		sourceMap:false,//是否为 CSS 开启 source map。设置为 true 之后可能会影响构建的性能。
		loaderOptions:{},//向 CSS 相关的 loader 传递选项。例如:
	  },
	  devServer:{
	  	proxy:'http://localhost:8080',//如果你的前端应用和后端 API 服务器没有运行在同一个主机上,你需要在开发环境下将 API 请求代理到 API 服务器。这个问题可以通过 vue.config.js 中的 devServer.proxy 选项来配置。http://localhost:8080这会告诉开发服务器将任何未知请求 (没有匹配到静态文件的请求) 代理到http://localhost:4000   如果你想要更多的代理控制行为,也可以使用一个 path: options 成对的对象。完整的选项可以查阅 http-proxy-middleware 。
	    proxy: {
	      '/rng': {
	        target: '<url>',// 后台接口域名
	         secure: false,  // 如果是https接口,需要配置这个参数
	        ws: true,//如果要代理 websockets,配置这个参数
	        changeOrigin: true//是否跨域
			//我的 api='/rng'我的请求地址  ${api}/xxxx/xxx ,请求地址就为 '/rng/xxxx/xxx'当node服务器 遇到 以 '/rng' 开头的请求,就会把 target 字段加上,那么我的请求地址就为 http://45.105.124.130:8081/rng/xxxx/xxx
	      },
	      '/foo': {
	        target: '<other_url>'
	      }
	     }
	  },
	  parallel:'boolean',//是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
  	pluginOptions:{
  	//less全局变量引用
	    'style-resources-loader': {
	      preProcessor: 'less',
	      patterns: [
	      	path.resolve(__dirname, './src/assets/varibles.less'),
	      ]
	    }
  	},
},
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`vue.config.js` 是 Vue CLI 3.x 以上版本中新增的配置文件,用于配置构建工具的行为。它是一个可选的配置文件,在项目根目录下创建即可。 以下是 `vue.config.js` 中可以配置的选项: ### publicPath - 类型:`string` - 默认值:`'/'` 应用部署的基础路径。默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径下,例如 `https://www.example.com/`。如果你的应用被部署在一个子路径下,你需要在这里指定子路径。例如,如果你的应用被部署在 `https://www.example.com/my-app/`,那么将 `publicPath` 设置为 `'/my-app/'`。 ### outputDir - 类型:`string` - 默认值:`'dist'` 打包生成的文件输出的目录。当运行 `npm run build` 时,生成的文件将会被放置在此目录下。 ### assetsDir - 类型:`string` - 默认值:空字符串 静态资源文件夹的名称。该文件夹中的文件将会被复制到输出目录中,例如 `img/logo.png` 会被复制到 `dist/img/logo.png`。如果设置了 `publicPath`,则在 HTML 文件中引用静态资源时需要使用该路径。 ### indexPath - 类型:`string` - 默认值:`'index.html'` 指定生成的 `index.html` 文件的输出路径。相对于 `outputDir`。 ### filenameHashing - 类型:`boolean` - 默认值:`true` 是否使用文件哈希。如果设置为 `true`,则在文件名中包含哈希以实现缓存。 ### lintOnSave - 类型:`boolean | 'warning' | 'default' | 'error'` - 默认值:`true` 是否在保存时通过 eslint-loader 在每次构建时 lint 代码。设置为 `true` 或 `'warning'` 时,保存时会输出提示信息但不会阻止编译。设置为 `'default'` 时,保存时会输出提示信息并阻止编译。设置为 `'error'` 时,保存时会输出错误信息并阻止编译。 ### runtimeCompiler - 类型:`boolean` - 默认值:`false` 是否使用包含运行时编译器的 Vue 构建版本。设置为 `true` 可以使用 `template` 选项,但会增加应用的体积。 ### transpileDependencies - 类型:`Array<string | RegExp>` - 默认值:`[]` 需要被 babel 编译的依赖包名称或正则表达式列表。如果使用了某些第三方库,可能需要将它们加入到这个选项中。 ### productionSourceMap - 类型:`boolean` - 默认值:`true` 是否在生产环境中生成 source map。开启 source map 会影响构建性能,但可以方便地调试生产环境中的代码。 ### crossorigin - 类型:`string` - 默认值:空字符串 设置生成的 HTML 文件中的 `<link>` 和 `<script>` 标签的 `crossorigin` 属性。默认情况下,没有这个属性。如果需要设置,可以使用 `'anonymous'` 或 `'use-credentials'`。 ### configureWebpack - 类型:`Object | Function` - 默认值:空对象 修改内部的 Webpack 配置。如果值是一个对象,则它将被合并到最终的配置中。如果值是一个函数,则它会接收被解析的配置作为参数。该函数可以修改配置并返回新的配置,也可以返回一个被合并的配置对象。 ### chainWebpack - 类型:`Function` - 默认值:空函数 允许对内部的 Webpack 配置进行更细粒度的修改。该选项接收一个函数,该函数会在内部的 Webpack 配置被解析完成后执行。可以使用 [webpack-chain](https://github.com/neutrinojs/webpack-chain) API 对配置进行修改。 ### css - 类型:`Object` - 默认值:空对象 配置 CSS 相关选项。 #### css.modules - 类型:`boolean` - 默认值:`false` 是否开启 CSS modules。启用 CSS modules 后,类名将会被自动转换为哈希字符串,以避免样式冲突。 #### css.extract - 类型:`boolean | Object` - 默认值:`true` 是否将 CSS 提取为单独的文件。默认情况下,生产环境中会提取 CSS,开发环境中不会。如果设置为 `false`,则所有的 CSS 代码会被包含在 JavaScript 文件中。 如果设置为一个对象,则可以通过 `filename` 选项来指定提取出来的 CSS 文件名,以及 `chunkFilename` 选项来指定异步加载的 CSS 文件名。 #### css.sourceMap - 类型:`boolean` - 默认值:`false` 是否为 CSS 开启 source map。 #### css.loaderOptions - 类型:`Object` 向 CSS 相关的 loader 传递选项。例如: ```javascript module.exports = { css: { loaderOptions: { sass: { data: `@import "@/styles/variables.scss";` } } } } ``` 上述配置表示向 `sass-loader` 传递了一个名为 `data` 的选项,该选项包含了一个 SCSS 变量文件的引用。 ### devServer - 类型:`Object` - 默认值:空对象 配置开发服务器行为。 #### devServer.port - 类型:`number` - 默认值:`8080` 开发服务器监听的端口号。 #### devServer.host - 类型:`string` - 默认值:空字符串 开发服务器监听的主机名。如果想让服务器可以被外部访问,应将该值设置为 `0.0.0.0`。 #### devServer.proxy - 类型:`string | Object` - 默认值:空对象 配置 devServer 的代理。可以使用字符串或对象来代理多个路径。例如: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:3000', changeOrigin: true } } } } ``` 上述配置表示将所有以 `/api` 开头的请求转发到 `http://localhost:3000`。`changeOrigin` 选项表示是否改变请求头中的 `host` 值。 #### devServer.before - 类型:`Function` 提供在服务器内部所有其他中间件之前执行自定义中间件的能力。该函数接收 app、server 和 compiler 3 个参数。例如: ```javascript module.exports = { devServer: { before(app) { app.get('/api/user', (req, res) => { res.json({ name: 'Vue.js' }) }) } } } ``` 上述配置表示在开发服务器启动后,访问 `/api/user` 路径时返回一个名为 `Vue.js` 的 JSON 数据。 ### pluginOptions - 类型:`Object` - 默认值:空对象 向插件传递选项。例如: ```javascript module.exports = { pluginOptions: { foo: { bar: true } } } ``` 上述配置表示向 `foo` 插件传递了一个名为 `bar` 的选项,该选项的值为 `true`。 以上是 `vue.config.js` 中的一些常用选项,还有其他选项可以在需要时查阅官方文档,进行更详细的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值