webpack学习笔记12-生产环境构建
背景
通常,我们在开发一个应用的时候,会有生产环境与开发环境的概念,生产环境中,我们需要体积最小的代码,以及图片等静态文件使用cdn
上的服务,开发环境上,需要热更新,source-map等来快速排错,目标不同。
方案
我们可以分别为生产环境与测试环境编写一个配置文件,并且使用webpack-merge
来组合通用配置及专属配置。
写法
首先安装
webpack-merge
1
npm install webpack-merge # 或者yarn add webpack-merge
清理一下文件并新增一个生产与开发环境及通用配置的
config
文件,webpack.common.js
、webpack.dev.js
、webpack.prod.js
。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16webpack_learn
|- node_modules
|- package.json
- |- webpack.config.js
+ |- webpack.common.js
+ |- webpack.dev.js
+ |- webpack.prod.js
|- yarn.lock
|- src
|- let.js
|- get.js
|- index.js
- |- math.js
|- dist
|- bundle.js
|- index.html
修改新增的配置文件内容
webpack.common.js
通用文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+ const path = require('path');
+ const { CleanWebpackPlugin } = require('clean-webpack-plugin');
+ const HtmlWebpackPlugin = require('html-webpack-plugin');
+
+ module.exports = {
+ entry: {
+ app: './src/index.js'
+ },
+ plugins: [
+ new CleanWebpackPlugin(),
+ new HtmlWebpackPlugin({
+ title: 'Production'
+ })
+ ],
+ output: {
+ filename: '[name].bundle.js',
+ path: path.resolve(__dirname, 'dist')
+ }
+ };
webpack.dev.js
开发环境配置文件1
2
3
4
5
6
7
8
9+ const merge = require('webpack-merge');
+ const common = require('./webpack.common.js');
+
+ module.exports = merge(common, {
+ devtool: 'inline-source-map',
+ devServer: {
+ contentBase: './dist'
+ }
+ });
webpack.prod.js
生产环境配置文件1
2
3
4
5
6
7
8
9+ const merge = require('webpack-merge');
+ const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
+ const common = require('./webpack.common.js');
+
+ module.exports = merge(common, {
+ plugins: [
+ new UglifyJSPlugin()
+ ]
+ });
- 无论生产环境还是开发环境,都清理
dist
目录,新建index.html
- 开发环境基于
dist
目录建立本地服务器,并添加source-map
来快速排错,且使用webpack-merge
来合并webpack.common.js
通用配置文件中的配置内容 - 生产环境开启摇树优化
tree-shakeing
,且使用webpack-merge
来合并webpack.common.js
通用配置文件中的配置内容
然后修改package.json
中的scripts
快捷指令
1 | { |
然后执行打包指令1
2npm run serve #也可以yarn serve 运行开发环境
npm run build #也可以yarn build 打包生产环境
可以看到报了个错
1 | ERROR in app.bundle.js from UglifyJs |
这个问题在于,UglifyJs
对es6
语法的解析有问题,需要转成es5
后再次打包
webpack.prod.js
中增加babel配置
1 |
|
然后执行打包
1 | npm run build #也可以yarn build 打包生产环境 |
就打爆了生产版本,经过了tree-shaking的版本
原文作者: IT梅
原文链接: http://www.meixiaohan.com/2019/09/03/webpack_learn_12/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)