2016-01-24 5 views
0

Предположим, что в локальной среде $VAR расширяется до /path/to/var.Расширение переменных оболочки в Node.js

Тогда как я могу воспользоваться этим в 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

Как можно создать функцию, которая сканирует строку для $ VAR и вызывает process.env.VAR таким образом? – George

+0

'needNodeFunction' терпит неудачу, если есть перекрывающиеся переменные среды. I.E .: '$ VAR1/file' вернет' $ VAR' + '1' +'/file' в случае, если определены '$ VAR' и' $ VAR1'. – George

+0

Вот почему я хотел бы найти модуль npm в первую очередь, а затем ** tinker ** с этим фрагментом :) –

0
var util = require('util'); 
var str = util.format('%s/is/here', process.env.VAR); 

Нет НПМ библиотеки необходимой. Если это должно быть частью пути или аналогичный, посмотрите на path.join:

var path = require('path'); 
var str = path.join(process.env.VAR, 'is', 'here'); 

path.join является родным и принимает во внимание платформу (преобразуется в обратную косую черту на окнах, forwardslash на Linux/OSX/и т.д.), и я настоятельно рекомендую вам использовать это вместо замены.

Если вы действительно (все еще крайне нежелательно) хотят использовать подстановку переменных, поскольку эта строка подается из другой системы, которая кодируется Perl, PHP или любой другой язык, который используют этот синтаксис, вы можете использовать что-то вроде этого :

str.replace(/\$[a-z\d_]+/ig, function (match) { 
    var sub = process.env[match.substring(1)]; 
    return sub || match; 
}) 

Обратите внимание, что это должно быть отполированы, чтобы обрабатывать все вариации ENV переменных, которые вы можете найти, в соответствии со стандартами. Возможно, не начинается с номера и т. Д.

Смежные вопросы