2016-05-01 271 views
3

我正在使用需要JSON配置文件的第三方库,并且需要将一些env变量作为关键值传递。如果我把它们作为我通常会,如:(node.js)如何在JSON文件中使用环境变量

"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 
    } 

...我得到的错误:

SyntaxError: config/s3_backup.config.json: Unexpected token p 
+0

如果不通过[常用测试(HTTP:// jsonlint.com)它不是JSON。 – tadman

回答

7

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 
    } 
}; 
+2

这实际上很容易把它与JSON文件的内容结合起来:'merge({},defaults,config)'其中'var config = require('config.json')'例如,如果你有一个好的合并'功能。 – tadman

+0

我应该更具体一些,当我在OP中说我正在使用第三方lib时,我必须将它传递给JSON文件,我不能使用正常的js文件并导出配置。我想我可以生成JSON文件作为我的部署脚本的一部分......虽然这种做法挫败了使用env变量的目的。我会与该项目的作者核对,因为这似乎太常见了,没有解决方法。 – Ben

+0

您可以通过'JSON.stringify()'调用从模块生成JSON文件并将其传递给库。 – dtoux