我试图设置一个标志,告知我的代码是否在生产或开发中。到目前为止,我已经看到了:
在VS Code的launch.json
中:
{ "configurations": { "env": "NODE_ENV": "development" } }
在节点package.json
中:
{ "scripts": { "start": "NODE_ENV=production" } }
在Webpack' webpack.config.js
:
module.exports = { "plugins": new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"' }) }
运行代码时:
set NODE_ENV=production && node app
NPM套餐:
https://www.npmjs.com/package/envify
Powershell的:
$env:NODE_ENV="production"
我想我只是感到困惑,因为默认情况下我目前有大约4个。这些互动究竟如何?它们都指的是同一个变量吗?我应该只有其中一个吗?哪些会覆盖其他人?
我真的更喜欢只有一个点来设置它,因为似乎每个模块都允许你指定它,因此,我对它实际设置的位置感到困惑。另外,无论如何都要在客户端访问此标志,还是仅在服务器端?
答案 0 :(得分:1)
在您指定的方案中,NODE_ENV
环境变量将由实际执行代码的进程初始化。请参阅以下摘录自environment variable wikipedia。
在所有Unix和类Unix系统中,每个进程都有自己独立的环境变量集。默认情况下,创建进程时,它会继承其父进程的重复环境,但父进程在创建子进程时所做的显式更改除外。在API级别,必须在运行fork和exec之间完成这些更改。或者,从命令shell(如bash)中,用户可以通过env或使用
ENVIRONMENT_VARIABLE=VALUE <command>
表示法间接调用它来更改特定命令调用的环境变量。所有Unix操作系统风格,DOS和Windows都有环境变量;但是,它们并不都使用相同的变量名称。正在运行的程序可以访问环境变量的值以进行配置。
因此,如果您使用pm2
运行代码,那么pm2
将在执行您的应用程序之前实际分配NODE_ENV
环境变量。它使用JSON file for options,您可以使用env
属性指定环境变量。
简而言之,设置NODE_ENV
的所有方法或多或少都相同,只是归结为谁开始您的流程。
由于环境变量是机器的本地变量(环境),因此它们是在本地设置的,不能由客户设置。