【问题标题】:webpack merge definePlugin process.env.NODE_ENV undefinedwebpack 合并 definePlugin process.env.NODE_ENV 未定义
【发布时间】:2017-09-28 14:43:08
【问题描述】:

我正在使用带有不同 webpack.config 文件的 webpack-merge。 我正在尝试传递 node_env (或任何其他变量);

如何从 webpack.common.js 文件中访问进程环境变量?

这是 webpack.prd.config.js 文件:

const merge = require("webpack-merge");
const common = require("./webpack.common.js");
const webpack = require("webpack");

module.exports = merge(common, {
    plugins: [
        new webpack.DefinePlugin({
            "process.env": {
                "NODE_ENV": JSON.stringify("production")
            }
        })
    ]
});

这是 webpack.common.js 文件:

console.log("Environment: " + process.env.NODE_ENV);

module.exports = {
    entry: {
    ...

“process.env.NODE_ENV”变量始终未定义。

【问题讨论】:

  • 如果我没记错的话,process.env.<name> 指的是当前进程的环境变量。如果您使用的是 Mac 或 Linux,请尝试输入 export NODE_ENV=production,然后运行您的构建过程并查看变量是否仍然未定义
  • 我在 asn ASP.NET 核心应用程序的 Windows 上。如何将变量从 webpack.prd.config.js 传递到 webpack.common.js 文件?它不需要是 NODE_ENV 变量。
  • 我既没有使用过 webpack,也没有使用过 ASP.NET,所以我的环境变量猜测是我能给你的最好的,对不起。

标签: webpack


【解决方案1】:

我刚刚意识到 webpack -p 不会将process.env.NODE_ENV 的值发送到webapck.conf.js

我解决了这个头疼的问题

"scripts": {
    "prod": "set NODE_ENV=production && webpack -p",
  },

只要确保当您尝试比较它们时,只需在生产结束时添加空间

var isProd = process.env.NODE_ENV === "production ";

【讨论】:

    【解决方案2】:

    DefinePlugin 仅将全局对象添加到您的代码(发送给 webpack 的内容)中,而不是 webpack 的配置。

    所以如果你想在你的 webpack 配置中NODE_ENV,你必须先导出它:

    export NODE_ENV=production
    webpack ....
    

    NODE_ENV=production webpack ...
    

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 2021-11-04
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 2019-12-05
      • 2016-06-10
      相关资源
      最近更新 更多