Javascript 为什么process.env.NODE_env未定义?
我正在努力学习关于NodeJS的教程。我不认为我遗漏了什么,但每当我调用Javascript 为什么process.env.NODE_env未定义?,javascript,node.js,Javascript,Node.js,我正在努力学习关于NodeJS的教程。我不认为我遗漏了什么,但每当我调用process.env.NODE\u env时,我得到的唯一值就是undefined。根据我的研究,默认值应该是development。这个值是如何动态设置的?它最初设置在哪里?process.env是对您的环境的引用,因此您必须在那里设置变量 要设置一个值,请执行以下操作: 在OS X或上: 您也可以通过代码进行设置,例如: process.env.NODE_env='test'在UBUNTU中使用: $export NO
process.env.NODE\u env
时,我得到的唯一值就是undefined
。根据我的研究,默认值应该是development
。这个值是如何动态设置的?它最初设置在哪里?process.env是对您的环境的引用,因此您必须在那里设置变量
要设置一个值,请执行以下操作:
在OS X或上:
您也可以通过代码进行设置,例如:
process.env.NODE_env='test'代码>在UBUNTU中使用:
$export NODE_ENV=test对于使用*nix(Linux、OS X等)的用户,没有理由通过第二个导出命令执行此操作,您可以将其作为调用命令的一部分进行链接:
NODE_ENV=development node server.js
更简单,不是吗?:) 在Windows上使用节点时遇到此问题
我们没有要求任何试图运行应用程序的人设置这些变量,而是在应用程序中提供了一个后备方案
var environment = process.env.NODE_ENV || 'development';
在生产环境中,我们将按照常用方法(SET/export)定义它 提示
在package.json
中:
"scripts": {
"start": "set NODE_ENV=dev && node app.js"
}
在app.js
中:
console.log(process.env.NODE_ENV) // dev
console.log(process.env.NODE_ENV === 'dev') // false
console.log(process.env.NODE_ENV.length) // 4 (including a space at the end)
因此,这可能更好:
"start": "set NODE_ENV=dev&& node app.js"
或
在macOS中,对于使用express版本4.x.x
和DOTENV
插件的用户,需要如下使用:
在初始化应用程序的文件中安装插件导入后,如下所示:
require('dotenv').config({path:path.resolve({uuu dirname+'/.env'))})代码>
在根目录中创建文件“.env”并添加变量,如:
NODE\u ENV=development
或
NODE\u ENV=development
您可以使用npm包。它将负责修剪环境变量,还将确保它在不同的平台上工作
在项目根目录中,运行:
npm install cross-env
然后在package.json的脚本下添加:
"start": "cross-env NODE_ENV=dev node your-app-name.js"
然后在终端的项目根目录下,通过运行以下命令启动应用程序:
npm start
然后,环境变量将作为process.env.NODE\u env
在应用程序中可用,因此您可以执行以下操作:
if (process.env.NODE_ENV === 'dev') {
// Your dev-only logic goes here
}
在package.json中,我们必须进行如下配置(适用于Linux和Mac OS)
重要的是在生成命令之后“导出节点_ENV=production”,下面是一个示例:
"scripts": {
"start": "export NODE_ENV=production && npm run build && npm run start-server",
"dev": "export NODE_ENV=dev && npm run build && npm run start-server",
}
- 对于开发环境,我们必须点击“npm run dev”命令
- 对于生产环境,我们必须点击“npm run start”命令
如果你在React中遇到这个问题,你需要React-scripts@0.2.3更高。另外,对于除NODE\u ENV
以外的其他环境变量,要在React中工作,它们需要在前面加上React\u APP
,这是由于操作系统的原因
在package.json中,确保有脚本(app.js是要执行的主js文件,NODE_ENV在.ENV文件中声明)。例如:
窗户
还要设置.env文件变量,使其具有NODE_env=development
如果.env文件位于eg.config文件夹中,请确保在app.js(您的主js文件)中指定
const dotenv=require('dotenv');
dotenv.config({path:'./config/config.env'}) 在应用程序中尽早要求并配置dotenv
require('dotenv').config()
对我来说,问题是我正在使用将我的应用程序转换为可执行二进制文件。在这种情况下,被接受的解决方案不起作用。但是,使用以下代码解决了我的问题:
const NODE_ENV = (<any>process).pkg ? 'production' : process.env.NODE_ENV;
const NODE\u ENV=(在GitHub上。在Electron Js中
"scripts": {
"start": "NODE_ENV=development electron index.js",
},
如果您定义的任何函数名为进程,则这也可能导致此问题。您可以使用npm的dotenv
包,以下是链接:
这允许您将所有配置放在.env
文件中您可以添加一点,如果未设置NODE_env,则应用程序的行为类似于Linux的“development”模式,vi~/.bash_profile,然后插入NODE_env=development并保存。万一其他人遇到困难,“set V=VAL”和“set V=VAL”之间存在差异.Spaces很重要。请注意,模块“cross-env”的功能与上述类似,它将在OSX和Windows上工作:“cross-env NODE_env=development”。您需要首先安装cross-env:“npm install cross-env--save”。在你的package.json的脚本中包含它,你可以在两个平台上运行。对我来说不起作用。我在Mac终端上执行了export NODE_ENV=development
,然后从同一终端执行react native run ios
。调试时,process.ENV.NODE_ENV
的值未定义。要为hero设置NODE_ENV您可以使用的ku应用程序:heroku配置:设置节点\u ENV=“生产”
虽然下面的答案可以通过设置环境变量暂时解决问题,但这里更重要的教训是,您永远不知道是否会设置任何环境变量……因此,请编写相应的代码,并测试是否设置了环境变量,如果设置了环境变量,则测试设置了什么。不要对此进行假设。这是否回答了您的问题n?我强烈建议任何人不要更改应用程序逻辑中的环境标识符。你永远不希望应用程序突然认为它不是真实的东西。正如许多其他答案所建议的那样,这应该只在系统级别更改。你可能想阅读大约12个因素的应用程序:。此代码将是一个中提琴当然,有充分的理由将配置与代码分开。它可能只对自动测试有用,但即使如此,它也可以被抽象并注入到主代码中,而不是直接从env读取。我们不要对这个答案投太多的反对票,以致@Kafoso提供的信息性评论减少。或者将此添加到一些投票结果良好的答案的信息。像cross env这样的软件包也可以在windows上运行。你能做什么
"scripts": {
"start": "export NODE_ENV=production && npm run build && npm run start-server",
"dev": "export NODE_ENV=dev && npm run build && npm run start-server",
}
"scripts": {
"start": "node app.js",
"dev": "nodemon server.js",
"prod": "NODE_ENV=production & nodemon app.js"
}
const NODE_ENV = (<any>process).pkg ? 'production' : process.env.NODE_ENV;
"scripts": {
"start": "NODE_ENV=development electron index.js",
},