source

dotenv 파일이 환경 변수를 로드하지 않습니다.

ittop 2023. 7. 31. 21:54
반응형

dotenv 파일이 환경 변수를 로드하지 않습니다.

루트 폴더 파일에 .env 파일이 있습니다.

NODE_ENV=development
NODE_HOST=localhost
NODE_PORT=4000
NODE_HTTPS=false
DB_HOST=localhost
DB_USERNAME=user
DB_PASSWORD=user

그리고.server.js에 파일을 합니다.root/app/config/server.js폴더를 누릅니다. 줄번째의 첫 줄server.js이 파은입니다.

require('dotenv').config();

저는 또한 다음을 시도했습니다.

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

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

env 변수를 실행할 때 .server.js명령 프롬프트의 파일

node root/app/config/server.js

비주얼 스튜디오를 사용하고 F5를 누르면 로딩됩니다!!

제가 뭘 잘못하고 있는지, 뭘 놓치고 있는지 잘 모르겠어요.어떤 제안이든 대단히 감사합니다.감사해요.

사용하는 것은 어떻습니까?require('dotenv').config({path:__dirname+'/./../../.env'})?

당신의 문제는 실행 경로인 것 같습니다.

이것으로 노드의 문제가 해결되었습니다.v8.14.1:

const path = require('path')
require('dotenv').config({ path: path.resolve(__dirname, '../.env') })

단하게하기간기▁doing하▁simply.require('dotenv').config({path:__dirname+'/./../../.env'})으로 결적으다같확위습니다었인되치가은으로 되었습니다./some/path/to/env/./../../.env

다음은 단일 솔루션입니다.

require('dotenv').config({ path: require('find-config')('.env') })

이렇게 하면 사용할 .env 파일을 찾을 때까지 상위 디렉터리가 반복됩니다.

또한 위의 한 줄에서 영감을 받은 ckey라는 모듈을 사용할 수도 있습니다.

.env 파일을 주 디렉터리에서 가져옵니다.

# dotenv sample content
USER=sample@gmail.com
PASSWORD=iampassword123
API_KEY=1234567890

하위 디렉터리의 일부 js 파일

const ck = require('ckey');

const userName = ck.USER;     // sample@gmail.com
const password = ck.PASSWORD; // iampassword123
const apiKey   = ck.API_KEY;  // 1234567890

호하는경우를 호출하는 .dotenv된 파일에서, 당신의 "" "" "" "" "" "" " " " " ""를 사용합니다..env파일은 프로젝트 루트에 있으며, 점을 연결하는 방법은 다음과 같습니다.

require('dotenv').config({path:'relative/path/to/your/.env'})

@DavidP의 응답 노트에 있는 주석 중 하나는 dotenv.config의 출력을 다음과 같이 기록합니다.

console.log(require("dotenv").config())

그러면 구성 및 표시 오류 로그가 출력됩니다.내 경우에는 구성 방법이 내 .env 파일이 포함된 상위 디렉터리 대신 현재 디렉터리를 참조하고 있음을 나타냅니다.저는 그것을 다음과 같이 참조할 수 있었습니다.

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

저는 이 문제를 겪었고 REACT는 REACT_APP_로 접두사가 붙은 변수만 로드하는 것으로 나타났습니다.

VUEJ에서도 변수 앞에 VUE_APP_가 붙어야 하는 것과 유사한 문제가 발생할 수 있습니다.

여기까지 도착한 원격 사례에서 제 문제는 상당히 더 멍청했습니다.환경 변수의 이름을 "="이 아닌 ":" 콜론으로 잘못 지정했습니다.새로 작성한 실수이지만 결과 동작이 잘못 입력된 변수 할당을 로드하지 않았습니다.

# dotenv sample content

# correct assignment
USER=sample@gmail.com

# wrong assignment (will not load env var)
USER : sample@gmail.com

