Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 代码中设置的环境变量在node.js中导入的模块中不可用_Javascript_Node.js - Fatal编程技术网

Javascript 代码中设置的环境变量在node.js中导入的模块中不可用

Javascript 代码中设置的环境变量在node.js中导入的模块中不可用,javascript,node.js,Javascript,Node.js,如何在代码中设置环境变量,以便它们在导入的NPM模块中可用 举个简单的例子: index.js: const supportsHyperlinks=需要“支持-超链接”; process.env.FORCE_HYPERLINK=1; console.logsupportsHyperlinks.stdout;//错误的process.env.FORCE\u内部未定义超链接 节点\模块/支持超链接/index.js: "严格使用",; 函数支持shyperlinkstream{ const{env}

如何在代码中设置环境变量,以便它们在导入的NPM模块中可用

举个简单的例子:

index.js:

const supportsHyperlinks=需要“支持-超链接”; process.env.FORCE_HYPERLINK=1; console.logsupportsHyperlinks.stdout;//错误的process.env.FORCE\u内部未定义超链接 节点\模块/支持超链接/index.js:

"严格使用",; 函数支持shyperlinkstream{ const{env}=进程; console.logenv.FORCE_HYPERLINK;//返回false 如果环境中有“强制超链接”{ return!env.FORCE_HYPERLINK.length>0&&parseIntenv.FORCE_HYPERLINK,10==0; } ... } module.exports={ 支持超级链接, stdout:supportsHyperlinkprocess.stdout, stderr:supportsHyperlinkprocess.stderr };
似乎每个NPM模块都有自己的process.env对象。

这是一个时间问题,与是否使用通过NPM安装的模块无关

首先,您需要使其运行的模块

然后用函数的返回值填充导出,包括stdout

该函数记录当前未设置的env.FORCE_超链接

然后设置env.FORCE\u超链接

最后读取以前分配给stdout的值

您需要在设置环境变量后调用该函数

可以将其设置为导出对象上的getter函数,以便在每次访问.stdout时调用它


这是一个时间问题,与是否使用通过NPM安装的模块无关

首先,您需要使其运行的模块

然后用函数的返回值填充导出,包括stdout

该函数记录当前未设置的env.FORCE_超链接

然后设置env.FORCE\u超链接

最后读取以前分配给stdout的值

您需要在设置环境变量后调用该函数

可以将其设置为导出对象上的getter函数,以便在每次访问.stdout时调用它

代码依赖于env,但您在应用程序启动时未设置的代码中设置了它

我建议在所有代码运行之前使用cross-env或dotenv来设置env

代码依赖于env,但您在应用程序启动时未设置的代码中设置了它

我建议在所有代码运行之前使用cross-env或dotenv来设置env


-我无法重现这个问题。导入本地模块和导入NPM包之间的行为似乎有所不同。让我更新一下我的例子我无法重现这个问题。导入本地模块和导入NPM包之间的行为似乎有所不同。让我更新我的示例。不幸的是,我无法将其更改为getter函数,因为它是来自现有NPM包的外部代码。然后您需要在运行Node之前设置环境变量。我无法;设置此环境变量取决于在我的index.js中计算的复杂条件。然后将其拆分为一个单独的程序。实际上,我刚刚将process.env.FORCE_HYPERLINK=1与const supportshhyperlinks=require'supports-hyperlinks'交换,一切都开始工作。谢谢不幸的是,我无法将其更改为getter函数,因为它是来自现有NPM包的外部代码;设置此环境变量取决于在我的index.js中计算的复杂条件。然后将其拆分为一个单独的程序。实际上,我刚刚将process.env.FORCE_HYPERLINK=1与const supportshhyperlinks=require'supports-hyperlinks'交换,一切都开始工作。谢谢谢谢你的建议,但不幸的是这不可能。我正在努力克服支持超链接中的一个错误,该错误无法将Windows终端识别为支持嵌入式超链接的终端。我的代码是公共CLI工具的一部分,因此我无法使用dotenv在文件中静态设置env变量。@VladimirPanchenko您是否尝试过cross-env,可以在您的环境中设置env,即终端。谢谢您的建议,但遗憾的是这不可能。我正在努力克服支持超链接中的一个错误,该错误无法将Windows终端识别为支持嵌入式超链接的终端。我的代码是公共CLI工具的一部分,因此我无法使用dotenv在文件中静态设置环境变量。@VladimirPanchenko如果您尝试了cross-env,可以在您的环境(即终端)中设置环境变量。
const supportsHyperlinks = require('supports-hyperlinks');
module.exports = {
    supportsHyperlink,
    stdout: supportsHyperlink(process.stdout),
    stderr: supportsHyperlink(process.stderr)
};
process.env.FORCE_HYPERLINK = 1;
console.log(supportsHyperlinks.stdout); // false; process.env.FORCE_HYPERLINK is undefined inside
module.exports = {
    supportsHyperlink,
    get stdout() { return supportsHyperlink(process.stdout) },
    get stderr() { return supportsHyperlink(process.stderr) },
};