Answers:
Windows的当前版本使用Powershell作为默认外壳,因此请使用:
$env:NODE_ENV="production"
根据下面的@jsalonen的答案。如果您使用的是CMD(不再维护),请使用
set NODE_ENV=production
这应该在您打算运行Node.js应用程序的命令提示符下执行。
上一行将在执行命令的命令提示符处设置环境变量NODE_ENV。
要全局设置环境变量,以使它们仅在单个命令提示符后仍然存在,您可以在“控制面板”的“系统”中找到该工具(或在开始菜单的搜索框中键入“环境”)。
set NODE_ENV=production && node app
。更方便地配置package.json
相应的:"scripts": { "start": "set NODE_ENV=production && node app" }
。
echo %NODE_ENV%
以检查其当前值。
cross-env
如果您的团队在混合操作系统上工作,使用是更好的解决方案。@MoOx的答案将是我对这个问题的答案。
我刚刚找到了一个不错的Node.js程序包,它可以使用跨平台的独特语法对定义环境变量有很大帮助。
https://www.npmjs.com/package/cross-env
它允许您编写如下内容:
cross-env NODE_ENV=production my-command
哪个很方便!不再有Windows或Unix专用命令!
在PowerShell中:
$env:NODE_ENV="production"
set NODE_ENV=production
在Powershell中对我不起作用,但确实如此。谢谢!
$env:NODE_ENV="development"; gulp runMytask
。注意那里的分号。gulp文件可以在process.env.NODE_ENV上使用条件逻辑。除非您进行设置,否则它将是未定义的。
cross-env NODE_ENV=production
如果从package.json运行要求设置环境的npm命令,则该选项确实是更好的解决方案。使用$ env:NODE_ENV选项后,在开发者/产品上保留环境设置太容易了
如果可以在Windows上启动Node.js的调用所在的行中设置参数,那将是理想的选择。仔细查看以下内容,并严格按照说明运行它:
您有以下两种选择:
在命令行中:
set NODE_ENV=production&&npm start
要么
set NODE_ENV=production&&node index.js
在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"
}
您可以使用
npm run env NODE_ENV=production
这可能是最好的方法,因为它在Windows和Unix上都兼容。
env脚本是一个特殊的内置命令,可用于列出运行时脚本可使用的环境变量。如果您的软件包中定义了“ env”命令,它将优先于内置命令。
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
该--
是强制性的。替换node -e 'console.log(process.env.NODE_ENV)'
为所需的任何命令。
npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
并且...什么都没有发生。我不确定该方法是否可以在Windows上使用。
如果将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之前如何设置变量。
我编写了一个模块win-node-env,您可以使用该模块像在* nix中一样运行命令。
NODE_ENV=production node myapp/app.js
它通过创建一个NODE_ENV.cmd
设置NODE_ENV
环境变量并使用其余命令及其arg生成子进程的子进程来工作。
只需安装(全局),然后运行您的npm脚本命令,它将自动使它们工作。
npm install -g win-node-env
我在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,快进窗户,把它弄在一起。
这是非命令行方法:
在Windows 7或10中,在开始菜单搜索框中键入环境,然后选择编辑系统环境变量。
或者,导航到控制面板\系统和安全性\系统,然后单击高级系统设置。
这将打开“系统属性”对话框,并选择“高级”选项卡。在底部,您将看到一个环境变量...按钮。点击这个。
将打开“环境变量”对话框。
在底部的“系统变量”下,选择“新建...”,这将打开“新系统变量”对话框。
输入变量名称和值,然后单击确定。
您将需要关闭所有cmd提示符并重新启动服务器,以使新变量可用于process.env。如果仍然没有显示,请重新启动计算机。
要在PowerShell中运行您的应用程序(因为&&
不允许这样做):
($env:NODE_ENV="production") -and (node myapp/app.js)
请注意,服务器正在执行的操作的文本输出被抑制,并且我不确定这是否可以解决。(扩展@jsalonen的答案。)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.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
命令直接一起使用:require('dotenv').load()
console.log(process.env.DB_HOST)
不要忘记忽略.env
VCS中的文件。
如果未将变量“ defined”定义.env.example
为环境变量或in ,则程序将很快失败.env
。
我使用npm脚本运行不含“ &&”的gulp任务
NODE_ENV = testcases npm运行seed-db
如果NODE_ENV或任何其他环境变量未提供正确的值,请重新启动VS代码。重新启动后应该可以使用。