问题标签 [node-config]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
9201 浏览

node.js - 解析环境变量的正确方法

我基本上在我的所有项目中都使用node-config,并且大多数时候我遇到解析设置为环境变量的布尔值和数字的问题。

例如

默认.js

自定义环境变量.js

现在,明显的问题是,如果我用设置为环境变量的自定义值覆盖默认值,它们将是字符串值而不是数字或布尔值。所以现在,要确保在我的代码中类型是正确的。我总是必须进行类型转换,对于布尔值,请使用适当的库,例如yn。问题是我每次使用config.get()例如+config.get("myNumber")yn(config.get("myBool")).

有没有更好更优雅的方法来做到这一点?

我看到的一种解决方案是将类型属性添加到环境变量中,因为它在此处使用格式完成。这将允许做这样的事情......

自定义环境变量.js

node-config将处理类型转换,并且在获取它时无需一直在代码中执行此操作。当然,需要为布尔值实现一个适当的解析器,但那些已经存在并且可以在这里使用。

0 投票
0 回答
1230 浏览

node.js - 如何在带有自定义配置界面的打字稿中使用 node-config?

这是如何在打字稿中使用节点配置的后续行动?因为我找不到合适的答案。

我对 TS 比较陌生,我正在尝试将我们的配置从 json 转换为 typescript,同时尝试在配置中合并类型。

我们目前拥有的是这样的:

在这里,我们可以获得所需的配置,但我们需要通过代码中的泛型来指定类型。我正在尝试合并(相对)更强的打字。

干转:

如您所见,最后一种形式将不起作用并导致编译时错误。我想以某种方式config符合的形状,MyConfig以便config.server.timeout使用 strong type 成为可能number

我需要以某种方式扩展IConfig接口MyConfig或强制重新输入configto IConfig & MyConfig

我的尝试:

这行得通,但不知何故对我来说感觉不对。

问题

  • 强制使用any...可以以某种方式避免吗?
  • 需要做一些类似import config from '../../core/config-schema';-> 看起来很丑陋,不同文件的路径不同,需要所有项目合作者遵守约定的事情......是否可以保持原样import config from 'config';并抽象出魔法?
  • 在编译时编译default.tsdefault.jswith tsc(因此 typescript 不是运行时依赖项)。已相应地更新了 env var NODE_CONFIG_DIR。目前我这样做,但配置对象是使用额外的层次结构级别创建的。即config.server.timeout,它变成了config.default.server.timeout

编辑:第三个问题已解决——见评论

0 投票
1 回答
170 浏览

node-config - node-config 始终返回默认设置

我正在将 node.js/express 应用程序移动到nest.js。应用程序的配置由 node-config (default.js和主机特定的 js 文件)处理。我已将配置文件复制到新的应用程序文件夹,导入配置模块,并使用了一些config.get()调用。旧应用程序运行良好,但使用 nest.js 我只能从 default.js 获得设置。有人知道为什么 node-config 不能与 nest.js 一起使用吗?

config.get() 总是返回来自 default.js 的值

0 投票
1 回答
1117 浏览

node.js - 在生产中管理多个环境变量的最佳实践

尽管我不熟悉 DevOps 最佳实践,但我正在尝试提出一种可靠且有效的方法来管理生产中的多个变量。以下代表我目前的方法:

在哪里:

ENV_VAR.sh

API 1 和 2 是两个基于 nodejs 的应用程序,使用反向代理配置在同一台服务器上运行。如果服务器没有任何问题(例如意外关闭),我只需要不时地(重新)设置变量,SOURCE ENV_VAR.SH以确保定义了新变量。

在继续这种方法之前,我想知道它是否完全正确,或者它是否有很大的缺陷。如果这种方法没问题,如何在package.json部署任何应用程序的新版本时自动(重新)获取环境变量?(只是为了保证变量仍然被定义)

提前致谢。

0 投票
1 回答
37 浏览

node-config - node-config 将分隔符从点更改为冒号

我正在将我的配置从另一个库迁移到node-config

我有两个问题:

  1. 旧库用于config.get('a:b');获取一些值,但node-config使用单个点作为分隔符:config.get('a.b');.

有没有办法配置它来:节省我的时间和重构我的代码?

  1. 有没有办法设置运行时值。例如config.set('key', 'val');
0 投票
1 回答
118 浏览

node.js - 使用 node-config 绕过 NODE_ENV

我正在尝试通过验证配置文件来测试我的配置文件,没什么花哨的,架构,环境列表,迭代它,加载配置并根据架构验证变量。

问题是,要做到这一点,我目前必须设置process.env.NODE_ENV. 由于测试有自己的保留配置文件,这意味着如果测试并行运行,当其他测试加载配置时,测试可能会更改 NODE_ENV 变量,虽然这似乎不太可能发生,仍然打扰我。

一个简单的解决方案是能够告诉node-config忽略环境变量,并使用给定的值,就像它一样require('config')('myNodeEnv'),但我在 wiki 或文档中找不到类似的东西。最接近的是自定义环境变量,但这只会将问题转移到另一个变量。

0 投票
1 回答
1173 浏览

javascript - 用玩笑模拟节点配置

我目前是第一次在 jest 和 nodejs 中介绍自己。我面临的问题是我必须从 nodejs 配置中模拟两个不同的值。

问题是第二个 mockReturnValue 覆盖了第一个。有没有可能将展位模拟彼此分开?

也许有类似的东西:

0 投票
1 回答
58 浏览

node.js - 在配置模块从 default.json 读取配置之前在节点中设置环境变量

相对较新的 JS 和节点,

要求: 需要在加载配置模块之前从安全存储读取环境变量后设置环境变量。

详细信息: 我们有一个问题:在配置模块启动并使用 default.js 分配值之前,我们需要在哪里从秘密存储中读取秘密并使其可用于节点环境。

我尝试拆分快速应用程序设置和初始化,并尝试在这些步骤之间阅读秘密,但无济于事。

无论如何,有没有办法在配置模块读取它们之前在 env 中注入秘密?

如果您需要更多信息,请告诉我。

0 投票
1 回答
633 浏览

javascript - 开玩笑地模拟特定的配置值

我有以下 default/config.js 文件

在我的 index.ts 中,我有

在我的单元测试中,我想测试这两种情况isVisible,同时保持其他配置值不变。

我试过了

这对我不起作用,它不会覆盖isVisible.

我知道我也可以config.get像这样模拟函数config.get.mockReturnValue(false),但这会覆盖cronIntervalandqueueName

0 投票
0 回答
30 浏览

javascript - 有没有办法使用“config”npm 包定义智能感知的配置结构?

我正在使用config带有 JS 或 TS 的 npm 模块。假设我有以下内容default.json

然后在我写的代码的某个地方

我想要的是在编码过程中我能得到什么的某种提示config 我可以想到常量的用法,例如

但也许还有其他方式,比手动更自动,因为我们已经在配置文件中拥有这些信息。

有没有办法做到这一点?