Javascript 如何在OS X中将NODE_ENV设置为生产/开发
用于express.js环境。有什么建议吗?在运行应用程序之前,您可以在控制台中执行此操作Javascript 如何在OS X中将NODE_ENV设置为生产/开发,javascript,node.js,macos,environment-variables,Javascript,Node.js,Macos,Environment Variables,用于express.js环境。有什么建议吗?在运行应用程序之前,您可以在控制台中执行此操作 export NODE_ENV=production 或者,如果您在windows中,您可以尝试以下操作: SET NODE_ENV=production 对于PowerShell: $env:NODE_ENV="production" 或者,您可以这样运行您的应用程序: NODE_ENV=production node app.js ... "scripts": {
export NODE_ENV=production
或者,如果您在windows中,您可以尝试以下操作:
SET NODE_ENV=production
对于PowerShell:
$env:NODE_ENV="production"
或者,您可以这样运行您的应用程序:
NODE_ENV=production node app.js
...
"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"
}
...
您还可以在js文件中进行设置:
process.env.NODE_ENV = 'production';
但我不建议在运行时文件中这样做,因为在服务器中打开VIM并将其更改为生产环境并不容易。您可以在目录中创建一个config.json文件,每次应用程序运行时,它都会从中读取并设置配置。Daniel有一个极好的答案,这是正确部署(设置并忘记)过程的更好方法
heroku config:set NODE_ENV="production"
适用于使用express的用户。
您可以使用grunt express服务器,这也是非常棒的。
在package.json中:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
然后在终端运行:
npm start
导出节点\u ENV=production
是错误的解决方案,它在重新启动后消失。
如果不想再担心该变量,请将其添加到此文件:
/etc/environment
不使用导出语法,只需编写(如果某些内容已经存在,则在新行中):
它在重启后工作。您将不再需要在任何地方重新输入export NODE_ENV=production命令,只需将NODE用于任何您想要的内容—永远,pm2
对于heroku:
heroku config:set NODE_ENV="production"
这实际上是默认值。如果您在windows上。首先在右边的文件夹中打开cmd
set node_env={your env name here}
点击回车键,然后您可以用
node app.js
它将从您的env设置开始这里还没有人提到
.env
?在应用程序根目录中创建一个.env
文件,然后require('dotenv').config()
并读取值。易于更改、易于阅读、跨平台
在OSX上,我建议将
导出节点\u ENV=development
添加到您的~/.bash\u配置文件和/或~/.bashrc
和/或~/.profile
就我个人而言,我将该条目添加到我的~/.bashrc
中,然后让~/.bash_配置文件
~/.profile
导入该文件的内容,因此它在不同环境中是一致的
添加这些内容后,请确保重新启动终端以选择设置。对于Windows Powershell,请使用此命令
$env:NODE_ENV="production" ; node app.js
如果您在应用程序中使用webpack,只需使用DefinePlugin
将其设置在那里即可
因此,在插件
部分,将节点_ENV设置为生产
:
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"',
})
]
为了不必担心您是在Windows、Mac还是Linux上运行脚本,请安装该软件包。然后您可以轻松地使用脚本,如下所示:
"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
为了拥有多个环境,您需要之前的所有答案(NODE_ENV参数并将其导出),但我使用了一种非常简单的方法,无需安装任何东西。在您的package.json中,只需为您需要的每个环境放置一个脚本,如下所示:
NODE_ENV=production node app.js
...
"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\u env
访问当前环境
瞧。Windows CMD->set NODE\u ENV=production
npm start --mode production
npm start --mode development
Windows Powershell->$env:NODE\u env=“production”
MAC->导出节点_ENV=生产
npm start --mode production
npm start --mode development
与
process.env.NODE_env='production'您可以按以下环境运行
NODE_ENV=production npm run start
这是个坏建议。要从应用程序本身可靠地设置process.env.NODE\u env
,这将是一件棘手的事情。最好按照下面的链接正确设置您的环境变量。我喜欢在每次运行应用程序时显式设置NODE\u ENV
,如第二个示例(NODE\u ENV=production NODE app.js
)。这样,如果您忘记将本地NODE_ENV
设置回development
,您就有可能避免将来的头发拉扯。有关简单的跨平台解决方案,请参阅cross-env NODE_env=production
在windows和linux/mac上运行。@GlebNODE_env=production forever app.js
应该可以运行。666票对这个答案投了肯定票,魔鬼成功了!啊,这就是我需要的。you's awesomeNODE_ENV=production
现在是Heroku NODE.js部署中的默认值。Heroku不是唯一要部署的地方。不要开始在package.json中放置一堆脚本,这是一种糟糕的做法,因为它会引入不一致性,并破坏项目中的不变性。我知道很多人创建脚本来运行咕噜声或咕噜声,但没有这样做that@WeDoTDD你在说什么?这些脚本的使用方式与makefile的工作方式类似。使用它作为这个示例或您提到的运行gulp是一个非常合理的用例。对于简单的任务,我现在甚至不使用gulp,而是在脚本中完成所有任务,这样可以更快地完成工作,我让webpack完成以前由gulp完成的工作。@WTF-在package.json中使用脚本是什么意思?这就是脚本部分的要点:放置脚本!它完全有效,无需大口吞咽或咕哝。所有这些都是通过命令和网页包完成的。@WTF使用脚本实际上大大提高了一致性。您可以设置一组标准命令,以便在多个项目中使用,这些项目可能不使用相同的底层构建脚本、库等。您至少可以尝试用事实和示例来支持您的观点。将NODE\u ENV=production
放在package.json中没有多大意义。在开发中运行npm start
将在生产中运行它。您可以像编写生产代码一样编写代码,因为您总是以这种方式运行代码。我认为这样做的一个原因是强制其他模块(如Express)以生产模式运行。如果环境变量从未改变,为什么还要使用它们?重启后它不会消失吗?没有窗户,