ChatGPT解决这个技术问题 Extra ChatGPT

如何在 OS X 中将 NODE_ENV 设置为生产/开发

用于 express.js 环境。有什么建议么?

对于多平台解决方案,您可以找到答案 stackoverflow.com/a/57509175/11127383

P
Petro Franko

在运行您的应用程序之前,您可以在控制台中执行此操作,

export NODE_ENV=production

或者,如果你在 Windows 中,你可以试试这个:

SET NODE_ENV=production

对于 PowerShell:

$env:NODE_ENV="production"

或者您可以像这样运行您的应用程序:

NODE_ENV=production node app.js

您也可以在您的 js 文件中设置它:

process.env.NODE_ENV = 'production';

但我不建议在你的运行时文件中这样做,因为在你的服务器中打开 VIM 并将其更改为生产并不容易。您可以在您的目录中创建一个 config.json 文件,并且每次您的应用程序运行时,它都会从中读取并设置配置。


这是个坏建议。从应用程序本身可靠地设置 process.env.NODE_ENV 会很棘手。最好按照下面的 Daniel 链接正确设置您的环境变量。
我喜欢在每次运行应用程序时明确设置 NODE_ENV,如第二个示例 (NODE_ENV=production node app.js)。这样一来,如果您忘记将本地 NODE_ENV 设置回 development,您就有可能免于将来的麻烦。
有关简单的跨平台解决方案,请参阅 npmjs.com/package/cross-envcross-env NODE_ENV=production 适用于 windows 和 linux/mac。
@Gleb NODE_ENV=production forever app.js 应该可以工作。
如果您使用的是设置文件并且知道自己在做什么,那么使用 process.env.NODE_ENV 没有任何问题
w
wangchi

在 package.json 中:

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

然后在终端中运行:

npm start

@WeDoTDD 你在说什么?这些脚本的使用方式与 makefile 的工作方式类似。使用它作为这个例子或者你提到的运行 gulp 是一个完全合理的用例。对于简单的任务,我现在什至不使用 gulp,而是在脚本中完成所有工作,让工作变得更快,我让 webpack 完成过去由 gulp 完成的工作。
因为您最终会在所有项目中使用不一致的脚本,这是维护的噩梦
@WTF - 在 package.json 中使用脚本是什么意思?这就是 scripts: 部分的重点,用于放置脚本!它完全有效并且消除了对 gulp 或 grunt 的需要。全部通过命令和 webpack 完成。
@WTF 使用脚本实际上大大提高了一致性。您可以设置一组标准命令以在多个项目中使用,这些命令可能不使用相同的底层构建脚本、库等。您至少可以尝试用事实和示例来支持您的观点。
NODE_ENV=production 放入 package.json 没有多大意义。在开发中运行 npm start 将在生产中运行它。您可以像编写代码一样编写代码,因为您总是以这种方式运行它。我看到这样做的一个原因是强制其他模块(例如 Express)在生产模式下运行。如果环境变量从不改变,为什么还要使用它们呢?
t
theflowersoftime

这里还没有人提到.env?在您的应用根目录中创建一个 .env 文件,然后创建 require('dotenv').config() 并读取值。易改、易读、跨平台。

https://www.npmjs.com/package/dotenv


奇怪的是没有人提到它,我认为最好的解决方案。将环境名称与其余变量放在同一个文件中。
在 .env 文件中设置 NODE_ENV 将不起作用。看到这个:github.com/motdotla/dotenv/issues/328
对我来说,在 .env 文件中设置 "mode": "production" 有效。
还将 .env 添加到 .gitignore ,以便在将代码推送到生产环境时不会覆盖 .env。即在环境中推送代码时,.env 应该保持不变。
L
Lukas Liesis

export NODE_ENV=production 是不好的解决方案,重启后会消失。

如果您不想再担心该变量 - 将其添加到此文件中:

/etc/environment

不要使用导出语法,只需编写(如果某些内容已经存在,则在新行中):

NODE_ENV=production

它在重新启动后工作。您不必再在任何地方重新输入 export NODE_ENV=production 命令,只需将 node 与您想要的任何东西一起使用 - 永远,pm2 ...

对于heroku:

heroku config:set NODE_ENV="production"

这实际上是默认的。


