在静态JSONconfiguration文件中表示dynamicpathvariables

我有一个后端CLI实用程序的JSONconfiguration:

{ "searchRoots": ["$HOME"], "list": [] } 

如果我用JavaScript做到这一点,我会做:

 module.exports = { searchRoots": [process.env.HOME], list: [] }; 

与使用JSON而不是JS的问题是,我不能以编程方式引用环境variables或任何variables,一切都硬编码。

那么我将在我的Node.js代码中做什么:

 const conf = require('./conf.json'); const searchRoots = conf.searchRoots.map(function(item){ return process.env[item]; }); 

还有另外一个好方法吗? 没有envvariables?

在JSON中包含某种可以被该文件的读者解释的variables的最佳方法是什么?

有没有办法通过Node.js做bash风格的path解释?

       

网上收集的解决方案 "在静态JSONconfiguration文件中表示dynamicpathvariables"

看来这是处理这种情况的最好方法。 使用bash风格的path解释,并从你的过程中调用bash。

用你的JSONconfiguration文件就像这样:

 { "searchRoots": ["$HOME"], "list": [] } 

你可以写一个像这样的例程,它将使用bash来解释string,并将它们转换为绝对path:

 searchRoots: function (cb) { const mappedRoots = searchRoots.map(function (v) { return `echo "${v}";`; }); const k = cp.spawn('bash'); k.stdin.write('\n' + mappedRoots + '\n'); process.nextTick(function () { k.stdin.end(); }); const data = []; k.stderr.pipe(process.stderr); k.stdout.on('data', function (d) { data.push(d); }); k.once('close', function (code) { if (code > 0) { return cb({ code: code }); } cb(null, data.map(function (d) { return String(d).trim(); })); }); }, 

这会将原始数据转换为:

  { "searchRoots": ["/Users/YourHomeDir"], "list": [] } 

它是通用的,所以它可以处理其他的envvariables,而不仅仅是$ HOMEvariables。 这是这里的大胜利。

为此,我使用.js文件而不是.json作为configuration。 所以作为一个例子…该文件将被称为config.js,将有以下代码。

 module.exports = { "searchRoots": [ process.env.HOME ], "list": [] } 

如果你正确地构build你的库,它应该有一个方法来更新你的variables,或者只要variables是同一个环境的一部分,就应该能够访问你的全局variables。 你可以检查任何文档或JS书访问本地和全局variables。