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

IT技术 javascript node.js macos environment-variables
2021-01-14 04:05:27

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

6个回答

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

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 并没有错
2021-03-20 04:05:27
有关简单的跨平台解决方案,请参阅npmjs.com/package/cross-envcross-env NODE_ENV=production适用于 windows 和 linux/mac。
2021-03-25 04:05:27
@GlebNODE_ENV=production forever app.js应该可以工作。
2021-04-04 04:05:27
这是一个糟糕的建议。process.env.NODE_ENV从应用程序本身可靠地进行设置将是棘手的最好按照下面的 Daniel 链接正确设置您的环境变量。
2021-04-05 04:05:27
我喜欢NODE_ENV每次运行应用程序时都进行明确设置,如第二个示例 ( NODE_ENV=production node app.js)。这样,如果您忘记将本地设置NODE_ENVdevelopment.
2021-04-08 04:05:27

在 package.json 中:

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

然后在终端运行:

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

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

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

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

export NODE_ENV=production 不好解决,重启后消失。

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

/etc/environment

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

NODE_ENV=production

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

对于 Heroku:

heroku config:set NODE_ENV="production"

这实际上是默认的。

+1 用于谈论如何使其持久化。我想知道有多少人只在当前会话中设置它认为它会持续存在。怎么样重新启动?如果您想立即设置它,是否应该将其放入/etc/environment 运行export NODE_ENV=production
2021-03-17 04:05:27
我个人使用NODE_ENV=production gulp bundle-production-app捆绑生产就绪脚本,在服务器 NODE_ENV 中是在服务器的环境中,而在开发机器中它不存在。在某些机器上,如果它没有设置并且您希望始终设置它,那将是一场噩梦在某些情况下,您希望没有它,因此您不会添加。无论如何,在做 UI 时,我会说清楚它是否处于开发模式,所以你永远不会问它是打开还是关闭。如果 NODE_ENV 是 !== 生产,那么在您看来您处于其他模式,所以根本没有噩梦。一切都清楚,一切都很好。
2021-03-18 04:05:27
维修噩梦。一个您无权访问 /etc 的框呢?
2021-04-03 04:05:27

为了不必担心您是在 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
如果它作为开发依赖项安装,它将如何工作?在生产中,npm 包应该使用 --production 标志安装,它不会安装 cross-env,因为它是一个开发依赖项。
2021-03-30 04:05:27