如何在 Windows 上设置 NODE_ENV=production?

Posted

技术标签:

【中文标题】如何在 Windows 上设置 NODE_ENV=production?【英文标题】:How can I set NODE_ENV=production on Windows? 【发布时间】:2012-03-04 05:22:21 【问题描述】:

在 Ubuntu 中这很简单;我可以使用以下方式运行应用程序:

$ NODE_ENV=production node myapp/app.js

但是,这在 Windows 上不起作用。有没有可以设置属性的配置文件?

【问题讨论】:

对于多平台解决方案,您可以找到答案***.com/a/57509175/11127383 这能回答你的问题吗? How to set NODE_ENV to production/development in OS X 【参考方案1】:

当前版本的 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" @ShuruiLiu 该命令不会输出任何内容,但您可以输入echo %NODE_ENV% 来查看其当前值。 注意:“set NODE_ENV=production &&”在变量后面添加一个空格。我需要“set NODE_ENV=production&&”来避免破坏像 Ghost 这样的节点应用程序的额外空间。 @Amberlamps 这不是一个好的解决方案,因为 NODE_ENV 只是为所有机器硬编码;真正的目标是使用 env 变量通过机器更改 env 或在命令行中传递值,而不是在 package.json 文件中硬编码。 如果您的团队在混合操作系统上工作,我认为使用cross-env 是解决此问题的更好方法。 @MoOx 的回答将是我对这个问题的回答。【参考方案2】:

在 PowerShell 中:

$env:NODE_ENV="production"

【讨论】:

附注:不要忘记 $ 和引号 ;) set NODE_ENV=production 在 powershell 中对我不起作用,但确实如此。谢谢! 努力让它在 Visual Studio Code 中的 Powershell 中工作。以为我会在这里留下解决方案。我试图运行“Gulp”命令,同时确保设置了正确的 env 值。这就是为我工作的结果:$env:NODE_ENV="development"; gulp runMytask。注意里面的分号。 gulp 文件可以在 process.env.NODE_ENV 上使用条件逻辑。除非你设置它,否则它将是未定义的。 只有这个解决方案适用于 Windows 10 和 webpack 3.8.1 这很完美。但是,如果从 package.json 运行需要设置 env 的 npm 命令,cross-env NODE_ENV=production 选项确实是一个更好的解决方案。使用 $env:NODE_ENV 选项后,将环境设置留在 dev/prod 上太容易了【参考方案3】:

我在 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,把它放在一起。 你关于重启VS代码的评论真的很有用!【参考方案4】:

如果您可以在调用在 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"
    
    

【讨论】:

DEF 想知道如何让它以这种方式工作。 为我工作。必须通过“set NODE_ENV=production&&nodemon server.js”删除空格 希望我在尝试上述答案之前已经阅读了这么多内容,这样可以节省我一些时间。 :\ 在一个模糊相关的注释中,我发现 && 在将多个命令链接在一起时在 Windows 上没有按预期工作。如果有疑问,请尝试使用 |而是 这在 cmd 和 power-shell 的 windows 10 64bit 机器上对我有用【参考方案5】:

在 PowerShell 中运行您的应用程序(因为不允许使用 &&):

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

请注意,服务器正在执行的操作的文本输出被抑制,我不确定这是否可以修复。 (扩展@jsalonen 的回答。)

【讨论】:

它对我不起作用:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"【参考方案6】:

你可以使用

npm run env NODE_ENV=production

这可能是最好的方法,因为它在 Windows 和 Unix 上都兼容。

来自npm run-script documentation:

env 脚本是一个特殊的内置命令,可用于列出脚本在运行时可用的环境变量。如果在您的包中定义了“env”命令,它将优先于内置。

【讨论】:

我们如何使用变量集执行另一个命令?这似乎不起作用: npm run env NODE_ENV=production && echo $NODE_ENV.可能它们在两个不同的 shell 中执行? 据我所知,这根本行不通。从文档本身来看,它只是列出环境变量,而不是设置它们。 对我不起作用。它列出 vars,显示您指定的 var,但在运行时,var 在 process.env.YOUR_VAR 中不正常... @JonasKello 你会使用这个: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。【参考方案7】:

如果您使用的是带有 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 之前如何设置变量。

【讨论】:

【参考方案8】:

我刚刚发现了一个不错的 Node.js 包,它可以帮助使用独特的语法跨平台定义环境变量。

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

它允许你写这样的东西:

cross-env NODE_ENV=production my-command

这很方便!不再有 Windows 或 Unix 特定的命令!

【讨论】:

虽然第一个答案是正确的。我觉得这个答案最靠谱,应该使用 这是一个很好的解决方案! 简单而完美地解决了我的问题。我只能在 Linux 上构建。这解决了 Linux 和 Windows。 这个答案值得更多的爱,应该是被接受的:) 这对我来说也是最好的答案【参考方案9】:

只是澄清一下,对于其他可能会拔头发的人......

如果您在 Windows 上使用 git bashset node_env=production&amp;&amp; node whatever.js 似乎不起作用。相反,请使用本机 cmd。然后,使用set node_env=production&amp;&amp; node whatever.js按预期工作。

