如何在Windows上设置NODE_ENV = production?

Jac*_*ack 308 node.js express

在Ubuntu中它非常简单; 我可以运行应用程序:

$ NODE_ENV=production node myapp/app.js
Run Code Online (Sandbox Code Playgroud)

但是这不适用于Windows.是否有配置文件,我可以设置属性?

Jan*_*nen 445

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

$env:NODE_ENV="production"
Run Code Online (Sandbox Code Playgroud)

Per @ jsalonen的回答如下.如果您使用的是CMD(不再维护),请使用

set NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)

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

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

要全局设置环境变量,使它们超出单个命令提示符,您可以从"控制面板"中的"系统"中找到该工具(或者在"开始"菜单的"搜索"框中键入"environment").

  • 抬头:"设置NODE_ENV =生产&&"为变量添加一个尾随空格.我需要"设置NODE_ENV = production &&"以避免破坏节点应用程序(如Ghost)的额外空间. (154认同)
  • 对于仍在努力解决这个问题的人:`设置NODE_ENV =生产&&节点app`.更方便地配置你的`package.json`:``scripts':{"start":"set NODE_ENV = production && node app"}`. (102认同)
  • @Amberlamps不是一个好的解决方案,因为NODE_ENV只是为所有机器硬编码; 真正的目标是使用env变量通过机器更改env,或者在命令行传递值,而不是在package.json文件中对其进行硬编码. (10认同)
  • 我认为如果您的团队在混合操作系统上工作,使用`cross-env`可以更好地解决这个问题.来自@MoOx的回答将是我的选择作为这个问题的答案. (6认同)
  • @ShuruiLiu命令不会输出任何内容,但你可以输入`echo%NODE_ENV%`来检查它的当前值. (5认同)
  • 谢谢@daw.您的评论应添加到原始答案中 (3认同)

MoO*_*oOx 199

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

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

它允许你写这样的东西:

cross-env NODE_ENV=production my-command
Run Code Online (Sandbox Code Playgroud)

这很方便!没有Windows或Unix特定的命令!

  • 虽然第一个答案是真的.我认为这个答案是最可靠的,应该使用 (20认同)
  • 这非常有效,感谢分享! (3认同)

jsa*_*nen 161

在PowerShell中:

$env:NODE_ENV="production"
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案在PowerShell中运行,谢谢! (6认同)
  • `set NODE_ENV = production`在powershell中对我没有用,但确实如此.谢谢! (6认同)
  • 在Visual Studio Code中从Powershell中解决了这个问题.以为我会在这里留下解决方案.我试图运行"Gulp"命令,同时确保设置了正确的env值.这就是为我工作的结果:`$ env:NODE_ENV ="development"; gulp runMytask`.注意那里的分号.gulp文件可以在process.env.NODE_ENV上使用条件逻辑.除非你设置它,否则它将是未定义的. (6认同)
  • ps:别忘了$和引号;) (4认同)
  • 只有这个解决方案适用于Windows 10和webpack 3.8.1 (2认同)

Ale*_*lls 85

如果您可以在与Windows上启动Node.js的调用相同的行上设置参数,那将是理想的选择.请仔细查看以下内容,并按照说明运行:

你有这两个选择:

  1. 在命令行:

    set NODE_ENV=production&&npm start
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    set NODE_ENV=production&&node index.js
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在命令行运行"npm run start_windows",其package.json文件配置如下

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }
    
    Run Code Online (Sandbox Code Playgroud)

它在Windows上工作的技巧是你需要删除"&&"之前和之后的空格.

  • 不需要删除“&&”后面的空格。您可以使用“set NODE_ENV=生产&&节点index.js”原因:“生产”和“&&”之间的空格被解释为NODE_ENV的一部分。您也可以使用单引号和空格来解决这个问题。所以这也是有效的并且应该有效:`set 'NODE_ENV=Production' && node index.js` (4认同)
  • DEF 想知道如何让它以这种方式工作吗? (2认同)
  • 为我工作。通过“ set NODE_ENV = production && nodemon server.js”必须删除空格 (2认同)
  • 也可用于单个`&`,无空格 (2认同)
  • 希望我在尝试以上答案之前已经读了这么久,这样可以节省我一些时间。:\ (2认同)

小智 28

您可以使用

npm run env NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)

这可能是最好的方法,因为它兼容Windows和Unix.

npm运行脚本文档:

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

  • 我们如何用变量set执行另一个命令?这似乎不起作用:npm run env NODE_ENV = production && echo $ NODE_ENV.可能他们是在两个不同的壳中执行的? (3认同)
  • @JonasKello您可以使用:`npm run env NODE_ENV = production - node -e'console.log(process.env.NODE_ENV)'`` - `是**强制**.用你想要的任何命令替换`node -e'console.log(process.env.NODE_ENV)'`. (3认同)
  • 对我不起作用.它列出变量,显示你指定的变量,但在运行时,var在process.env.YOUR_VAR中不正常...... (2认同)

pau*_*aul 13

如果将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>
Run Code Online (Sandbox Code Playgroud)

然后,'Debug/Release'下拉菜单将控制在启动Node.js之前如何设置变量.


lag*_*lex 11

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

NODE_ENV=production node myapp/app.js
Run Code Online (Sandbox Code Playgroud)

它的工作原理是创建一个NODE_ENV.cmd设置NODE_ENV环境变量并使用命令的其余部分及其args生成子进程.

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

npm install -g win-node-env
Run Code Online (Sandbox Code Playgroud)

  • 正是我要找的!与 npm 脚本一起运行,它甚至可以与 jest 等其他节点 cli 工具一起使用。所以“设置 NODE_ENV=debug &amp; cls &amp; jest...”变成了“cls &amp; NODE_ENV=debug jest” (2认同)

kuk*_*kab 10

如果您使用的是 vs code 终端,则必须使用此命令

$env:NODE_ENV="production"
Run Code Online (Sandbox Code Playgroud)


edh*_*ell 9

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

setx NODE_ENV development
Run Code Online (Sandbox Code Playgroud)

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

设置语法仅持续设置它的cmd窗口的持续时间.

在Node.js中进行简单测试:

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);
Run Code Online (Sandbox Code Playgroud)

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


Cam*_*ick 9

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

($env:NODE_ENV="production") -and (node myapp/app.js)
Run Code Online (Sandbox Code Playgroud)

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


Abh*_*nav 8

首创的 powershell 类型

$env:NODE_ENV="production"
Run Code Online (Sandbox Code Playgroud)

然后输入

node fileName.js
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*tat 7

这是非命令行方法:

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

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

这应打开"系统属性"对话框,并选中"高级"选项卡.在底部,您将看到Environment Variables ...按钮.点击这个.

系统对话框

环境变量对话框将打开.

环境变量对话框

在底部的System variables下,选择New ...这将打开New System Variable对话框.

在此输入图像描述

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

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

  • 谢谢!我已经完成了所有这些操作,但是直到重新启动服务器后它才起作用。 (2认同)

小智 6

只是为了澄清,并为其他任何可能拔毛的人......

如果你在Windows上使用git bash,set node_env=production&& node whatever.js 似乎没有用.相反,使用本机cmd.然后,set node_env=production&& node whatever.js按预期使用工作.

我的用例:

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