除了导出单个配置对象之外,还有几种方法可以满足其他需求。
最终,您会发现需要在您的 webpack.config.js
中区分 开发 和 生产构建。有多种方法可以做到这一点。一种选择是从您的 webpack 配置中导出一个函数,而不是导出一个对象。该函数将使用两个参数调用
argv
)作为第二个参数。这描述了传递给 webpack 的选项,其键例如 output-path
和 mode
。-module.exports = {
+module.exports = function(env, argv) {
+ return {
+ mode: env.production ? 'production' : 'development',
+ devtool: env.production ? 'source-map' : 'eval',
plugins: [
new TerserPlugin({
terserOptions: {
+ compress: argv.mode === 'production' // only if `--mode production` was passed
}
})
]
+ };
};
Webpack 将运行配置文件导出的函数,并等待返回 Promise。当您需要异步加载配置变量时,这非常有用。
module.exports = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
entry: './app.js',
/* ... */
});
}, 5000);
});
};
您可以导出多个配置(从 webpack 3.1.0 开始支持多个函数),而不是导出单个配置对象/函数。运行 webpack 时,将构建所有配置。例如,这对于 捆绑库 到多个 目标(例如 AMD 和 CommonJS)很有用
module.exports = [
{
output: {
filename: './dist-amd.js',
libraryTarget: 'amd',
},
name: 'amd',
entry: './app.js',
mode: 'production',
},
{
output: {
filename: './dist-commonjs.js',
libraryTarget: 'commonjs',
},
name: 'commonjs',
entry: './app.js',
mode: 'production',
},
];
如果您有一个依赖于另一个配置输出的配置,则可以使用 dependencies
数组指定依赖项列表。
webpack.config.js
module.exports = [
{
name: 'client',
target: 'web',
// …
},
{
name: 'server',
target: 'node',
dependencies: ['client'],
},
];
如果您导出多个配置,则可以在配置数组上使用 parallelism
选项来指定将并行编译的编译器最大数量。
number
webpack.config.js
module.exports = [
{
//config-1
},
{
//config-2
},
];
module.exports.parallelism = 1;