使用 Webpack 搭建项目时会配置开发、测试、预发布、生产环境,这里面充斥着大量重复的配置,例如:入口、加载器等。webpack-merge 作为 Webpack 的配置合并工具,功能类似于 JavaScript 的 Object.assign()。
示例:
utils.js
const path = require('path'); const _resolve = (_path) => path.resolve(__dirname, _path); module.exports = { _resolve }
webpack.config.base.js
const HtmlWebpackPlugin = require('html-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const { _resolve } = require('./utils'); const baseConf = { entry: { index: _resolve('../src/index.ts') }, output: { filename: '[name].js', path: _resolve('../dist') }, module:{ rules:[ { test: /\.tsx?$/, use: 'babel-loader', exclude: /node_modules/ }, { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] } ] }, plugins: [ new HtmlWebpackPlugin({ filename: _resolve('../dist/index.html'), template: _resolve('../src/index.html'), inject: true, chunksSortMode: 'dependency' }), new CleanWebpackPlugin([_resolve('../dist')]) ], resolve: { extensions: ['.ts', '.tsx', '.js', '.json'] } } module.exports = baseConf;
webpack.config.prd.js
const { merge } = require('webpack-merge'); const baseConf = require('./webpack.config.base'); module.exports = merge(baseConf, {/* 生产配置 */ mode: 'production' });