在静态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解释?
看来这是处理这种情况的最好方法。 使用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。