【问题标题】:Dynamic require() on node NODE_ENV with webpack使用 webpack 在节点 NODE_ENV 上动态 require()
【发布时间】:2020-10-25 17:00:47
【问题描述】:

我正在使用 webpack 构建一个简单的 NodeJs Lambda。有一个依赖的node_module使用基于NODE_ENV的不同配置文件

let config = require(`./${process.env.NODE_ENV ? process.env.NODE_ENV : 'dev'}_env.js`);

我在 package.json 中设置 NODE_ENV

     "serve": "set NODE_ENV=qa&webpack --mode development --watch",
    "serve-windows": "$env:NODE_ENV=qa&webpack --mode development --watch"

在 webpack 配置中

mode: process.env.NODE_ENV ? process.env.NODE_ENV : 'default',

无论我做什么,它总是包括 dev_env.js 忽略我设置的 NODE_ENV。我花了一整夜试图弄清楚这一点,看不同的帖子,有什么我做错了吗?

【问题讨论】:

    标签: node.js express webpack


    【解决方案1】:

    webpack --mode developmentNODE_ENV 设置为开发。请参阅文档:https://webpack.js.org/configuration/mode/#usage

    另外一点,defaultqa&webpackNODE_ENV 的非标准值。通常,期望值为developmenttestproduction

    如果你想使用这种方法,你将不得不使用不同的环境变量,例如:

    let config = require(`./${process.env.APP_ENV ? process.env.APP_ENV : 'dev'}_env.js`);
    
    "serve": "set APP_ENV=qa&webpack --mode development --watch",
    

    【讨论】:

    • 感谢马克的快速响应。我现在明白 --mode 是作为 NODE_ENV 传递的。您提供的解决方案应该可以解决问题,但是依赖的nodemodule无法更改,还有其他替代方案吗?
    • @BaluVyamajala 我不明白。如果您无法更改发布的代码,则必须找到另一种方法来确定您的环境。你真的没有办法更新qa&webpack 环境中的环境变量吗?您遇到的问题是 webpack 的 --mode 标志注入了 process.env.NODE_ENV,因此您必须牢记这一事实。
    • 添加动态 require() 的代码位于未维护的依赖 node_module 中。我想看看我是否可以避免对其进行任何更改。我正在探索是否可以使用任何其他插件将其解析为正确的环境文件,如 qa_env,然后 webpack 解决需要对“NODE_ENV”使用“mode”值的问题。这次讨论无疑有助于澄清问题。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2015-10-03
    • 1970-01-01
    相关资源
    最近更新 更多