javascript - 从代码中设置的 env 变量在 node.js 的导入模块中不可用
问题描述
如何在代码中设置环境变量,以便它们在导入的 NPM 模块中可用?
一个简短的例子:
index.js
:
const supportsHyperlinks = require('supports-hyperlinks');
process.env.FORCE_HYPERLINK = 1;
console.log(supportsHyperlinks.stdout); // false; process.env.FORCE_HYPERLINK is undefined inside
node_modules/supports-hyperlinks/index.js
:
'use strict';
function supportsHyperlink(stream) {
const {env} = process;
console.log(env.FORCE_HYPERLINK); // returns false
if ('FORCE_HYPERLINK' in env) {
return !(env.FORCE_HYPERLINK.length > 0 && parseInt(env.FORCE_HYPERLINK, 10) === 0);
}
...
}
module.exports = {
supportsHyperlink,
stdout: supportsHyperlink(process.stdout),
stderr: supportsHyperlink(process.stderr)
};
似乎每个 NPM 模块都有自己的process.env
对象。
解决方案
这是一个时间问题,与是否使用通过 NPM 安装的模块无关。
const supportsHyperlinks = require('supports-hyperlinks');
首先,您需要导致它运行的模块。
module.exports = { supportsHyperlink, stdout: supportsHyperlink(process.stdout), stderr: supportsHyperlink(process.stderr) };
然后填充导出,包括stdout
函数的返回值。
该功能记录env.FORCE_HYPERLINK
当前未设置。
process.env.FORCE_HYPERLINK = 1;
然后你设置env.FORCE_HYPERLINK
console.log(supportsHyperlinks.stdout); // false; process.env.FORCE_HYPERLINK is undefined inside
最后,您读取了先前分配给 的值stdout
。
您需要在设置环境变量后调用该函数。
您可以将其设置为导出对象的 getter 函数,以便每次访问时都会调用它.stdout
。
module.exports = {
supportsHyperlink,
get stdout() { return supportsHyperlink(process.stdout) },
get stderr() { return supportsHyperlink(process.stderr) },
};
推荐阅读
- python - 如何在python中循环三个变量,而它们的总和总是等于1?
- sharepoint-online - 使用切换从 webpart 更新共享点列表
- java - 覆盖 e4 rcp 键绑定
- awk - 需要使用 AWK 查找 2 个 SQL 文件 - file1.sql 和 file2.sql 之间的区别
- c# - 将字节数组从 Unity 传递到 Android (C++) 进行修改
- c# - ASP.NET Core 使用联合结果填充选择列表
- asp.net - Eval 语法中资源的使用
- android - 如何使用 androidx.appcompat.app.AlertController$RecycleListView?
- java - 添加后如何对数字进行四舍五入以避免不必要的数字
- mysql - 如何使用mysql从到期条目中获取待处理的月份