将命令行参数传递给webpack.config.js

use*_*212 29 javascript webpack

我有一个简单的webpack.config.js

module.exports = {
  entry: "./app.js",
  output: {
    filename: "bundle.js"
  },
}
Run Code Online (Sandbox Code Playgroud)

我想通过值entryoutput通过命令行参数.这可能吗,我该怎么做?

Axn*_*yff 36

webpack.config.js也可以导出一个可以返回conf对象的env函数.因此,你可以有一个webpack配置,如:

module.exports = env => {
    return {
        entry: env === "production" ? "./app.js": "app-dev.js",
        output: {
          filename: "bundle.js"
        },
    }
};
Run Code Online (Sandbox Code Playgroud)

然后从命令行(或package.json)调用webpack,如下所示:

webpack --env=production
Run Code Online (Sandbox Code Playgroud)

  • 从您的答案中不清楚这个“env”参数是否神奇,或者我们可以传递任意参数,例如“--paramName1=value --paramName2=value” (10认同)
  • @MikhailBatcer 好问题。看来它必须是--env(.XXX)。请参阅[环境变量](https://webpack.js.org/guides/environment-variables/)。感谢奥尔昆·图泽尔 (3认同)

adr*_*ian 14

您可以env从命令行为变量提供自定义参数,因此对于此示例,您可以调用:

webpack --env.entry='./app.js' --env.output='bundle.js'

并通过执行在您的 webpack 中使用它们

module.exports = env => ({
  entry: env.entry,
  output: {
    filename: env.output
  },
});
Run Code Online (Sandbox Code Playgroud)

  • 从您的答案中不清楚这个“env”参数是否神奇,或者我们可以传递任意参数,例如“--paramName1=value --paramName2=value” (3认同)
  • @madruga 这适用于 Webpack 4,这是编写此答案时的最新版本。Webpack 5 的语法现已更改。更多信息请参见:webpack.js.org/guides/environment-variables。我现在更新了我的答案以反映这一点。 (3认同)

Pat*_*eta 11

您还可以使用以下命令将多个键值对传递给您的配置--env=key=value

webpack --env=mode=production --env=branch=develop
Run Code Online (Sandbox Code Playgroud)

或(使用 webpack-dev-server 进行开发):

webpack serve --env=mode=production --env=branch=develop
Run Code Online (Sandbox Code Playgroud)

webpack.config.js 看起来像这样:

webpack --env=mode=production --env=branch=develop
Run Code Online (Sandbox Code Playgroud)

以这种方式传递的所有值都可以作为配置中的对象使用,这使得它们易于使用。

webpack serve --env=mode=production --env=branch=develop
Run Code Online (Sandbox Code Playgroud)


Yoa*_*osh 9

您可以使用--envCLI 参数将任意参数传递给配置。

例如,以下命令:

webpack --env entry=./entry.js --env output=./output.js
Run Code Online (Sandbox Code Playgroud)

将产生以下 env 对象:

{entry: './entry.js', output: './output.js'}
Run Code Online (Sandbox Code Playgroud)

然后您可以在配置中使用它,如下所示:

module.exports = env => ({
  entry: env.entry,
  output: {
    filename: env.output
  },
});
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多内容:Webpack - 环境变量