NodeJS 无法识别 .env 文件
Posted
技术标签:
【中文标题】NodeJS 无法识别 .env 文件【英文标题】:NodeJS not recognizing .env file 【发布时间】:2020-07-17 04:27:49 【问题描述】:我有 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"
与其他服务相同。当我运行 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,
;
第一条错误信息是:
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_PASSWORD
和 user:process.env.MONGO_USER
等等,所以,读取.env
文件时出现问题。我知道.env
文件具有这些值,并且该文件采用 UTF-8 格式,没有引号等。.env
文件与其他服务是同一个文件,它在其余部分工作正常,但我没有知道为什么这里没有被阅读。
有什么想法吗?
编辑:
另外,我在config.ts
文件中放了一个console.log(process.env);
,它显示的值如下:
但是没有来自.env
的值,例如,图片中有一个名为COMPUTERNAME
的值,所以如果我输入console.log(process.env.COMPUTERNAME);
,我得到:IBM-NOT87
为什么没有得到 .env 文件?
【问题讨论】:
请给我看看你的 .env 文件和它的位置 在应用程序的根目录。好的,我将使用文件的某些部分编辑 que 问题并附上评论 require('dotenv').config();在您尝试访问 env fie 的地方添加这些文件。并且像这样访问process.env.NODE_ENV 并且必须安装'dotenv' 【参考方案1】:似乎您需要/配置dotenv
。 Docs:
尽早在您的应用程序中要求并配置 dotenv。
require('dotenv').config()
【讨论】:
我应该把那个放在哪里?抱歉,使用 nodejs 的第一天,我已经花了 12 个小时来安装这 12 个微服务......这是唯一一个有问题的人 理想的应用程序入口点,有时命名为app.js
。这会将您的.env
加载到process.env
。
应该在这里注册:exec": "node -r ts-node/register -r dotenv/config Index.ts dotenv_config_path=$(pwd)/.env",
那个脚本叫做nodemon
它是由npm start dev
运行的
伙计……我不明白。当我在整个文件夹中搜索时,其余的微服务实际上并没有那个字符串。但是我把那行放在 Index.js 的第一部分,现在它可以工作了。我真的不明白。
Index.js 很棒!很高兴它有效。我不肯定那个 exec 脚本是如何工作的。关于其他微服务,您是否尝试过搜索“dotenv”的所有实例 - 还有其他方法可以要求/配置它。【参考方案2】:
进一步扩展@JBallin 回答
你应该在你的app.js
上使用它
分享图片,因为它有时更容易看到展开
代码在这里=>
require('dotenv/config') // require the dotenv/config at beginning of file
const express = require('express')
const mongoose = require('mongoose')
【讨论】:
【参考方案3】:require('dotenv').config( path: "./sample.env" );
在您使用环境变量的文件中,
尽早要求"dotenv"
,并在config()
方法中指定.env
文件的路径,即使它在你的根目录或节点启动的同一目录中。
要求和指定同一目录下的文件的代码在答案的第一行。
另外,为了进一步阅读?,您可以访问https://github.com/motdotla/dotenv#path
【讨论】:
【参考方案4】:你猫试试这个。
-> npm i dotenv
并在代码中添加这段代码
require('dotenv').config(
path: 'your path here'
)
【讨论】:
这个“新”答案所做的唯一一件事就是重复一半其他答案已经说过的话,包括accepted answer。【参考方案5】:安装 dotenv 包
npm install --s dotenv
并将这个require("dotenv").config();
添加到 index.js/ts 文件中。
【讨论】:
以上是关于NodeJS 无法识别 .env 文件的主要内容,如果未能解决你的问题,请参考以下文章
PIL.UnidentifiedImageError:无法识别图像文件
Powershell 无法识别Path Powershell 如何更新Path