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: true
config 으로
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();
다음과 같은 파일 맨 위:
그 구성을 중간에 놓으면 됩니다.그러면 유선 동작을 볼 수 있습니다.마치, 어떤 파일에서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
'source' 카테고리의 다른 글
Swift에서 유형에 대해 표시되는 텍스트 표현을 변경하려면 어떻게 해야 합니까? (0) | 2023.07.31 |
---|---|
Android 대화 상자 조각 대 대화 상자 (0) | 2023.07.31 |
PHP의 텍스트 문자열에서 여러 항목을 대체하는 방법은 무엇입니까? (0) | 2023.07.31 |
Appdomain 재활용이란 무엇입니까? (0) | 2023.07.31 |
페이지에서 브라우저 인쇄 옵션(헤더, 바닥글, 여백)을 비활성화하시겠습니까? (0) | 2023.07.31 |