【问题标题】:Passing environment arguments to npm commands in package.json将环境参数传递给 package.json 中的 npm 命令
【发布时间】:2018-04-21 09:32:19
【问题描述】:

我的 package.json 文件中有一个脚本部分,如下所示

"scripts": {
    "start": "node_modules/.bin/grunt transpile && node dist/src/app.js",
}

当我从命令 shell 运行“npm start”时,它工作正常。现在我需要引入我的 js 代码正在访问的两个环境变量,如下所示

if (process.env.APP_DATA_MODE === "complete") {
    // perform some actions here
} else {
    // perform some actions here
}

if (process.env.HOST_NAME === "dev") {
    // do some dev env related code here
} else {
    // do prod related code here
}

我想知道的是我应该如何在上面的“start”命令中引入这两个环境变量,或者至少如何运行 npm start 命令并为上面列出的两个环境变量指定参数

已经尝试过stack overflow article,这看起来确实很接近,但没有运气,因为环境变量在代码执行期间一直显示为空白

【问题讨论】:

    标签: node.js npm environment-variables package.json


    【解决方案1】:

    这应该可以工作

    "start": "node_modules/.bin/grunt transpile && APP_DATA_MODE=complete HOST_NAME=dev node dist/src/app.js"
    

    假设您需要将它们传递给您的 app.js

    好吧,我想我的说服力不够,所以让我提供一个简单的证明 让我们写一个简单的脚本

    #!/bin/bash
    
    echo "VAR1 = $VAR1"
    echo "VAR2 = $VAR2"
    

    这是输出

    【讨论】:

    • 返回错误,找不到模块,说 my-app\APP_DATA_MODE=complete 无法解决如果我使用 node dist/src/app.js APP_DATA_MODE=complete HOST_NAME=dev 运行它,但运行正常它没有设置环境变量
    • 抱歉 'node' 调用在错误的位置。已更新答案
    • 是的,我想通了。即使先调用节点,然后像下面这样添加参数 node dist/src/app.js APP_DATA_MODE=complete HOST_NAME=dev 命令运行正常,但它没有设置环境变量
    • 你错过了 env vars 应该在节点之前的开头
    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2016-05-15
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多