用于 express.js 环境。有什么建议么?
在运行您的应用程序之前,您可以在控制台中执行此操作,
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 文件,并且每次您的应用程序运行时,它都会从中读取并设置配置。
在 package.json 中:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
然后在终端中运行:
npm start
NODE_ENV=production
放入 package.json 没有多大意义。在开发中运行 npm start
将在生产中运行它。您可以像编写代码一样编写代码,因为您总是以这种方式运行它。我看到这样做的一个原因是强制其他模块(例如 Express)在生产模式下运行。如果环境变量从不改变,为什么还要使用它们呢?
这里还没有人提到.env
?在您的应用根目录中创建一个 .env
文件,然后创建 require('dotenv').config()
并读取值。易改、易读、跨平台。
https://www.npmjs.com/package/dotenv
.env
文件中设置 "mode": "production"
有效。
export NODE_ENV=production
是不好的解决方案,重启后会消失。
如果您不想再担心该变量 - 将其添加到此文件中:
/etc/environment
不要使用导出语法,只需编写(如果某些内容已经存在,则在新行中):
NODE_ENV=production
它在重新启动后工作。您不必再在任何地方重新输入 export NODE_ENV=production 命令,只需将 node 与您想要的任何东西一起使用 - 永远,pm2 ...
对于heroku:
heroku config:set NODE_ENV="production"
这实际上是默认的。
NODE_ENV=production gulp bundle-production-app
来捆绑生产就绪脚本,服务器 NODE_ENV 在服务器环境中,而在开发机器中它不存在。在某些机器中,如果它没有设置并且您希望它设置总是,那将是一场噩梦。在某些情况下,您希望没有它,因此您不添加。无论如何,在做 UI 时,我会明确它是否处于开发模式,所以你永远不会怀疑它是打开还是关闭。如果 NODE_ENV 是 !== 生产,那么在你面前你就处于其他模式,所以根本没有噩梦。一切都清楚,一切都好。
/etc/environment
并运行export NODE_ENV=production
?
为了不必担心您是在 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
"tsc && NODE_ENV=production nodemon ..."
- 工作。 "NODE_ENV=production tsc && nodemon ..."
- 不工作
heroku config:set NODE_ENV="production"
NODE_ENV=production
现在是 Heroku node.js 部署中的默认值。
对于 Windows Powershell 使用此命令
$env:NODE_ENV="production" ; node app.js
在 OSX 上,我建议将 export NODE_ENV=development
添加到您的 ~/.bash_profile
和/或 ~/.bashrc
和/或 ~/.profile
。
我个人将该条目添加到我的 ~/.bashrc
中,然后让 ~/.bash_profile
~/.profile
导入该文件的内容,因此它在不同环境中是一致的。
完成这些添加后,请务必重新启动终端以获取设置。
为了拥有多个环境,您需要之前的所有答案(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
访问当前环境。
瞧。
Windows CMD -> set NODE_ENV=production
Windows Powershell -> $env:NODE_ENV="production"
MAC-> export NODE_ENV=production
如果你在窗户上。在正确的文件夹中打开你的 cmd 然后首先
set node_env={your env name here}
点击回车然后你可以启动你的节点
node app.js
它将从您的环境设置开始
如果您在应用程序中使用 webpack,您可以使用 DefinePlugin
...
因此,在您的 plugin
部分中,将 NODE_ENV 设置为 production
:
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"',
})
]
npm start --mode production
npm start --mode development
使用 process.env.NODE_ENV = 'production'
Daniel 有一个绝妙的答案,这是正确部署(设置并忘记)过程的更好方法。
对于那些使用快递的人。您可以使用 grunt-express-server,这也很棒。 https://www.npmjs.org/package/grunt-express-server
您可以按如下环境运行,
NODE_ENV=production npm run start
我没有看到任何地方明确提到的 Docker 解决方案。希望这可以帮助某人:
在 Dockerfile 中:
FROM node:16.11-alpine3.14 AS production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
...
process.env.NODE_ENV
会很棘手。最好按照下面的 Daniel 链接正确设置您的环境变量。NODE_ENV
,如第二个示例 (NODE_ENV=production node app.js
)。这样一来,如果您忘记将本地NODE_ENV
设置回development
,您就有可能免于将来的麻烦。cross-env NODE_ENV=production
适用于 windows 和 linux/mac。NODE_ENV=production forever app.js
应该可以工作。