如何在Windows上设置NODE_ENV = production?


Answers:


485

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

$env:NODE_ENV="production"

根据下面的@jsalonen的答案。如果您使用的是CMD(不再维护),请使用

set NODE_ENV=production

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

上一行将在执行命令的命令提示符处设置环境变量NODE_ENV。

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


112
对于仍在努力解决此问题的人:set NODE_ENV=production && node app。更方便地配置package.json相应的:"scripts": { "start": "set NODE_ENV=production && node app" }
Amberlamps 2014年

5
@ShuruiLiu该命令不会输出任何内容,但是您可以键入echo %NODE_ENV%以检查其当前值。
Jani Hartikainen 2015年

169
请注意:“ set NODE_ENV = production &&”为变量添加了尾随空格。我需要“设置NODE_ENV = production &&”来避免额外的空间,这些空间会打乱Ghost之类的节点应用程序。
daw

12
@Amberlamps并不是一个很好的解决方案,因为NODE_ENV只是对所有机器进行了硬编码。真正的目标是使用env变量通过机器更改env或在命令行中传递值,而不是将其硬编码在package.json文件中。
亚历山大·米尔斯

6
我认为,cross-env如果您的团队在混合操作系统上工作,使用是更好的解决方案。@MoOx的答案将是我对这个问题的答案。
菲尔克

229

我刚刚找到了一个不错的Node.js程序包,它可以使用跨平台的独特语法对定义环境变量有很大帮助。

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

它允许您编写如下内容:

cross-env NODE_ENV=production my-command

哪个很方便!不再有Windows或Unix专用命令!


25
虽然第一个答案是正确的。我认为这个答案是最可靠的,应该使用
d4rklit3

这是一个很好的解决方案!
Kirill Gusyatin

简单完美地解决了我的问题。我只能在Linux上构建。这同时解决了Linux和Windows。
tista3

这个答案值得更多的爱,应该被接受:)
Honza Kalfus

这也是对我来说最好的答案
knaos

166

在PowerShell中:

$env:NODE_ENV="production"

4
ps:别忘了美元和引号;)
乔治

6
set NODE_ENV=production在Powershell中对我不起作用,但确实如此。谢谢!
愤怒

6
为了在Visual Studio Code的Powershell中使此功能生效,需要进行一些努力。以为我会在这里留下解决方案。我尝试运行“ Gulp”命令,同时确保设置了正确的env值。这就是为我工作的结局:$env:NODE_ENV="development"; gulp runMytask。注意那里的分号。gulp文件可以在process.env.NODE_ENV上使用条件逻辑。除非您进行设置,否则它将是未定义的。
dvsoukup

2
对我来说,只有这种解决方案的工作与Windows 10的WebPack 3.8.1
РоманАрсеньев

1
这很完美。但是,cross-env NODE_ENV=production如果从package.json运行要求设置环境的npm命令,则该选项确实是更好的解决方案。使用$ env:NODE_ENV选项后,在开发者/产品上保留环境设置太容易了
Drenai

105

如果可以在Windows上启动Node.js的调用所在的行中设置参数,那将是理想的选择。仔细查看以下内容,并严格按照说明运行它:

您有以下两种选择:

  1. 在命令行中:

    set NODE_ENV=production&&npm start

    要么

    set NODE_ENV=production&&node index.js
  2. 在Windows上运行的技巧是您需要在“ &&”之前和之后删除空格。使用下面的start_windows(请参见下文)配置了package.json文件。然后在命令行中运行“ npm run start_windows”。

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

1
DEF是否想知道如何使其以这种方式工作。
SC_Chupacabra 2015年

2
为我工作。必须通过“ set NODE_ENV = production && nodemon server.js”删除空白
SC_Chupacabra 2015年

2
希望我在尝试以上答案之前已经读了这么久,这样可以节省我一些时间。:\
杰夫

1
在一个模糊的相关说明中,我发现将多个命令链接在一起时,&&在Windows上无法按预期工作。如有疑问,请尝试使用| 相反
Mike

1
这对我在cmd和power-shell的Windows 10 64bit机器上都有效
Ani

30

您可以使用

npm run env NODE_ENV=production

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

