Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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 为什么process.env.NODE_env未定义?_Javascript_Node.js - Fatal编程技术网

Javascript 为什么process.env.NODE_env未定义?

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

我正在努力学习关于NodeJS的教程。我不认为我遗漏了什么,但每当我调用
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",
    },