webpack-merge的使用教程
haosicx 人气:0为什么要用webpack-merge
- development(开发环境) 和 production(生产环境) 这两个环境下的构建目标存在着巨大差异
所以webpack的配置写的差距会非常的大
- 在开发环境中,我们需要:强大的 source map 和一个有着 live reloading(实时重新加载) 或 hot module replacement(热模块替换) 能力的 localhost server。
- 而生产环境目标则转移至其他方面,关注点在于压缩 bundle、更轻量的 source map、资源优化等,通过这些优化方式改善加载时间。由于要遵循逻辑分离,我们通常建议为
每个环境编写彼此独立的 webpack 配置。
- 虽然,以上我们将 生产环境 和 开发环境 做了细微区分,但是,请注意,我们还是会遵循不重复写配置的原则,保留一个
"common( 公共 )" 配置
。为了将这些配置合并在一起,我们将使用一个名为webpack-merge
的工具。此工具会引用 “common” 配置,因此我们不必再在环境特定env
的配置中编写重复代码。
安装
npm install --save-dev webpack-merge
目录结构
webpack-demo |- package.json |- package-lock.json - |- webpack.config.js // 删除全局webpack配置 + |- webpack.common.js // 新建公共配置 + |- webpack.dev.js // 新建开发环境配置 + |- webpack.prod.js // 新建生产环境配置 |- /dist |- /src |- index.js |- math.js |- /node_modules
webpack.common.js 公共配置
const path = require('path'); // 该插件将为你生成一个 HTML5 文件, // 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle。 const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: { app: './src/index.js', }, plugins: [ new HtmlWebpackPlugin({ title: 'Production', }), ], output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist'), clean: true, }, };
webpack.dev.js 开发环境配置
// 引入webpack-merge const { merge } = require('webpack-merge'); // 引入公共配置 const common = require('./webpack.common.js'); // 第一个参数是公共配置 第二个参数是环境里的配置 module.exports = merge(common, { mode: 'development', devtool: 'inline-source-map', devServer: { static: './dist', }, });
webpack.prod.js 生产环境配置
const { merge } = require('webpack-merge'); const common = require('./webpack.common.js'); module.exports = merge(common, { mode: 'production', });
- 现在,在 webpack.common.js 中,我们设置了 entry 和 output 配置,并且在其中引入这两个环境公用的全部插件。
- 在 webpack.dev.js 中,我们将 mode 设置为 development,并且为此环境添加了推荐的 devtool(强大的 source map)和 devServer 配置。
- 最后,在 webpack.prod.js 中,我们将 mode 设置为 production,
注意,在环境特定的配置中使用 merge() 功能,可以很方便地引用 webpack.dev.js 和 webpack.prod.js 中公用的 common 配置。webpack-merge 工具提供了各种 merge(合并) 高级功能,但是在我们的用例中,无需用到这些功能。
加载全部内容