假设在本地环境中,我们将$VAR
扩展为/path/to/var
。在Node.js中扩展Shell变量
那么我该如何利用node.js中的这个优势呢?特别是,假设我们有:
var str = "$VAR/is/here"
那么如何才能获得strExpanded
这样
var strExpanded = neededNodeFunction(str);
console.log(strExpanded); // "/path/to/var/is/here"
假设在本地环境中,我们将$VAR
扩展为/path/to/var
。在Node.js中扩展Shell变量
那么我该如何利用node.js中的这个优势呢?特别是,假设我们有:
var str = "$VAR/is/here"
那么如何才能获得strExpanded
这样
var strExpanded = neededNodeFunction(str);
console.log(strExpanded); // "/path/to/var/is/here"
见https://nodejs.org/dist/latest-v5.x/docs/api/process.html#process_process_env
例如:
var str = process.env.VAR + "/is/here"
编辑: 我会寻找npm模块,这首先做到这一点。然后最终回落到修修补补类似的东西
neededNodeFunction = str => Object.keys(process.env)
.sort((a, b) => b.length - a.length) // sort it by length so 'VAR1' gets before 'VAR'
.reduce((str, key) => {
return str.replace(new RegExp(`\\$${key}`, 'g'), process.env[key])
}, str)
var util = require('util');
var str = util.format('%s/is/here', process.env.VAR);
没有必要NPM库。如果这应该是一个路径或类似的一部分,看看path.join:
var path = require('path');
var str = path.join(process.env.VAR, 'is', 'here');
path.join是本地和平台需要考虑(转换为反斜线在Windows上,forwardslash在Linux/OSX /等),我强烈建议你利用这个而不是替代。
如果你真的真的(仍然非常气馁)要使用变量替换,因为该字符串从已被Perl,PHP或任何其他语言,使用语法编码的另一个系统喂,你可以使用这样的事情:
str.replace(/\$[a-z\d_]+/ig, function (match) {
var sub = process.env[match.substring(1)];
return sub || match;
})
请注意,根据标准,这需要进行抛光以处理所有可能发现的env变量的变体。大概不能以数字等开头
怎么能做一个函数扫描$ VARs的字符串并调用process.env.VAR这种方式? – George
如果存在重叠的环境变量,'neededNodeFunction'会失败。 I.E .:在$ VAR和$ VAR1都定义的情况下,'$ VAR1/file'将返回'$ VAR' +'1' +'/ file'。 – George
这就是为什么我会首先寻找npm模块,然后**修补程序**与该片段:) –