【问题标题】:export NODE_PATH after node executable is run运行节点可执行文件后导出 NODE_PATH
【发布时间】:2016-09-19 00:09:03
【问题描述】:

有没有办法在节点启动后设置 NODE_PATH 环境变量?

如果我这样做:

async.series([
        function export_NODE_PATH(cb){
          cp.exec('export NODE_PATH=$(npm root -g):$NODE_PATH',cb);
        },...

它不会工作,但如果我在启动节点之前设置 NODE_PATH,它将按预期工作

export NODE_PATH=$(npm root -g):$NODE_PATH && node index --transpile test

有没有办法在node.js运行时设置环境变量,而不需要在执行前在命令行设置?是不是像在运行时设置 process.env.NODE_PATH 一样简单?

例如,这似乎可行:

    cp.exec('echo $(npm root -g)', function (err, stdout, stderr) {
    if (err || String(stdout).match(/error/i) || String(stderr).match(/error/i)) {
        cb(err || stdout || stderr);  // my funky way of handling this
    }
    else {
        process.env.NODE_PATH += stdout;
        cb(null);
     }
    });

但我不知道这是多么洁净,在进一步测试之后,它似乎并没有真正起作用。

【问题讨论】:

    标签: node.js environment-variables


    【解决方案1】:

    实现此目的的一种方法是创建一个 .env 文件并使用名为 dotenv 的 npm 库将 .env 文件变量自动加载到您的 process.env 中。步骤包括:

    第 1 步: 在你的项目目录中创建一个 .env 文件$ touch .env

    第 2 步:将以下文本放入您的 .env 文件“NODE_ENV=yourvaluehere”(不带引号)

    第 3 步: 安装dotenv$ npm install dotenv --save

    第 3 步: 在你运行启动服务器的js文件中,添加如下require('dotenv').config();

    Viola,您现在正在通过 env 文件在节点进程中设置环境变量。您的 process.env 将所有键值对存储在您的 .env 文件中!

    【讨论】:

      【解决方案2】:

      设置process.env.NODE_PATH(或任何其他环境变量)是完全“合法的”——事实上,dotenv 和 yenv 等库就是这样发挥作用的。

      【讨论】:

      • 鉴于我刚刚完成的一些测试,在运行时重新分配 process.env.NODE_PATH 似乎不起作用,我正在查看您提到的库的源代码以了解它们是如何做到的,如果你知道,但是请增加你的答案谢谢!
      • 确保在使用之前分配它 - 虽然不确定 NODE_PATH 是否特殊
      • 我和 Alexander Mills 有同样的问题。在我的情况下,NODE_PATH 肯定设置为./,但它不会影响模块分辨率,除非它从一开始就有这个值(来自 CLI)! create-react-app 的使用方式与动态设置 process.env.NODE_PATH 不同。
      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 2023-03-19
      • 2021-06-05
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      相关资源
      最近更新 更多