简体   繁体   中英

How can I set NODE_ENV=production on Windows?

In Ubuntu it's quite simple; I can run the application using:

$ NODE_ENV=production node myapp/app.js

However, this doesn't work on Windows. Is there a configuration file where I can set the attribute?

Current versions of Windows use Powershell as the default shell, so use:

$env:NODE_ENV="production"

Per @jsalonen's answer below. If you're in CMD (which is no longer maintained), use

set NODE_ENV=production

This should be executed in the command prompt where you intend to run your Node.js application.

The above line would set the environment variable NODE_ENV for the command prompt where you execute the command.

To set environment variables globally so they persist beyond just the single command prompt, you can find the tool from System in Control Panel (or by typing 'environment' into the search box in the start menu).

I just found a nice Node.js package that can help a lot to define environment variables using a unique syntax, cross platform.

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

It allow you to write something like this:

cross-env NODE_ENV=production my-command

Which is pretty convenient! No Windows or Unix specific commands any more!

在 PowerShell 中:

$env:NODE_ENV="production"

It would be ideal if you could set parameters on the same line as your call to start Node.js on Windows. Look at the following carefully, and run it exactly as stated:

You have these two options:

  1. At the command line:

     set NODE_ENV=production&&npm start

    or

    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" }

You can use

npm run env NODE_ENV=production

It is probably the best way to do it, because it's compatible on both Windows and Unix.

From the npm run-script documentation :

The env script is a special built-in command that can be used to list environment variables that will be available to the script at runtime. If an "env" command is defined in your package it will take precedence over the built-in.

I wrote a module win-node-env with which you can run your command just like you would in *nix.

NODE_ENV=production node myapp/app.js

It works by creating a NODE_ENV.cmd that sets the NODE_ENV environment variable and spawns a child process with the rest of the command and its args.

Just install it (globally), and run your npm script commands, it should automatically make them work.

npm install -g win-node-env

If you are using Visual Studio with NTVS, you can set the environment variables on the project properties page:

Visual Studio NTVS 项目属性

As you can see, the Configuration and Platform dropdowns are disabled (I haven't looked too far into why this is), but if you edit your .njsproj file as follows:

  <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>

The 'Debug / Release' dropdown will then control how the variable is set before starting Node.js.

My experience using Node.js on Windows 7 64-bit in Visual Studio 2013 is that you need to use

setx NODE_ENV development

from a cmd window. AND you have to restart Visual Studio in order for the new value to be recognized.

The set syntax only lasts for the duration of the cmd window in which it is set.

Simple test in Node.js:

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

It returns 'undefined' when using set, and it will return 'development' if using setx and restarting Visual Studio.

Here is the non-command line method:

In Windows 7 or 10, type environment into the start menu search box, and select Edit the system environment variables.

Alternatively, navigate to Control Panel\\System and Security\\System, and click Advanced system settings

This should open up the System properties dialog box with the Advanced tab selected. At the bottom, you will see an Environment Variables... button. Click this.

系统对话框

The Environment Variables Dialog Box will open.

环境变量对话框

At the bottom, under System variables, select New...This will open the New System Variable dialog box.

在此处输入图片说明

Enter the variable name and value, and click OK.

You will need to close all cmd prompts and restart your server for the new variable to be available to process.env. If it still doesn't show up, restart your machine.

To run your application in PowerShell (since && is disallowed):

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

Note that the text output of what the server's doing is suppressed, and I am not sure if that's fixable. (Expanding on @jsalonen's answer.)

Just to clarify, and for anyone else that may be pulling their hair out...

If you are using git bash on Windows , set node_env=production&& node whatever.js does not seem to work . Instead, use the native cmd. Then, using set node_env=production&& node whatever.js works as expected.

My use case:

I develop on Windows because my workflow is a lot faster, but I needed to make sure that my application's development-specific middleware were not firing in the production environment.

first in powershell type

$env:NODE_ENV="production"

then type

node fileName.js

It will work perfectly displaying all the outputs.

For multiple environment variables, an .env file is more convenient:

# .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

It's easy to use with dotenv-safe :

  1. Install with npm install --save dotenv-safe .
  2. Include it in your code (best at the start of the index.js ) and directly use it with the process.env command :
require('dotenv').load()
console.log(process.env.DB_HOST)   

Don't forget to ignore the .env file in your VCS .

Your program then fails fast if a variable "defined" in .env.example is unset either as an environment variable or in .env .

如果您使用 GITBASH 终端"set NODE_ENV=production"不起作用,您可以做的是输入“export NODE_ENV=production"

Restart VS code if the NODE_ENV or any other environment variable is not providing correct value. This should work after restart.

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

$env:NODE_ENV="production"

this will not set a variable but it's usefull in many cases. I will not recommend using this for production, but it should be okay if you're playing around with npm.

npm install --production

I used npm script for running a gulp task without "&&"

NODE_ENV=testcases npm run seed-db

For Windows

set NODE_ENV=development && react-scripts start

For Ubuntu, Linux, macOs

NODE_ENV=development react-scripts start

设置 NODE_ENV=production & node server.js

Finally, the best method I could see is as follows.

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

This will make sure we get the correct env setup for the programs. replace react-native-start with whichever next command you want.

It seems that

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

is not working for me. I'm currently trying this on my Windows machine. When I hit:

npm run start_windows

it would execute on the console without errors but when I try to echo

echo %NODE_ENV%

nothing comes out of it, meaning it does not exist and it wasn't set at all...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM