在Ubuntu中它非常简单;我可以运行应用程序:
$ NODE_ENV=production node myapp/app.js
但是,这在Windows上不起作用。是否有配置文件,我可以设置属性?
当前版本的Windows使用Powershell作为默认shell,因此使用:
$env:NODE_ENV="production"
Per @ jsalonen的回答如下。如果您使用的是CMD(不再维护),请使用
set NODE_ENV=production
这应该在您打算运行Node.js应用程序的命令提示符中执行。
上面的行将为执行命令的命令提示符设置环境变量NODE_ENV。
要全局设置环境变量,使它们超出单个命令提示符,您可以从“控制面板”中的“系统”中找到该工具(或者在“开始”菜单的搜索框中键入“environment”)。
这是非命令行方法:
在Windows 7或10中,在开始菜单搜索框中键入environment,然后选择编辑系统环境变量。
或者,导航到“控制面板\系统和安全\系统”,然后单击“高级系统设置”
这应打开“系统属性”对话框,并选中“高级”选项卡。在底部,您将看到Environment Variables ...按钮。点击这个。
环境变量对话框将打开。
在底部的System variables下,选择New ...这将打开New System Variable对话框。
输入变量名称和值,然后单击“确定”。
您需要关闭所有cmd提示并重新启动服务器,以使新变量可用于process.env。如果仍未显示,请重新启动计算机。
要在PowerShell中运行您的应用程序(因为不允许使用&&
):
($env:NODE_ENV="production") -and (node myapp/app.js)
请注意,服务器正在执行的操作的文本输出被抑制,我不确定这是否可以修复。 (扩展@ jsalonen的答案。)
首先是powershell类型
$env:NODE_ENV="production"
然后键入
node fileName.js
它将完美地显示所有输出。
对于多个环境变量,.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
一起使用:
npm install --save dotenv-safe
安装。index.js
的开头)并直接与process.env
command一起使用:require('dotenv').load()
console.log(process.env.DB_HOST)
别忘了ignore the .env
file in your VCS。
如果.env.example
中的“已定义”变量未设置为环境变量或.env
,则程序会快速失败。
这不会设置变量,但在许多情况下它很有用。我不建议将它用于制作,但如果你正在使用npm,它应该没问题。
npm install --production
如果您使用GIT BASH终端qazxsw poi将无法正常工作,您可以输入“export qazxsw poi”
我使用npm脚本运行没有“&&”的gulp任务
NODE_ENV =测试用例npm运行seed-db
我刚刚发现了一个很好的Node.js包,可以使用独特的语法跨平台来帮助定义环境变量。
https://www.npmjs.com/package/cross-env
它允许你写这样的东西:
cross-env NODE_ENV=production my-command
这很方便!没有Windows或Unix特定的命令!
在PowerShell中:
$env:NODE_ENV="production"
如果您可以在与Windows上启动Node.js的调用相同的行上设置参数,那将是理想的选择。请仔细查看以下内容,并按照说明运行:
你有这两个选择:
set NODE_ENV=production&&npm start
要么
set NODE_ENV=production&&node index.js
//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 documentation:
env脚本是一个特殊的内置命令,可用于列出在运行时脚本可用的环境变量。如果在包中定义了“env”命令,它将优先于内置命令。
如果将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>
然后,'Debug / Release'下拉菜单将控制在启动Node.js之前如何设置变量。
我写了一个模块win-node-env,您可以像在* nix中一样运行命令。
NODE_ENV=production node myapp/app.js
它的工作原理是创建一个NODE_ENV.cmd
来设置NODE_ENV
环境变量,并使用命令的其余部分及其args生成子进程。
只需安装它(全局),并运行你的npm脚本命令,它应该自动使它们工作。
npm install -g win-node-env
我在Visual Studio 2013中使用64位Windows 7上的Node.js的经验是您需要使用的
setx NODE_ENV development
从一个cmd窗口。并且您必须重新启动Visual Studio才能识别新值。
设置语法仅持续设置它的cmd窗口的持续时间。
在Node.js中进行简单测试:
console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);
使用set时返回'undefined',如果使用setx并重新启动Visual Studio,它将返回'development'。
只是为了澄清,并为其他任何可能拔毛的人......
如果你在Windows上使用git bash,set node_env=production&& node whatever.js
似乎不起作用。相反,使用本机cmd。然后,按预期使用set node_env=production&& node whatever.js
works。
我的用例:
我在Windows上开发是因为我的工作流程要快得多,但我需要确保我的应用程序的特定于开发的中间件没有在生产环境中启动。