로드해야 합니다..env파일의 항파의시예부분작일목예(부분:▁at작▁(▁the시e▁entry▁file의)index.js또는server.js된 후 에 따라 되는 경우가 있습니다. 서비스가 시작된 후 실행 순서에 따라 환경 변수가 로드되는 경우가 있습니다.그리고, 사용함으로써.__dirname현재 파일과 관련하여 필요한 파일을 쉽게 가리킬 수 있습니다.

여기 제 프로젝트 구조는 이렇습니다.

.
├─ src
│  └─ index.ts
└─ .env
// index.ts
import dotenv from 'dotenv';
import path from 'path';

dotenv.config({path: path.join(__dirname, '..', '.env')});

...

이를 통해 문제가 해결되었습니다.

const path = require('path');
require('dotenv').config({
  path: path.resolve('config.env'),
});

사용해 보십시오.

const dotenv = require('dotenv');
dotenv.config({ path: process.cwd() + '/config/config.env' });

어떻게 저를 위해 일했나요?

먼저 다음을 사용하여 디버그할 수 있습니다.

console.log(require('dotenv').config())

제 내시리에서오, 의나나..env파일이 루트 디렉터리에 있고 중첩된 디렉터리에서 사용해야 합니다.결과는 다음과 같습니다.

{
  parsed: {
    DATABASE_URL: 'mongodb://localhost/vidly',
    PORT: '8080'
  }
}

따라서 결과를 구문 분석하여 변수에 저장합니다.

const dotenv = require('dotenv').config().parsed;

그런 다음 JS 개체처럼 DATABASE_URL에 액세스합니다.

dotenv.DATABASE_URL

머리를 긁는 데 몇 번이 걸렸고, Require 명세서의 출력을 콘솔에 기록하는 팁이 정말 도움이 되었습니다.console.log(require('dotenv').config());

알고 보니 사용자/디렉토리에서 앱을 실행하고 있었습니다.nodemon application_name/.그리고 그것은 앱의 .env 파일 대신에 우리 집의 dir에 있는 .env 파일을 찾게 만들었습니다.나는 하나를 건너뛰어서 게을렀습니다.cd몇 분이 걸렸습니다.

  const path = require('path');
  const dotenv = require('dotenv');
  dotenv.config({ path: path.resolve(__dirname, '../config.env') })

나는 옵션을 찾았습니다.debug: trueconfig 으로

dotenv.config({ debug: true });

다음을 보여주었습니다.

[dotenv][DEBUG] "PORT" is already defined in `process.env` and was NOT overwritten

추가했습니다.overwrite: true그리고 그것이 작동시켰습니다.

[dotenv][DEBUG] "PORT" is already defined in `process.env` and WAS overwritten

답변이 너무 늦었을 수도 있지만, 몇 시간 동안 문서를 확인한 후 결과를 공유하기로 결정했습니다.

경우에는 경에는우내는▁in..env잘 읽혔지만, 그렇지 않았습니다..env.local.

업데이트 중package.json을 대다.env안으로.env.local(cp ./.env.local .env했습니다.

  "myscript": "cp ./.env.local .env && node ./scripts/myscript.js"

config.env 파일과 index.js 파일이 모두 동일한 디렉토리에 있는 경우:

파일:index.js

const path = require('path'); 

//  Set port from environment variables
dotenv.config({path: 'config.env'})
const PORT = process.env.PORT || 8080

파일: config.env:

PORT = 4000

응용 프로그램이 시작된 현재 작업 디렉터리를 기준으로 .env 파일의 경로가 필요할 수 있습니다.이 경로는 다음과 같이 만들 수 있습니다.

const path = require('path')
require('dotenv').config({path: path.relative(process.cwd(), path.join(__dirname,'.env'))});

process.cwd()작업 디렉터리의 절대 경로를 반환합니다.
__dirname응용 프로그램의 절대 경로를 반환합니다.
path.join()합니다.env-file의 경로를 응용 프로그램의 경로에 추가합니다..env 파일이 더 깊게 중첩되어 있으면 폴더를 추가합니다(예:path.join(__dirname, 'config', 'secret','.env'))
path.relative()상대 경로를 만듭니다.

스크립트를 입력합니다.

__sysname을(를) 확인하려고 할 때 소스 폴더를 다른 폴더에 컴파일하는 경우 __sysname을(를) 편집해야 합니다.나의 경우 dist 폴더에 있는 ts를 컴파일하고 있으며 env 파일은 dist 폴더가 아니라 루트 폴더에 있습니다.따라서 __distname에서 /dist를 삭제해야 합니다.error() 함수를 호출하여 env 파일 읽기에 문제가 있으면 오류를 반환합니다.

require('dotenv').config({
    path:  __dirname.replace('\dist','') + `${process.env.NODE_ENV}.env`
  }); # To debug .error()

또 다른 것은, 환경 변수를 설정할 때 다음과 같이 확인하십시오. 변수와 (&&) 사이에 다음과 같은 공백이 없어야 합니다.

  "scripts": {
    "build": "npx tsc",
    "start": "set NODE_ENV=production&& node dist/index.js",
  },

파일 인코딩에 문제가 있었습니다..env창에 파일을 저장합니다.UTF-16LE로 인코딩되었습니다.파일이 구문 분석되었지만 비어 있는 것으로 간주되었습니다.내가 변환한 후에.env파일에서 UTF-8로 모든 것이 예상대로 작동합니다.

한 번은 저도 같은 문제를 겪었습니다.Dotenv가 .env 파일을 로드하지 않았습니다.루트 폴더에 .env 파일을 넣고 파일이 실행 중인 폴더에 .env를 넣으려고 경로 구성에서 이 문제를 해결하려고 했지만 아무 도움이 되지 않았습니다.그런 다음 Node_modules 폴더를 폐기하고 모든 종속성을 다시 설치하면 올바르게 작동합니다.

사용 중:

import findUp from 'find-up';
dotenv.config({ path: findUp.sync('.env') });

Playwright / typescript사용한 작업:

1 파일을 만들고 프로젝트 루트에 배치:global-setup.ts내부에 추가:

async function globalSetup() {
  // Configure ENV variables
  require('dotenv').config()
}

export default globalSetup

2 그런 다음 이 파일을 사용합니다.playwright.config.ts

다음과 같이:globalSetup: require.resolve('./global-setup'),

이러한 방식으로 글로벌 conf가 생성되고 모든 테스트에서 픽업됩니다.

설치된 경우dotenv생산 의존성으로서.그러면 제대로 작동하지 않을 수도 있습니다..env파일은 일반적으로 개발 에 사용됩니다.dotenv환경 변수를 응용 프로그램의 환경으로 가져옵니다.

npm install --save-dev dotenv

그렇지 않음:

npm install dotenv

의 정상적인dotenv라이브러리, 당신은 항상 그 코드를 언급해야 합니다:

import dotenv from "dotenv"
dotenv.config();

다음과 같은 파일 맨 위:

enter image description here

그 구성을 중간에 놓으면 됩니다.그러면 유선 동작을 볼 수 있습니다.마치, 어떤 파일에서env변수 작업 파일입니다.하지만, 일부에서는 그렇지 않습니다.

전체적으로 설치된 다른 도구를 사용하여 구성 파일을 호출하는 경우 절대 경로만 사용하십시오...

require('dotenv').config({
  path: '/path/to/my/project/.env',
});

한 가지 어리석은 실수는 "=" 대신 ":" 콜론을 사용한 것입니다.

아래를 사용했습니다.

사용자:루트

하지만 그래야 합니다.

USER=루트

다음과 같은 폴더 구조를 가진 경우 .env를 src 폴더 외부에 배치하는 데 도움이 되지 않는 경우

-src/
  - index.js
  - env.js (where you call dotenv.config)
  // you may call dotenv.config anywhere but entry point is best.

.env (file outside the src folder)

여기서 가장 빠른 해결책은 단 몇 초 만에 제 경우 render.com 에서 사용 중인 플랫폼에 변수를 추가합니다.

나의 실패자는 경로 키워드였습니다. Pnot capital Letter가 되어야 합니다. 그것은 너무 웃겼습니다.

언급URL : https://stackoverflow.com/questions/42335016/dotenv-file-is-not-loading-environment-variables

반응형