我如何在Windows上设置NODE_ENV = production?
在Ubuntu中很简单, 我可以运行应用程序使用:
$ NODE_ENV=production node myapp/app.js
但是,这在Windows上不起作用。 有一个configuration文件,我可以设置属性?
尝试使用
set NODE_ENV=production
这应该在打算运行Node.js应用程序的命令提示符中执行。
上面的行将为执行命令的命令提示符设置环境variablesNODE_ENV。
要在全局范围内设置环境variables,以便它们不仅仅是单一的命令提示符,您可以从“控制面板”中的“系统”(或者通过在“开始”菜单的search框中键入“环境”)find该工具。
在PowerShell中:
$env:NODE_ENV="production"
我刚刚find了一个很好的Node.js包,它可以使用跨平台的独特语法定义环境variables。
https://www.npmjs.com/package/cross-env
它允许你写这样的东西:
cross-env NODE_ENV=production my-command
这很方便! 没有Windows或Unix特定的命令了!
如果您可以在调用相同的线路上设置参数以在Windows上启动Node.js,那将是理想的select。 仔细看下面的内容,并按照说明正确运行它:
你有这两个select:
-
在命令行中:
set NODE_ENV=production&&npm start
要么
set NODE_ENV=production&&node index.js
-
在命令行运行“npm run start_windows”,你的package.json文件configuration如下
//package.json "scripts": { "start": "node index.js" "start_windows": "set NODE_ENV=production&&node index.js" }
它在Windows上工作的诀窍是你需要删除“&&”前后的空格。
您可以使用
npm run env NODE_ENV=production
这可能是最好的方法,因为它在Windows和Unix上都兼容。
从npm run-script文档 :
env脚本是一个特殊的内置命令,可用于列出在运行时可供脚本使用的环境variables。 如果你的包中定义了一个“env”命令,它将优先于内置的。
如果您将Visual Studio与NTVS一起使用,则可以在项目属性页面上设置环境variables:
正如你所看到的,configuration和平台下拉菜单是禁用的(我没有看太多,为什么这是),但如果你编辑你的.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>
然后,“Debug / Release”下拉菜单将控制在启动Node.js之前如何设置variables。
在Visual Studio 2013中使用Windows 7 64位上的Node.js的经验是您需要使用
setx NODE_ENV development
从一个cmd窗口。 而且您必须重新启动Visual Studio才能识别新值。
设置的语法只能持续设置它的cmd窗口的持续时间。
Node.js中的简单testing:
console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);
它在使用set时返回'undefined',如果使用setx并重新启动Visual Studio,它将返回'development'。
在PowerShell中运行应用程序(因为&&
是不允许的):
($env:NODE_ENV="production") -and (node myapp/app.js)
请注意,服务器正在执行的文本输出被抑制,我不确定是否可以修复。 (扩展@ jsalonen的答案。)
只是为了澄清,而对于任何可能将他们拉出头发的人来说…
如果您在Windows上使用git bash ,请set node_env=production&& node whatever.js
似乎不起作用 。 相反,使用本地cmd。 然后,使用set node_env=production&& node whatever.js
按预期工作。
我的用例:
我在Windows上开发是因为我的工作stream程要快得多,但是我需要确保我的应用程序的特定于开发的中间件不在生产环境中触发。
Windows的git-bash | Mac OS Xterminal
NODE_ENV =生产节点script.js
通常会变成
NODE_ENV =生产节点app.js
您也可以通过运行来设置N个环境variables
NODE_ENV =生产NODE_APP_INSTANCE = 3节点app.js
这将使npm config
读取default.js
文件,接着是production.js
文件覆盖任何重复的东西,最后读取production-3.js
并再次覆盖重复的条目。
对于多个环境variables, .env
文件更方便。 举个例子.env
:
# This is a comment DB_HOST=localhost DB_USER=root DB_PASS=s1mpl3 EMPTY=
用dotenv
很容易使用:
- 用
npm install dotenv --save
。 - 将其包含在代码中(最好在
index.js
的开头),并直接在process.env
命令中使用它:
require('dotenv').load() console.log(process.env.DB_HOST)
不要忘记忽略 VCS中的文件 ,例如使用glob *.env
(如果文件包含凭据)。
要在所有环境都设置的情况下开始testing,请使用dotenv-safe
。 有了它,你有以下文件:
# .env.example, committed to repo SECRET= TOKEN= KEY=
# .env, private SECRET=topsecret TOKEN=
如果在.env
(这里: KEY
)中没有设置.env
的variables,则启动失败。
在Windows 10中更改package.json文件适用于我。
更改:
"scripts":{ "start": "npm run *production*" ........ },