假設在本地環境中,我們將$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模塊,然後**修補程序**與該片段:) –