NodeJS 无法识别 .env 文件

pmi*_*nda 4 environment-variables node.js dotenv

我有 5 个 NodeJS 服务在运行,但其中一个有问题。

这是nodemon.json文件:

{
  "watch": ["**/*.ts"],
  "ext": "ts,json",
  "ignore": ["./test/*.ts"],
  "exec": "node -r ts-node/register -r dotenv/config Index.ts dotenv_config_path=$(pwd)/.env",
  "env": {
    "NODE_ENV": "development"
  }
}
Run Code Online (Sandbox Code Playgroud)

它与其他服务相同。当我运行时,npm run dev我收到错误消息,具体取决于从 .env 文件中获取的值,例如:

const LOCAL_CONFIGURATION = {
    PORT_APP: 8082,
    MONGODB: {
        SERVER: process.env.MONGO_DTE,
        AUTH: {
            auth: {
                password:process.env.MONGO_PASSWORD,
                user:process.env.MONGO_USER
            }
        },
    },
    MS_NOTIFICACION: "http://localhost:8089/notificacion",
    ELASTIC_PATH: process.env.ELASTIC_PATH,
    ...COMMON,
};
Run Code Online (Sandbox Code Playgroud)

第一条错误消息是: ConfigurationError: Missing node(s) option 产生该消息是因为它没有从 读取值process.env.ELASTIC_PATH,但是如果我放置了一个像“ http://with.the.correct.url ”这样的硬编码值,然后它再次尝试运行,我会收到另一个错误:

Error: Credentials must be provided when creating a service client 该错误是因为它正在尝试读取password:process.env.MONGO_PASSWORDuser:process.env.MONGO_USER

等等,所以,读取.env文件有问题。我知道该.env文件具有这些值,并且该文件是 UTF-8,没有引号等。该.env文件与其他服务是相同的文件,它在其余部分工作正常,但我不知道为什么没有被读取这里。

任何的想法?

编辑:

在此处输入图片说明

另外,我console.log(process.env);config.ts文件中放入了一个 ,它显示如下值:

在此处输入图片说明

但是没有来自.env例如的值,在图片中有一个值,COMPUTERNAME所以如果我把console.log(process.env.COMPUTERNAME);我得到:IBM-NOT87

为什么没有得到 .env 文件?

JBa*_*lin 12

似乎您需要 require/configure dotenv文档

尽早在您的应用程序中,要求并配置 dotenv。

require('dotenv').config()


Jon*_*hez 6

要进一步扩展 @JBallin 答案,您需要在要使用环境变量的文件中require/import dotenv config

// for example in your index.js or app.js

require('dotenv').config()
// or
require('dotenv/config') 


// if using ES6 module imports
import 'dotenv/config'

Run Code Online (Sandbox Code Playgroud)


小智 5

require('dotenv').config({ path: "./sample.env" });

在您使用环境变量的文件中,请尽早"dotenv"在方法中要求并config()指定文件的路径.env,即使它位于您的根目录或节点启动的同一目录中。

要求和指定同一目录中的文件的代码位于答案的第一行。

另外,要进一步阅读,您可以访问https://github.com/motdotla/dotenv#path