npm运行脚本文档中

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


3
我们如何执行另一个带有变量集的命令?这似乎不起作用:npm run env NODE_ENV = production && echo $ NODE_ENV。它们可能在两个不同的Shell中执行吗?
乔纳斯·凯洛

1
据我所知,这根本不起作用。从文档本身来看,它只是列出环境变量,而不是设置它们。
kumarharsh 2015年

2
对我不起作用。它列出了var,显示您指定的var,但是在运行时,var在process.env.YOUR_VAR ...中不能正常运行
MoOx 2016年

3
@JonasKello你会使用这样的:npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'--强制性的。替换node -e 'console.log(process.env.NODE_ENV)'为所需的任何命令。
Pauan

使用以下命令对此进行了尝试:npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js并且...什么都没有发生。我不确定该方法是否可以在Windows上使用。
jcollum

14

如果将Visual Studio与NTVS一起使用,则可以在项目属性页上设置环境变量:

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之前如何设置变量。


12

我编写了一个模块win-node-env,您可以使用该模块像在* nix中一样运行命令。

NODE_ENV=production node myapp/app.js

它通过创建一个NODE_ENV.cmd设置NODE_ENV环境变量并使用其余命令及其arg生成子进程的子进程来工作。

只需安装(全局),然后运行您的npm脚本命令,它将自动使它们工作。

npm install -g win-node-env

正是我想要的!可以与npm脚本一起运行,甚至可以与其他节点cli工具(如jest)一起使用。因此“ set NODE_ENV = debug&cls&jest ...”就变成了“ cls&NODE_ENV = debug jest”
Z. Khullah

9

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

setx NODE_ENV development

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

设置语法仅在设置它的cmd窗口期间持续。

Node.js中的简单测试:

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

使用set时,它将返回“未定义”,如果使用setx并重新启动Visual Studio,则将返回“开发”。


cmd-不是powershell吗?gh,快进窗户,把它弄在一起。
jcollum

您关于重启VS代码的评论非常有用!
Yury Kozlov

8

这是非命令行方法:

在Windows 7或10中,在开始菜单搜索框中键入环境,然后选择编辑系统环境变量。

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

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

系统对话框

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

环境变量对话框

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

在此处输入图片说明

输入变量名称和值,然后单击确定。

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


2
谢谢!我已经完成了所有这些操作,但是直到重新启动服务器后它才起作用。
马塞尔·拉莫特

7

只是为了澄清一下,对于其他可能正在拔头发的人来说……

如果您在Windows上使用git bashset node_env=production&& node whatever.js 则似乎无法正常工作。而是使用本机cmd。然后,set node_env=production&& node whatever.js按预期使用作品。

我的用例:

我在Windows上开发,因为我的工作流程是很多快,但我需要确保我的应用程序的开发专用的中间件并没有在生产环境中射击。


6

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

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

请注意,服务器正在执行的操作的文本输出被抑制,并且我不确定这是否可以解决。(扩展@jsalonen的答案。)


它对我不起作用:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Evandro Pomatti

4

Powershell类型中的第一个

$env:NODE_ENV="production"

然后输入

node fileName.js

它将完美显示所有输出。


2

对于多个环境变量,.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 dotenv-safe
  2. 将其包含在您的代码中(最好在的开头index.js),然后将其与process.env命令直接一起使用:
require('dotenv').load()
console.log(process.env.DB_HOST)   

不要忘记忽略.env VCS中文件

如果未将变量“ defined”定义.env.example为环境变量或in ,则程序将很快失败.env


.env文件仅对秘密方便,在将新人员分配给项目或对其进行更改时进行设置时增加了额外的复杂性。
coiso

@coiso如果没有通用的公共场所,您会在哪里放置许多 env变量?在脚本文件中或在依赖于IDE的设置中,您甚至都可以绑定到特定工具。我认为,这使得整合新团队成员变得更加困难。
多米尼克

2

如果您使用的是GITBASH终端 "set NODE_ENV=production" 无法正常工作,您可以输入“ export”NODE_ENV=production"


0

这不会设置变量,但是在许多情况下很有用。我不建议将其用于生产,但是如果您正在使用npm,那应该没问题。

npm install --production


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.