【问题标题】:Setting environment variable with NodeJS使用 NodeJS 设置环境变量
【发布时间】:2017-12-15 23:25:42
【问题描述】:

我需要从 Node 设置一个环境变量(目前使用v8.9.3

理想情况下,我想在程序启动时运行export DATA_DIR=/var/lib/data

1. 尝试生成 child_process 来设置它,但它似乎不起作用。

例子:

const { spawnSync } = require( 'child_process' );
spawnSync( 'export', [ 'DATA_DIR=/var/lib/data' ] );

但这会导致ENOENT

Error: spawnSync export ENOENT...
code: 'ENOENT',
errno: 'ENOENT',
syscall: 'spawnSync export',
path: 'export',
spawnargs: [ 'DATA_DIR=/var/lib/data' ]

2. 尝试设置process.env.DATA_DIR = '/var/lib/data',但这似乎是节点进程本地的,不被其他人识别。

3. 尝试过 npm 模块:dotenvenvsenvironmentaltiny-envs,这些主要用于加载环境变量。

提前谢谢你。

【问题讨论】:

    标签: javascript node.js linux export command-line-interface


    【解决方案1】:

    您不能为不是当前进程后代的进程设置环境变量。而在Linux下,是没有系统环境变量这种东西的。

    export 不是一个独立的命令,而是一个内置的 shell,它为当前 shell 进程及其子进程设置环境变量。就像您打开两个终端选项卡和 export 此选项卡中的一个值并使用其他选项卡中的值。

    您可以使用您的格式将密钥、值保存到文件中,然后另一个进程可以读取文件以获取密钥的值。

    【讨论】:

    • 那么例如,如果我为GeoServer设置DATA_DIR,然后从同一个进程启动GeoServer,它应该识别我刚刚设置的数据目录变量吗?跨度>
    • @iSkore 不,它不起作用。如果你“启动”GeoServer,那么 os 将为 GeoServer 进程创建一个新的进程 ID 和一个新的会话。我建议使用PM2 作为进程管理器,PM2 api 允许将环境变量传递给新进程的上下文pm2.keymetrics.io/docs/usage/pm2-apipm2.keymetrics.io/docs/usage/application-declaration
    • 是的,我使用 PM2 来启动 GeoServer - 我试图让这个问题对在 linux 环境中运行的节点更加通用。但是,我想这将更倾向于 GeoServer 的“启动”操作和 linux。因此,如果我用 PM2 启动 pid,在我的 PM2 启动命令中设置 ENV,GeoServer 应该将其解释为典型的环境变量吗?不太熟悉使用 PM2 运行节点应用程序以外的东西。
    • @iSkore Pm2 对我的例子来说没问题 gist.github.com/hoangsetup/3b2101ec0befef0f5b38b25c4b69b1d6 server.js 将启动子进程 app.js 因此 app.js 可以使用 env process.env.DATA_DIR 从 server.js 导出 (@987654331 @)
    猜你喜欢
    • 2011-12-11
    • 2016-11-15
    • 2021-04-28
    • 2013-03-04
    • 2015-10-21
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多