困惑于有多less种方式设置NODE_ENV

我试图设置一个标志,通知我的代码是否在生产或开发。 到目前为止,我已经看到:

在VS Code的launch.json

 { "configurations": { "env": "NODE_ENV": "development" } } 

在Node的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 

电源shell:

 $env:NODE_ENV="production" 

我想我只是困惑,因为默认情况下,我有大约4目前设置。 这些如何相互作用? 他们都指的是相同的variables? 我应该只有其中之一吗? 哪些覆盖别人?

我真的更喜欢,如果只有一个点来设置,因为它似乎每个单一的模块可以让你指定它,结果,我很困惑,实际上是在哪里设置。 另外,有没有在客户端访问这个标志呢,还是只在服务器端?

在你指定的场景中, NODE_ENV环境variables将被实际执行你的代码的进程初始化。 请参阅以下环境variableswikipedia摘录。

在所有类Unix系统中,每个进程都有自己独立的一组环境variables。 默认情况下,创build进程时,它会inheritance父进程的重复环境,除非父进程在创buildsubprocess时进行显式更改。 在API级别,这些更改必须在运行fork和exec之间完成。 或者,从诸如bash之类的命令shell中,用户可以通过env或使用ENVIRONMENT_VARIABLE=VALUE <command>表示法间接调用特定命令调用来更改特定命令调用的环境variables。 所有Unix操作系统的风格,DOS和Windows都有环境variables; 但是,它们并不都使用相同的variables名称。 正在运行的程序可以访问环境variables的值以进行configuration。

所以如果你使用NODE_ENV来运行你的代码,那么在执行你的应用程序之前, NODE_ENV实际上会分配NODE_ENV环境variables。 它使用JSON文件来select可以使用env属性指定环境variables的选项 。

简而言之,所有设置NODE_ENV的方法NODE_ENV都是相同的,只是归结于谁开始了你的过程。

由于环境variables对于一台机器( 环境 )来说是本地的,所以它们是在本地设置的,不能由客户端设置。