2016-01-24 88 views
0

假设在本地环境中,我们将$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" 

回答

0

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) 
+0

怎么能做一个函数扫描$ VARs的字符串并调用process.env.VAR这种方式? – George

+0

如果存在重叠的环境变量,'neededNodeFunction'会失败。 I.E .:在$ VAR和$ VAR1都定义的情况下,'$ VAR1/file'将返回'$ VAR' +'1' +'/ file'。 – George

+0

这就是为什么我会首先寻找npm模块,然后**修补程序**与该片段:) –

0
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变量的变体。大概不能以数字等开头