Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在OS X中将NODE_ENV设置为生产/开发_Javascript_Node.js_Macos_Environment Variables - Fatal编程技术网

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

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": {

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

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

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上运行。@Gleb
NODE_env=production forever app.js
应该可以运行。666票对这个答案投了肯定票,魔鬼成功了!啊,这就是我需要的。you's awesome
NODE_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)以生产模式运行。如果环境变量从未改变,为什么还要使用它们?重启后它不会消失吗?没有窗户,