我的用例:

我在 Windows 上开发是因为我的工作流程快了很多,但我需要确保我的应用程序的开发专用中间件不会在生产环境中触发。

【讨论】:

【参考方案10】:

对于多个环境变量,一个.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 中的变量,您的程序将快速失败。

【讨论】:

.env 文件仅便于保密,并且在将新人员分配到项目或对其应用更改时进行设置时增加了额外的复杂步骤。 @coiso 没有一个通用的、常见的地方,你把 许多 环境变量放在哪里?无论是在脚本文件中还是在依赖于 IDE 的设置中,您都更受特定工具的约束。我认为,这使得整合新团队成员变得更加困难。【参考方案11】:

这里是非命令行方法:

在 Windows 7 或 10 中,在开始菜单搜索框中键入 environment,然后选择编辑系统环境变量。

或者,导航到控制面板\系统和安全\系统,然后单击高级系统设置

这应该会打开系统属性对话框并选择高级选项卡。在底部,您将看到一个 Environment Variables... 按钮。点击这里。

将打开环境变量对话框。

在底部的系统变量下,选择新建...这将打开新建系统变量对话框。

输入变量名和值,点击确定。

您需要关闭所有 cmd 提示并重新启动服务器,以便新变量可用于 process.env。如果仍然没有出现,请重新启动您的机器。

【讨论】:

谢谢!我已经完成了所有这些,但直到我重新启动服务器后它才起作用。 问题——next.js 能读取这些windows系统环境变量吗?我们正在使用 CI/CD 管道部署到 Azure,并希望利用 Azure Web 应用程序中的配置设置,您的代码(至少在 .NET 中)可以像读取 Windows 系统环境变量一样读取,无需任何代码更改。希望这是有道理的:|【参考方案12】:

这不会设置变量,但在许多情况下它很有用。我不建议将它用于生产,但如果你在玩 npm 应该没问题。

npm install --production

【讨论】:

【参考方案13】:

如果您使用的是 GITBASH 终端 "set NODE_ENV=production" 行不通,你能做的就是输入 "导出NODE_ENV=production"

【讨论】:

我收到一个错误:'export' is not recognized as an internal or external command, operable program or batch file 尝试使用 'set' 而不是 'export'【参考方案14】:

powershell类型中的第一个

$env:NODE_ENV="production"

然后输入

node fileName.js

它将完美地显示所有输出。

【讨论】:

【参考方案15】:

我编写了一个模块win-node-env,您可以使用它像在 *nix 中一样运行您的命令。

NODE_ENV=production node myapp/app.js

它通过创建一个 NODE_ENV.cmd 来设置 NODE_ENV 环境变量并使用命令的其余部分及其参数生成一个子进程来工作。

只需安装它(全局),然后运行你的 npm 脚本命令,它应该会自动让它们工作。

npm install -g win-node-env

【讨论】:

正是我想要的!使用 npm 脚本运行,它甚至可以与 jest 等其他节点 cli 工具一起使用。所以“set NODE_ENV=debug & cls & jest...”变成了“cls & NODE_ENV=debug jest”【参考方案16】:

我使用 npm 脚本运行不带“&&”的 gulp 任务

NODE_ENV=testcases npm run seed-db

【讨论】:

【参考方案17】:

如果 NODE_ENV 或任何其他环境变量没有提供正确的值,请重新启动 VS 代码。这应该在重新启动后工作。

【讨论】:

【参考方案18】:

好像


   "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&amp;&amp; node ./index.js"。最后,您要在该终端上为该特定会话设置 envar。所以,真的,你的回声或更合适的“ps aux”操作是无效的。您只需注销“index.js”或“app.js”中的设置,无论您输入的是什么:console.log(process.env.NODE_ENV);。无论如何,我希望这不仅仅有助于投票。 这不是一个答案,而是一个问题。【参考方案19】:

如果你使用的是 vs code 终端,你必须使用这个命令

$env:NODE_ENV="production"

【讨论】:

【参考方案20】:

对于 Windows

设置 NODE_ENV=development && react-scripts start

适用于 Ubuntu、Linux、macOS

NODE_ENV=开发反应脚本开始

【讨论】:

欢迎来到 ***!请编辑您的答案以解释此代码的作用以及它如何回答问题,以便对有类似问题的人有用。见:How do I write a good answer?【参考方案21】:
set NODE_ENV=production & node server.js 

【讨论】:

这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review【参考方案22】:

最后,我能看到的最好的方法如下。

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

这将确保我们为程序获得正确的环境设置。用你想要的下一个命令替换 react-native-start。

【讨论】:

以上是关于如何在 Windows 上设置 NODE_ENV=production?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows cmd 中使用 $NODE_ENV 和 if 条件

Express 设置process.env.NODE_ENV变量

无法让 NODE_ENV 在开班时粘在我的 MEAN 堆栈上

Nodejs随学随记(杂)

Heroku NODE_ENV 为我设置为开发而不是生产

设置node_env的环境变量