为了账号安全,请及时绑定邮箱和手机立即绑定

来自环境的 config.json 中的动态设置

来自环境的 config.json 中的动态设置

繁星coding 2022-06-05 10:31:47
在我的 config.json 中,我需要根据环境变量设置动态填充设置对象。"somesetting": {    "setting1": "%S1%",    "setting2": "%S2%"}我的环境是Windows。我遇到的许多示例都有硬编码值,我无法理解如何处理我的场景。我对 npm 和 javascript 世界很陌生。非常感谢您对此事的任何建议/参考编辑 2: 可能,我错过了它,但我的情况是 %S1% 和 %S2% 的值在不同的环境中可能不同。将 S1 和 S2 视为一些路径,这些路径可能会根据我的代码在云上构建的机器而有所不同,例如C:\xyz,D:\xyz我无法预先知道。所以这意味着即使我的环境不同,我也不能在其中设置静态设置。谢谢
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

JSON 是一个静态文件,它的内容是一个字符串,所以你不能在这里使用变量。


您可以尝试使用fs模块readFile和writeFile.


也许模板引擎喜欢Handlebars并且Mustache会帮助您更轻松地做到这一点。


但通常开发人员为一种环境使用一个静态文件。您只能在启动应用程序之前更改配置,否则您可以在运行时破坏它(对您的用户和客户来说太糟糕了)。


看看这个 https://www.npmjs.com/package/config 它是基于 JSON 的配置。我们使用这个包已经很多年了,它对于一些环境来说非常好。


基础设施

config/

- default.json

- development.json

- staging.json

- production.json

app.js

*/

用法

/*  default.json */

{

  "HTTP":  {

    "PORT": 3001,

    "MESSAGE": "Hello!"

  }

}

/*  development.json */

{

  "HTTP":  {

    "PORT": 4001

  }

}

/* app.js */

const config = require('config');


const message = config.get('HTTP.MESSAGE');

// "Hello!" (from default.json)


const port = config.get('HTTP.PORT');

// 4001 (from development.json, overrides 3001)

/* Windows */

set NODE_ENV=development& app.js


/* Linux */

NODE_ENV=development app.js


/* cross-platform */

cross-env NODE_ENV=development app.js


查看完整回答
反对 回复 2022-06-05
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

dotenv是在 node.js 中管理环境变量的常用解决方案。

您可以为所需的每个环境定义一个.env文件。然后将它们作为节点环境变量访问。

根据您的用例,您可以使用环境变量来填充您的 config.json,或者您可能根本不需要配置文件,可以直接使用环境变量。


查看完整回答
反对 回复 2022-06-05
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

如果我理解正确,您希望在 Node.js 应用程序中使用 Windows 环境变量,以便这些值来自主机操作系统/环境本身,而不是硬编码在配置文件中,这是正常的 CICD 要求. Windows 环境变量将在默认安装 Node.js 的任何地方可用。您不需要任何额外的软件包。系统和用户环境变量都将在 Node.js 进程环境 process.env.whatever 中可用。例如:


const setting1 = process.env.setting1

const setting2 = process.env.setting2

但是,正如@max-starling 所说,您不能在 .json 文件中使用它们,因为它们是静态文件。在这种情况下,我认为 JavaScript 配置文件更有意义。


主 app.js


import config from './config'

console.log(config.setting1)

配置.js


const somesetting = {

  setting1: process.env.setting1,

  setting2: process.env.setting2

}

module.exports = somesetting; 

节点文档:https ://nodejs.org/api/process.html#process_process_env


查看完整回答
反对 回复 2022-06-05
  • 3 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信