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

在我的 config.json 中,我需要根据环境变量设置动态填充设置对象。


"somesetting": {

    "setting1": "%S1%",

    "setting2": "%S2%"

}

我的环境是Windows。


我遇到的许多示例都有硬编码值,我无法理解如何处理我的场景。我对 npm 和 javascript 世界很陌生。非常感谢您对此事的任何建议/参考


编辑 2: 可能,我错过了它,但我的情况是 %S1% 和 %S2% 的值在不同的环境中可能不同。将 S1 和 S2 视为一些路径,这些路径可能会根据我的代码在云上构建的机器而有所不同,例如C:\xyz,D:\xyz我无法预先知道。所以这意味着即使我的环境不同,我也不能在其中设置静态设置。谢谢


繁星coding
浏览 191回答 3
3回答

一只名叫tom的猫

JSON 是一个静态文件,它的内容是一个字符串,所以你不能在这里使用变量。您可以尝试使用fs模块readFile和writeFile.也许模板引擎喜欢Handlebars并且Mustache会帮助您更轻松地做到这一点。但通常开发人员为一种环境使用一个静态文件。您只能在启动应用程序之前更改配置,否则您可以在运行时破坏它(对您的用户和客户来说太糟糕了)。看看这个 https://www.npmjs.com/package/config 它是基于 JSON 的配置。我们使用这个包已经很多年了,它对于一些环境来说非常好。基础设施config/- default.json- development.json- staging.json- production.jsonapp.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

人到中年有点甜

dotenv是在 node.js 中管理环境变量的常用解决方案。您可以为所需的每个环境定义一个.env文件。然后将它们作为节点环境变量访问。根据您的用例,您可以使用环境变量来填充您的 config.json,或者您可能根本不需要配置文件,可以直接使用环境变量。

qq_花开花谢_0

如果我理解正确,您希望在 Node.js 应用程序中使用 Windows 环境变量,以便这些值来自主机操作系统/环境本身,而不是硬编码在配置文件中,这是正常的 CICD 要求. Windows 环境变量将在默认安装 Node.js 的任何地方可用。您不需要任何额外的软件包。系统和用户环境变量都将在 Node.js 进程环境 process.env.whatever 中可用。例如:const setting1 = process.env.setting1const setting2 = process.env.setting2但是,正如@max-starling 所说,您不能在 .json 文件中使用它们,因为它们是静态文件。在这种情况下,我认为 JavaScript 配置文件更有意义。主 app.jsimport config from './config'console.log(config.setting1)配置.jsconst somesetting = {  setting1: process.env.setting1,  setting2: process.env.setting2}module.exports = somesetting; 节点文档:https ://nodejs.org/api/process.html#process_process_env
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript