Javascript 在静态JSON配置文件中表示动态路径变量
我有一个后端CLI实用程序的JSON配置:Javascript 在静态JSON配置文件中表示动态路径变量,javascript,json,node.js,Javascript,Json,Node.js,我有一个后端CLI实用程序的JSON配置: { "searchRoots": ["$HOME"], "list": [] } 如果我用JavaScript实现这一点,我会: module.exports = { searchRoots": [process.env.HOME], list: [] }; 使用JSON而不是JS的问题在于,我无法以编程方式引用环境变量或任何变量。实际上,所有内容都是硬编码的 因此,我将在Node.js代码中执行以下操作: const conf
{
"searchRoots": ["$HOME"],
"list": []
}
如果我用JavaScript实现这一点,我会:
module.exports = {
searchRoots": [process.env.HOME],
list: []
};
使用JSON而不是JS的问题在于,我无法以编程方式引用环境变量或任何变量。实际上,所有内容都是硬编码的
因此,我将在Node.js代码中执行以下操作:
const conf = require('./conf.json');
const searchRoots = conf.searchRoots.map(function(item){
return process.env[item];
});
还有别的好办法吗?没有环境变量
在JSON中包含某种可以由文件读取器解释的变量的最佳方式是什么
有没有办法通过Node.js对路径进行bash风格的解释?如果你的库结构正确,它应该有一个方法来更新你的变量,或者你应该能够访问你的全局变量,只要该变量是同一环境的一部分。您可以查看有关访问本地和全局变量的任何文档或JS书籍。似乎这是处理此类情况的最佳方法。使用bash样式的路径解释,并从流程中调用bash 使用JSON配置文件,如下所示:
{
"searchRoots": ["$HOME"],
"list": []
}
您可以编写这样的例程,它将使用bash解释字符串,并将它们转换为绝对路径:
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": []
}
它是通用的,所以它可以处理其他环境变量,而不仅仅是$HOME变量。这是最大的成功。正是因为这个原因,我在配置中使用了.js文件而不是.json文件。所以作为一个例子。。。该文件名为config.js,包含以下代码
module.exports = {
"searchRoots": [ process.env.HOME ],
"list": []
}
很抱歉,这个答案对我来说没有任何意义,我只是在问题中添加了一些更相关的细节。请注意,您的searchRoots的值是一个数组。您可能正在查看process.env[item[0]]或jsonObject.searchRoots[0]。看看这两个链接,是的,在这种情况下,我想使用JSON,但也许我也可以允许使用JS