vue项目的vue.config.js配置
1、首先 创建vue.config.js文件:
module.exports={
lintOnSave: false,
transpileDependencies: true,
publicPath: process.env.VUE_APP_OUTPUT_DIR,//生成目录的文件名。
outputDir: process.env.VUE_APP_ROUTER_URL, //生产环境构建文件的目录
assetsDir: '',//输出的静态资源目录名 没有默认放到根目录下 static
productionSourceMap: false,
devServer: {
compress: true,
hot: true, 、、热更新
port: 8080,//端口号
proxy: { //配置多个跨域
'/api1': {
target: ******, //跨域到的地址
secure: BASE_URL.includes('https') ? false : true,
changeOrigin: true,
pathRewrite: { "^/api": "/" }
},
'/api2': {
target: *****,
changeOrigin: true,
secure: BASE_URL.includes('https') ? false : true,
}
}
},
}
2、配置图片或者路径别名, 有两种方式。(chainWebpack 和 configureWebpack)
- 第一种方式---------configureWebpack
configureWebpack: (config) => { config.resolve = { ...config.resolve, alias: { "@": resolve("src"), "api": resolve("src/api"), "img": resolve("src/assets"), }, fallback: { path: require.resolve('path-browserify') }, //否则会找不到path路径 } }
- 第二种方式-------chainWebpack
chainWebpack: config => { config.resolve.alias // 添加别名 .set('@', resolve('src')) .set('@assets', resolve('src/assets')) } }
3、buffer对象不可使用, 在webpack5中移除了nodejs核心模块的polyfill自动引入,所以需要手动引入,对于Buffer这种全局变量还是要自动引入。
plugins配置 new webpack.ProvidePlugin({ Buffer: ["buffer", "Buffer"] })
config.plugins=[new webpack.ProvidePlugin({ Buffer: ["buffer", "Buffer"] })] 或者 config.plugins.push(new webpack.ProvidePlugin({ Buffer: ["buffer", "Buffer"] }))
4、根据不同环境做不同配置:
备注:如果所有配置和插件不区分环境的话,那么启动会很慢。
const IS_PROD = '*****'; if (IS_PROD) { // 为生产环境修改配置... config.plugins.push( // 压缩js代码 new UglifyJsPlugin({ uglifyOptions: { warnings: false, compress: { drop_debugger: true, drop_console: true, //删除console } }, sourceMap: false, cache: true, parallel: true //使用多进程并行运行来提高构建速度 }), //压缩gzip new CompressionPlugin({ algorithm: 'gzip', test: new RegExp( '\\.(' + ['js', 'css'].join('|') + ')$' ), threshold: 10240, minRatio: 0.8 }), //压缩css new CssMinimizerWebpackPlugin(), ) }
5、图片引用过svg的话需要配置plugins svg-sprite-loader
chainWebpack: (config) => { //配置svg的引入 config.module.rule('svg').exclude.add(path.join(__dirname, 'src/icons')).end() config.module .rule('icons') .test(/\.svg$/) .include.add(path.join(__dirname, 'src/icons')) .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) .end()
}
6、配置一些文件打包的方式
chainWebpack: (config) => { if (IS_PROD) { //element-ui config.optimization.splitChunks({ chunks: 'all', cacheGroups: { libs: { name: 'chunk-libs', test: /[\\/]node_modules[\\/]/, priority: 10, chunks: 'initial' // 只打包初始时依赖的第三方 }, elementUI: { name: 'chunk-elementUI', // 单独将 elementUI 拆包 priority: 20, // 权重要大于 libs 和 app 不然会被打包进 libs 或者 app test: /[\\/]node_modules[\\/]element-ui[\\/]/ }, commons: { name: 'chunk-commons', test: resolve('src/components'), // 可自定义拓展你的规则 minChunks: 3, // 最小公用次数 priority: 5, reuseExistingChunk: true }, styles: { name: 'styles', test: m => m.constructor.name === 'CssModule', chunks: 'all', minChunks: 2, minSize: 30000, enforce: true } } }) } }
7、 configureWebpack方式:函数式和对象式
- 函数式
configureWebpack: (config)=>{ // 例如,通过判断运行环境,设置mode config.mode = 'production' //设置插件 config.plugins=[] }
- 对象式
configureWebpack: {
rules:[], //规则
plugins: [] //插件
}
8、chainWepack方式:对象式和函数式
(关于插件plugins)
chainWebpack: (config) => { // 新增一个`hot-hash-webpack-plugin` // 注意:这里use的时候不需要使用`new HotHashWebpackPlugin()` config.plugin('hotHash') .use(HotHashWebpackPlugin, [{ version: '1.0.0' }]); }
(修改别名)
config.resolve.alias .set('@', resolve('src')) .set('api', resolve('src/apis')) .set('common', resolve('src/common'))