知海

配置文件类型

webpackjsorg-main配置参考

配置文件类型

除了导出一个单独的配置对象,还有几种其他方式可以满足不同需求。

导出一个函数

最终你会在 webpack.config.js 中区分开发生产构建,这有多种实现方式。其中一种是从 webpack 配置中导出一个函数,而不是导出一个对象。该函数将被调用并接收两个参数:

  • 第一个参数是环境(environment)。语法示例请参见 CLI 环境选项文档
  • 第二个参数是选项映射(argv)。它描述了传给 webpack 的选项,包含诸如 output-pathmode 等键。
diff 复制代码
-export default {
+export default function(env, argv) {
+  return {
+    mode: env.production ? 'production' : 'development',
+    devtool: env.production ? 'source-map' : 'eval',
     plugins: [
       new MinimizerPlugin({
         minimizerOptions: {
+          compress: argv.mode === 'production' // only if `--mode production` was passed
         }
       })
     ]
+  };
};

导出一个 Promise

webpack 会运行配置文件导出的函数,并等待其返回一个 Promise。当你需要异步加载配置变量时,这会很有用。

提示: 可以通过将它们包装在 Promise.all([/* 你的 Promise */]). 中来导出多个 Promise。

js 复制代码
export default () =>
  new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({
        entry: "./app.js",
        /* ... */
      });
    }, 5000);
  });

警告: 只有在通过 CLI 使用 webpack 时,返回 Promise 才有效。webpack() 需要的是一个对象。

导出多个配置

除了导出一个单独的配置对象/函数,你也可以导出多个配置(从 webpack 3.1.0 开始支持多个函数)。运行 webpack 时,所有配置都会被构建。例如,这对于针对多个目标(targets)(如 AMD 和 CommonJS)打包一个库非常有用:

js 复制代码
export default [
  {
    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",
  },
];

提示: 如果你向 --config-name 标志传入一个名称,webpack 将只构建那个特定的配置。

dependencies

如果你的某个配置依赖于另一个配置的输出,可以使用 dependencies 数组来指定依赖列表。

webpack.config.js

js 复制代码
export default [
  {
    name: "client",
    target: "web",
    // …
  },
  {
    name: "server",
    target: "node",
    dependencies: ["client"],
  },
];

parallelism

如果你导出多个配置,可以使用配置数组上的 parallelism 选项来指定最多可并行编译的编译器数量。

  • 类型:number
  • 可用版本:5.22.0+

webpack.config.js

js 复制代码
const config = [
  {
    // config-1
  },
  {
    // config-2
  },
];

config.parallelism = 1;

export default config;

帮助我们改进文档

发现翻译问题或内容错误?请告诉我们。