vue.config.js
vue-cli 2版本和vue-cli 4版本的项目有着很大的区别,在vue-cli2生成的项目中会存在大量的webpack配置文件 如根目录下面的config文件夹中的文件。
vue-cli2配置webpack
如果我们要配置vue-cli2的webpack 可以在config文件夹中配置开发环境和生产环境不同的一些变量 然后使用node.js中process.env.NODE_ENV来获取项目当前运行的环境从而实现webpack在不同环境的执行。vue-cli2配置webpack较为繁琐 因此推荐使用vue-cli4(升级到vue-cli4后是真的香)
vue-cli4配置webpack
上篇文章我们介绍了使用vue-cli4生成项目之后的目录结构 ,vue-cli4自带的配置默认也可以实现项目的打包 如运行 npm run build 就执行了vue-cli4给我们进行默认打包的配置 显然默认配置是远远不能满足我们优化需求的。我们需要自己进行相关的配置。首先 我们打开项目 在项目的根文件新建一个js文件vue.config.js 。之后webpack的相关配置就会在该文件中进行配置。

我们现在进行第一步 在vue.config.js中引入 webpack包 我们并不需要进行webpack的依赖安装,在我们创建项目时 vue-cli4 自带了webpack
const webpack = required('webpack')
|
之后 由于我们打包后需要将打包的文件放在某个位置。一般我们都会将打包之后的代码放到项目根目录下 因此我们还应该用到 node.js的path模块
const path = required('path')
const resolve = dir => path.join(__dirname,dir)
|
之后我们可以定义项目的运行环境 然后根据项目的运行环境来判断webpack应该执行那些配置 要想知道项目的运行环境 我们依然需要用到node.js
const is_pro = ['production','prod'].includes(process.env.NODE_ENV)
const is_dev = ['devlopment','dev'].includes(process.env.NODE_ENV)
|
接下来我们继续定义一些常量
const productPath = '/SIEMENS/AC-CSZB-20210322/QYWX'
const title ='xxx'
|
做完这些之后我们就可以进行正式的配置了。
module.exports = { publicPath: is_pro ? productPath :'/', outputDir:'dist' assetsDir:'static' runtimeCompiler: false productionSourceMap: !IS_PROD, chainWebpack : config =>{ config.resovle.symlinks(true) config.resolve.alias .set('vue$', 'vue/dist/vue.esm.js') .set('@v', resolve('src/views')) .set('@', resolve('src')) .set('@c', resolve('src/components')) .set('@router', resolve('src/router')) .set('@store', resolve('src/store')) .set('@assets', resolve('src/assets')) config.plugin('ignore').use( new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn$/) ) if(is_pro){ config .plugin('webpack-report') .use(BundleAnalyzerPlugin,[ { analyzerMode:”static“ } ]) const baseUrl = 'https://cdn.jsdelivr.net/npm/' const cdn = { js: [`${baseUrl}vue@2.6.11/dist/vue.min.js`, `${baseUrl}vue-router@3.2.0/dist/vue-router.min.js`, `${baseUrl}vuex@3.4.0/dist/vuex.min.js`, `${baseUrl}view-design@4.0.0/dist/iview.min.js`, `${baseUrl}jquery@3.4.1/dist/jquery.min.js` ], css: [`${baseUrl}view-design@4.0.0/dist/styles/iview.css`] } config.plugin('html').tap(args ={ args[0].cdn =cdn args[0].title =title return args }) }, configureWebpack: cof =>{ const plugin = [] if(is_pro){ cof.externals = { vue: 'Vue', 'vue-router': 'VueRouter', vuex: 'Vuex', 'view-design': 'iview', jquery: 'jQuery' } } plugin.push( new CompressionWebpackPlugin( { filename: '[path].gz[query]', algorithm: 'gzip', test: productionGzipExtensions, threshold: 10240, minRatio: 0.8 })) } plugin.push( new webpack.ProvidePlugin( { jQuery: 'jquery', $: 'jquery', 'windows.jQuery': 'jquery' }) ) cof.performance = { hints: 'warning', maxAssetSize: 2000000, maxEntrypointSize: 2000000, assetFilter (assetFilename) { return assetFilename.endsWith('.js') } } conf.plugins = [...config.plugins,...plugin] css: { extract: IS_PROD, sourceMap: false, requireModuleExtension: true, loaderOptions: {} }, devServer: { hot: true, host: '0.0.0.0', port: 8080, https: false, open: false proxy: { "/api": { target:"https://www.easy-mock.com/mock/xxxxxxxxxxxxxxx", secure: false, changeOrigin: true, pathRewrite: { "^/api": "/" } } } }, }
|
下面提供类型图片 以供参考




其实我们只使用部分的webpack 插件 还有很多很多插件我们没有使用, 插件的使用需要结合项目来进行选择。
好的。至此wepack的打包配置就完成了。
END
感谢您观看此篇博客,本人技术有限 若有不足之处 还望各位大佬们指出。
wx: minture626