(node.js)如何在JSON文件中使用环境变量

Ben*_*Ben 14 node.js

我正在使用需要JSON配置文件的第三方库,我需要将一些env变量作为键值传递.如果我像往常一样包括它们,例如:

  "s3": {
    "key": process.env.AWS_ACCESS_KEY_ID,
    "secret": process.env.AWS_SECRET_ACCESS_KEY,
    "bucket": process.env.S3_MLL_BUCKET_NAME,
    "destination": "/backups/database",
    "encrypt": false,
    "region": process.env.AWS_REGION
  }
Run Code Online (Sandbox Code Playgroud)

......我收到错误:

SyntaxError: config/s3_backup.config.json: Unexpected token p
Run Code Online (Sandbox Code Playgroud)

dto*_*oux 16

JSON没有环境变量的概念.您可以做的是将配置文件声明为node.js模块,然后您将能够使用您的环境变量,如下所示:

module.exports = {
  s3: {
    key: process.env.AWS_ACCESS_KEY_ID,
    secret: process.env.AWS_SECRET_ACCESS_KEY,
    bucket: process.env.S3_MLL_BUCKET_NAME,
    destination: "/backups/database",
    encrypt: false,
    region: process.env.AWS_REGION
  }
};
Run Code Online (Sandbox Code Playgroud)

  • 实际上很容易将它与JSON文件的内容结合起来:`merge({},defaults,config)`其中`var config = require('config.json')`例如,如果你有一个好的`merge`功能. (2认同)
  • 我应该更具体一点,当我在OP中说我正在使用第3方库时,我必须向它传递一个JSON文件,我不能使用普通的js文件并导出配置。我想我可以生成 JSON 文件作为部署脚本的一部分...尽管这违背了使用环境变量的目的。我将与该项目的作者核实,因为这似乎太常见了,没有解决方法。 (2认同)

Pun*_*Bad 8

我遇到了同样的问题,对我有用的是使用 js 文件并导出一个对象module.exports = {config: {"exampleAPIKey":"ruier4343"}}...然后“字符串化”该对象,然后将其解析回 json const config = require("./jsConfigs.js").config; const jsonConfig = JSON.parse(JSON.stringify(config)) 我已经尝试了很多不同的方法,但这是唯一一种工作了。