如何在Windows上设置NODE_ENV=production ?

在Ubuntu中这很简单;我可以运行应用程序使用:

$ NODE_ENV=production node myapp/app.js

但是,这在Windows上不起作用。是否有可以设置属性的配置文件?

540398 次浏览

当前版本的Windows使用Powershell作为默认shell,因此使用:

$env:NODE_ENV="production"

请看下面@jsalonen的回答。如果您在CMD(不再维护),使用

set NODE_ENV=production

这应该在您打算运行Node.js应用程序的命令提示符中执行。

上面的代码行将为执行命令的命令提示符设置环境变量NODE_ENV。

要全局设置环境变量,使它们在单个命令提示符之外持续存在,您可以在控制面板中的系统中找到该工具(或在开始菜单中的搜索框中键入'environment')。

PowerShell:

$env:NODE_ENV="production"

我在Visual Studio 2013的Windows 7 64位上使用Node.js的经验是,你需要使用

setx NODE_ENV development

从CMD窗口。并且您必须重新启动Visual Studio才能识别新的值。

set语法仅在设置它的cmd窗口的持续时间内有效。

在Node.js中的简单测试:

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);

当使用set时返回'undefined',如果使用setx并重新启动Visual Studio,它将返回'development'。

如果你能在调用启动Windows上的Node.js时在同一行设置参数,那就太理想了。仔细看下面的内容,并按照上面说的那样运行:

你有两个选择:

  1. 命令行

    set NODE_ENV=production&&npm start
    

    set NODE_ENV=production&&node index.js
    
  2. The trick for it to work on Windows is you need to remove the whitespace before and after the "&&". Configured your package.json file with start_windows (see below) below. Then Run "npm run start_windows" at the command line.

    //package.json
    
    
    "scripts": {
    "start": "node index.js"
    "start_windows": "set NODE_ENV=production&&node index.js"
    }
    

要在PowerShell中运行应用程序(因为&&是不允许的):

($env:NODE_ENV="production") -and (node myapp/app.js)

请注意,服务器正在做的事情的文本输出被抑制了,我不确定这是否可以修复。(扩展@jsalonen的回答。)

你可以使用

npm run env NODE_ENV=production

这可能是最好的方法,因为它在Windows和Unix上都是兼容的。

NPM运行脚本文档:

env脚本是一个特殊的内置命令,可用于列出脚本在运行时可用的环境变量。如果在包中定义了“env”命令,它将优先于内置命令。

如果您正在使用带有NTVS的Visual Studio,您可以在项目属性页面上设置环境变量:

Visual Studio NTVS项目属性

正如你所看到的,配置和平台下拉菜单是禁用的(我还没有深入研究为什么会这样),但如果你编辑你的.njsproj文件如下:

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
<Environment>NODE_ENV=development</Environment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>true</DebugSymbols>
<Environment>NODE_ENV=production</Environment>
</PropertyGroup>

然后,“调试/发布”下拉菜单将控制在启动Node.js之前如何设置变量。

我刚刚发现了一个很好的Node.js包,它可以用独特的语法定义环境变量,跨平台。

https://www.npmjs.com/package/cross-env

它允许你这样写:

cross-env NODE_ENV=production my-command

这非常方便!不再有Windows或Unix特定的命令!

只是为了澄清一下,对于那些可能会揪着头发的人来说……

如果你正在使用git bash在Windows上set node_env=production&& node whatever.js 好像不管用。相反,使用本机cmd。然后,使用__abc0可以正常工作。

我的用例:

我在Windows上开发,因为我的工作流更快很多,但我需要确保我的应用程序的特定于开发的中间件没有在生产环境中启动。

对于多个环境变量,.env文件更方便:

# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD

dotenv-safe很容易使用:

  1. 使用npm install --save-dev dotenv-safe安装。
  2. 将它包含在你的代码中(最好在index.js的开头),并直接与process.env命令一起使用:
require('dotenv').load()
console.log(process.env.DB_HOST)

别忘了忽略VCS中的.env文件

如果一个变量“defined"在.env.example中作为环境变量或在.env中被取消设置。

下面是非命令行方法:

在Windows 7和Windows 10操作系统中,在开始菜单搜索框中输入“environment”,选择“编辑系统环境变量”。

或者,导航到控制面板\系统和安全\系统,然后单击高级系统设置

这将打开“系统属性”对话框,选中“高级”选项卡。在底部,你会看到一个环境变量…按钮。点击这个。

系统对话框

将打开“环境变量”对话框。

环境变量对话框

在底部,在系统变量下,选择New…这将打开“新建系统变量”对话框。

enter image description here

输入变量名和值,然后单击OK。

您需要关闭所有cmd提示并重新启动服务器,以便process.env可以使用新变量。如果仍然没有显示,请重新启动计算机。

这不会设置一个变量,但在很多情况下是有用的。我不建议在生产环境中使用这个方法,但是如果你正在使用npm,它应该是可以的。

npm install --production

如果你使用的是GITBASH终端 "set NODE_ENV=production" 不会工作,你能做的就是打字 “出口NODE_ENV=production" < / p >

首先在powershell类型

$env:NODE_ENV="production"

然后输入

node fileName.js

它将完美地显示所有输出。

我写了一个模块win-node-env,你可以像在*nix中一样运行你的命令。

NODE_ENV=production node myapp/app.js

它通过创建一个NODE_ENV.cmd来设置NODE_ENV环境变量,并使用该命令的其余部分及其参数生成一个子进程。

只需安装它(全局),并运行你的npm脚本命令,它应该会自动使它们工作。

npm install -g win-node-env

我使用npm脚本运行gulp任务没有“&&”

NODE_ENV=testcases运行seed-db

如果NODE_ENV或任何其他环境变量没有提供正确的值,则重新启动VS代码。这应该在重启后工作。

似乎

{
"start_windows": "set NODE_ENV=test"
}

对我没用。我目前正在我的Windows电脑上尝试这个功能。当我点击:

npm run start_windows

它会在控制台上执行,没有错误,但是当我尝试回显时

echo %NODE_ENV%

什么都没有出来,这意味着它不存在,它根本就没有设置……

如果你使用vs code终端,你必须使用这个命令

$env:NODE_ENV="production"

对于Windows

set NODE_ENV=development &&react-scripts开始

适用于Ubuntu, Linux, macOs

NODE_ENV=开发反应脚本启动

set NODE_ENV=production & node server.js

最后,我认为最好的方法如下。

"set-env-qa": "npm run env APP_ENV=qa",
"start:qa": "npm run set-env-qa && react-native start",

这将确保我们为程序获得正确的env设置。用您想要的下一个命令替换react-native-start。

在Windows 10中,我使用了 $env:NODE_ENV="Production"

这在我的vscode终端上工作。但如果你的服务器正在监听,首先需要停止并设置你的env变量,然后重新启动应用程序。这种方法对我很有效。