环境变量是操作系统(例如 Linux)提供的功能。
您可以在终端或 shell 脚本中使用:
name=value
或者在 Node 中使用:
process.env.name = value;
您可以使用以下命令在 shell 中访问它们:
echo $name
或者在 Node 中使用:
console.log(process.env.name);
环境变量的作用域是定义它们时的进程和它执行的子进程。
例如编写一个名为 envtest.js 的 Node 程序:
console.log('Node program:', process.env.test);
process.env.test = 'new value';
console.log('Node program:', process.env.test);
还有一个叫做 envtest1.sh 的 shell 脚本:
test=value
echo "Shell script: $test"
node envtest.js
echo "Shell script: $test"
运行sh envtest1.sh 将打印:
Shell script: value
Node program: undefined
Node program: new value
Shell script: value
正如你所见,Node 程序没有得到值,因为它没有被导出。它可以设置值并使用新值,但不会在 shell 脚本中更改。
现在,编写一个不同的 shell 脚本:
test=value
export test
echo "Shell script: $test"
node envtest.js
echo "Shell script: $test"
这次运行sh envtest2.sh 将打印:
Shell script: value
Node program: value
Node program: new value
Shell script: value
这意味着Node程序得到了这个值,因为它这次被导出了,它仍然可以改变它并使用新的值,但是它在它自己的副本上工作,它在调用这个Node的原始shell脚本中没有改变程序。
代替:
test=value
export test
你可以写:
export test=value
作为简写。
一个更复杂的例子,写envtest3.sh:
export test=value
echo "Shell script: $test"
node envtest.js
echo "Shell script: $test"
test=value2 node envtest.js
echo "Shell script: $test"
这次会打印出来:
Shell script: value
Node program: value
Node program: new value
Shell script: value
Node program: value2
Node program: new value
Shell script: value
这表明运行test=value2 node envtest.js 将test 变量的值设置为value2,但仅限于对Node 程序的调用——shell 脚本的其余部分中的值仍然是value,就像以前一样.
这些是环境变量的 3 种范围 - 通常情况下,shell 脚本中的变量不会被导出,并且您运行的程序看不到它。当它被导出时,您运行的程序可以看到它并可以修改它,但它们在自己的副本上工作,并且在 shell 脚本中不会更改。
当您运行 name=value command 时,将仅为该命令设置环境变量,但旧值将保留在脚本的其余部分中。
这些是环境变量的基础知识以及如何在 Node 中使用它们。