维护噩梦。如果您没有/etc 权限的盒子呢?
我个人使用 NODE_ENV=production gulp bundle-production-app 来捆绑生产就绪脚本,服务器 NODE_ENV 在服务器环境中,而在开发机器中它不存在。在某些机器中,如果它没有设置并且您希望它设置总是,那将是一场噩梦。在某些情况下,您希望没有它,因此您不添加。无论如何,在做 UI 时,我会明确它是否处于开发模式,所以你永远不会怀疑它是打开还是关闭。如果 NODE_ENV 是 !== 生产,那么在你面前你就处于其他模式,所以根本没有噩梦。一切都清楚,一切都好。
+1 谈论如何让它持续存在。我想知道有多少人只在当前会话中设置它,认为它会持续存在。 重启之前呢?如果要立即设置,是否应将其放入/etc/environment运行export NODE_ENV=production
i
icl7126

为了不必担心您是在 Windows、Mac 还是 Linux 上运行脚本,请安装 cross-env 包。然后您可以轻松地使用您的脚本,如下所示:

"scripts": {
    "start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
    "start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}

给这个包的开发者的大量道具。

npm install --save-dev cross-env

如果它作为开发依赖项安装,它将如何工作?在生产环境中,应使用 --production 标志安装 npm 包,该标志不会安装跨环境,因为它是开发依赖项。
这个答案对我有帮助,但对每个人都没有帮助)"tsc && NODE_ENV=production nodemon ..." - 工作"NODE_ENV=production tsc && nodemon ..." - 不工作
d
david_adler
heroku config:set NODE_ENV="production"

啊这就是我需要的。你真棒
NODE_ENV=production 现在是 Heroku node.js 部署中的默认值。
heroku 不是唯一部署的地方
H
Harikrishnan

对于 Windows Powershell 使用此命令

$env:NODE_ENV="production" ; node app.js

V
Vincil Bishop

在 OSX 上,我建议将 export NODE_ENV=development 添加到您的 ~/.bash_profile 和/或 ~/.bashrc 和/或 ~/.profile

我个人将该条目添加到我的 ~/.bashrc 中,然后让 ~/.bash_profile ~/.profile 导入该文件的内容,因此它在不同环境中是一致的。

完成这些添加后,请务必重新启动终端以获取设置。


r
rmpt

为了拥有多个环境,您需要之前的所有答案(NODE_ENV 参数并导出它),但我使用了一种非常简单的方法,无需安装任何东西。在您的 package.json 中,只需为您需要的每个环境添加一个脚本,如下所示:

...
"scripts": {
    "start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
    "start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
  }
 ...

然后,要启动应用程序而不是使用 npm start,请使用 npm run script-prod

在代码中,您可以使用 process.env.NODE_ENV 访问当前环境。

瞧。


NODE_ENV 应该是“开发”或“生产”,以上内容不被 3rd 方代码识别(尽管您可能正在查看 process.env )
这是跨平台吗?
J
Janith Udara

Windows CMD -> set NODE_ENV=production

Windows Powershell -> $env:NODE_ENV="production"

MAC-> export NODE_ENV=production


g
garenyondem

如果你在窗户上。在正确的文件夹中打开你的 cmd 然后首先

set node_env={your env name here}

点击回车然后你可以启动你的节点

node app.js

它将从您的环境设置开始


重启后不会消失吗?没有窗户,不能自己试试。
如果您询问 node restart no,它不会消失,直到您完全关闭命令提示符。但是如果 Windows Server 重新启动,它就会消失。
谈论操作系统重启。这就是为什么我最好找到另一种方法来停止每次安装 Windows 更新,或者只是任何重新启动,一次又一次地思考这个问题。
A
Alireza

如果您在应用程序中使用 webpack,您可以使用 DefinePlugin...

因此,在您的 plugin 部分中,将 NODE_ENV 设置为 production

plugins: [
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': '"production"',
  })
]

T
Tính Ngô Quang
npm start --mode production
npm start --mode development

使用 process.env.NODE_ENV = 'production'


J
Jesse

Daniel 有一个绝妙的答案,这是正确部署(设置并忘记)过程的更好方法。

对于那些使用快递的人。您可以使用 grunt-express-server,这也很棒。 https://www.npmjs.org/package/grunt-express-server


F
Furkan Öztürk

您可以按如下环境运行,

NODE_ENV=production npm run start

r
rinogo

我没有看到任何地方明确提到的 Docker 解决方案。希望这可以帮助某人:

在 Dockerfile 中:

FROM node:16.11-alpine3.14 AS production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
...