【发布时间】:2012-03-04 05:22:21
【问题描述】:
在 Ubuntu 中这很简单;我可以使用以下方式运行应用程序:
$ NODE_ENV=production node myapp/app.js
但是,这在 Windows 上不起作用。有没有可以设置属性的配置文件?
【问题讨论】:
-
对于多平台解决方案,您可以找到答案stackoverflow.com/a/57509175/11127383
在 Ubuntu 中这很简单;我可以使用以下方式运行应用程序:
$ NODE_ENV=production node myapp/app.js
但是,这在 Windows 上不起作用。有没有可以设置属性的配置文件?
【问题讨论】:
当前版本的 Windows 使用 Powershell 作为默认 shell,因此请使用:
$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 的回答将是我对这个问题的回答。
在 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 选项确实是一个更好的解决方案。使用 $env:NODE_ENV 选项后,将环境设置留在 dev/prod 上太容易了
我在 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 时返回 'undefined',使用 setx 并重新启动 Visual Studio 时返回 'development'。
【讨论】:
cmd -- 不是powershell?呃,来吧,windows,把它放在一起。
如果您可以在调用在 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"
}
【讨论】:
在 PowerShell 中运行您的应用程序(因为不允许使用 &&):
($env:NODE_ENV="production") -and (node myapp/app.js)
请注意,服务器正在执行的操作的文本输出被抑制,我不确定这是否可以修复。 (扩展@jsalonen 的回答。)
【讨论】:
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
你可以使用
npm run env NODE_ENV=production
这可能是最好的方法,因为它在 Windows 和 Unix 上都兼容。
来自npm run-script documentation:
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。
如果您使用的是带有 NTVS 的 Visual Studio,您可以在项目属性页面上设置环境变量:
如您所见,“配置”和“平台”下拉菜单已被禁用(我没有深入了解这是为什么),但如果您按如下方式编辑您的 .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 之前如何设置变量。
【讨论】:
我刚刚发现了一个不错的 Node.js 包,它可以帮助使用独特的语法跨平台定义环境变量。
https://www.npmjs.com/package/cross-env
它允许你写这样的东西:
cross-env NODE_ENV=production my-command
这很方便!不再有 Windows 或 Unix 特定的命令!
【讨论】:
只是澄清一下,对于其他可能会拔头发的人......
如果您在 Windows 上使用 git bash,set node_env=production&& node whatever.js 似乎不起作用。相反,请使用本机 cmd。然后,使用set node_env=production&& node whatever.js按预期工作。
我的用例:
我在 Windows 上开发是因为我的工作流程快了很多,但我需要确保我的应用程序的开发专用中间件不会在生产环境中触发。
【讨论】:
对于多个环境变量,一个.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-dev 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
【讨论】:
如果您使用的是 GITBASH 终端
"set NODE_ENV=production"
行不通,你能做的就是输入
"导出NODE_ENV=production"
【讨论】:
'export' is not recognized as an internal or external command, operable program or batch file
powershell类型中的第一个
$env:NODE_ENV="production"
然后输入
node fileName.js
它将完美地显示所有输出。
【讨论】:
我编写了一个模块win-node-env,您可以使用它像在 *nix 中一样运行您的命令。
NODE_ENV=production node myapp/app.js
它通过创建一个 NODE_ENV.cmd 来设置 NODE_ENV 环境变量并使用命令的其余部分及其参数生成一个子进程来工作。
只需安装它(全局),然后运行你的 npm 脚本命令,它应该会自动让它们工作。
npm install -g win-node-env
【讨论】:
我使用 npm 脚本运行不带“&&”的 gulp 任务
NODE_ENV=testcases npm run seed-db
【讨论】:
如果 NODE_ENV 或任何其他环境变量没有提供正确的值,请重新启动 VS 代码。这应该在重新启动后工作。
【讨论】:
好像
{
"start_windows": "set NODE_ENV=test"
}
不适合我。我目前正在我的 Windows 机器上尝试这个。当我击中时:
npm run start_windows
它会在控制台上执行而不会出错,但是当我尝试回显时
echo %NODE_ENV%
没有任何结果,这意味着它不存在并且根本没有设置......
【讨论】:
ps aux | grep NODE_ENV 但是,您也没有使用“start_windows”脚本运行。其他答案指出您需要执行以下操作:"set NODE_ENV=test&& node ./index.js"。最后,您要在该终端上为该特定会话设置 envar。所以,真的,你的回声或更合适的“ps aux”操作是无效的。您只需注销“index.js”或“app.js”中的设置,无论您输入的是什么:console.log(process.env.NODE_ENV);。无论如何,我希望这不仅仅有助于投票。
如果你使用的是 vs code 终端,你必须使用这个命令
$env:NODE_ENV="production"
【讨论】:
对于 Windows
设置 NODE_ENV=development && react-scripts start
适用于 Ubuntu、Linux、macOS
NODE_ENV=开发反应脚本开始
【讨论】:
set NODE_ENV=production & node server.js
【讨论】:
最后,我能看到的最好的方法如下。
"set-env-qa": "npm run env APP_ENV=qa",
"start:qa": "npm run set-env-qa && react-native start",
这将确保我们为程序获得正确的环境设置。用你想要的下一个命令替换 react-native-start。
【讨论】: