React Project에 .env 파일 추가


84

github에 커밋 할 때 API 키를 숨기려고하는데 포럼에서 지침, 특히 다음 게시물을 살펴 보았습니다.

create-react-app에서 API 키를 숨기려면 어떻게하나요?

변경하고 실을 다시 시작했습니다. 내가 뭘 잘못하고 있는지 잘 모르겠습니다. .env프로젝트의 루트 (이름 process.env)와 방금 넣은 파일에 파일을 추가했습니다 REACT_APP_API_KEY = 'my-secret-api-key'.

fetchApp.js에서 키를 추가하는 방법이라고 생각 하고 템플릿 리터럴을 사용하지 않는 것을 포함하여 여러 형식을 시도했지만 프로젝트가 여전히 컴파일되지 않습니다.

어떤 도움이라도 대단히 감사합니다.

performSearch = (query = 'germany') => {
    fetch(`https://api.unsplash.com/search/photos?query=${query}&client_id=${REACT_APP_API_KEY}`)
    .then(response => response.json())
    .then(responseData => {
        this.setState({
            results: responseData.results,
            loading: false
        });
     })
     .catch(error => {
            console.log('Error fetching and parsing data', error);
     });
}


대신 process.env이름을 .env.local or .env.process 및 SRC 디렉토리 외부에 보관
RIYAJ KHAN

1
안녕하세요 @RIYAJKHAN 저는 파일을 .env.local로 변경했으며 확실히 src 디렉토리 외부에 있지만 여전히 REACT_APP_API_KEY가 정의되지 않았습니다. /
Bianca M

1
나를 위해 고쳐진 것은 단순히 내 로컬 개발 서버를 실행하는 터미널을 닫고 npm run start.
n00bAppDev

3
리 액트 앱에서는 비밀을 숨길 수 없습니다. stackoverflow.com/a/46839021/4722345
JBallin

5
이것을 사용하여 비밀을 저장하지 마십시오. 로부터 문서 ...WARNING: Do not store any secrets (such as private API keys) in your React app! Environment variables are embedded into the build, meaning anyone can view them by inspecting your app's files.
Nishant 메타

답변:


97

4 단계

  1. npm install dotenv --save

  2. 다음으로 앱에 다음 줄을 추가합니다.

    require('dotenv').config()

  3. 그런 다음 .env응용 프로그램의 루트 디렉터리에 파일을 만들고 변수를 추가합니다.

// contents of .env 

REACT_APP_API_KEY = 'my-secret-api-key'
  1. 마지막으로 Git에서 무시하고 GitHub에서 끝나지 않도록 파일에 추가 .env합니다 .gitignore.

당신이 사용하는 경우 생성 - 반응 - 응용 프로그램을 다음 만 3, 4 단계하지만 시작하는 마음 변수의 요구에 계속 필요REACT_APP_ 작동하도록합니다.

참조 : https://create-react-app.dev/docs/adding-custom-environment-variables/

참고 - .env의 파일에 변수를 추가 한 후 응용 프로그램 다시 시작해야합니다.

참조-https: //medium.com/@thejasonfile/using-dotenv-package-to-create-environment-variables-33da4ac4ea8f


34
.env 파일에 변수를 추가 한 후 응용 프로그램을 다시 시작해야합니다. "create-react-app"을 사용하여 반응 응용 프로그램을 만들 경우 변수 이름 앞에 "REACT_APP_"을 사용합니다.
vikash

예를 들어 내 앱을 AWS에 배포하는 경우 @tarzen chugh. .env는 gitignore의 일부이므로 무시되지 않습니까? IT 제작을 포함하려면 어떻게해야합니까?
user2763557

@vikash이 나를 위해, 작은 코멘트 큰 영향을했다
Benyam Ephrem

어디에 추가 require('dotenv').config()합니까? 어떤 파일?
aqteifan

@aqteifan u는 해당 스 니펫을 추가 할 필요가 없지만 .ENV 파일 이름 지정이 중요한 역할을합니다
테스트 됨

83

그래서 저는 React를 처음 접했고 그것을 할 방법을 찾았습니다.

이 솔루션에는 추가 패키지가 필요 하지 않습니다 .

1 단계 ReactDocs

위의 문서에서 셸 및 기타 옵션에서 내보내기에 대해 언급했는데 설명하려고하는 것은 .env를 사용하는 것입니다. 파일을

1.1 루트 /.env 만들기

#.env file
REACT_APP_SECRET_NAME=secretvaluehere123

이주의 사항 반드시 시작 REACT_APP_

1.2 ENV 변수에 액세스

#App.js file or the file you need to access ENV
<p>print env secret to HTML</p>
<pre>{process.env.REACT_APP_SECRET_NAME}</pre>

handleFetchData() { // access in API call
  fetch(`https://awesome.api.io?api-key=${process.env.REACT_APP_SECRET_NAME}`)
    .then((res) => res.json())
    .then((data) => console.log(data))
}

1.3 빌드 환경 문제

1.1 | 2 단계를 수행 한 후 작동하지 않고 위의 문제 / 해결 방법을 찾았습니다. React는 빌드 될 때 env를 읽고 생성 하므로 변수가 업데이트되도록 .env 파일을 수정할 마다 npm run start 가 필요합니다 .


7
제 생각에는 이것이 정답입니다! 추가 패키지가 필요하지 않으며 환경 변수를 가져 오는 적절한 React 방법. 다른 방법도 작동하지만 이미 완료되었는데 패키지 및 코드 구성을 추가하는 이유는 무엇입니까? 좋은 대답!
ryanm

12
나는이 누락 된 REACT_APP_주셔서 감사합니다. 다른 사람이 언급하지 않았습니다.
rotimi-best 19

이것은 어떤 이유로 저에게 효과가 없었습니다. 나는 얻는다undefined
Si8

@ Si8은 오류 / 프로세스를 확장 할 수 있습니다. 어떤 단계를 undefined거쳐 .env에 새 변수를 추가 한 후 앱을 다시 시작 했습니까? 1.3
T04435

@ T04435이 답변을 주셔서 감사합니다 메이트는 매력 REACT_APP_이 여기의 열쇠 처럼 일했습니다 . 또한 개발 / 베타 / 프로덕션이있는 다른 서버에 대해 어떻게 구성 할 수 있습니까? 각 서버에 대해 다른 env 파일이 있어야합니까?
Kannan T

33

오늘날에는 더 간단한 방법이 있습니다.

루트 디렉토리에 .env.local 파일을 만들고 거기에 변수를 설정하십시오. 귀하의 경우 :

REACT_APP_API_KEY = 'my-secret-api-key'

그런 다음 그런 식으로 js 파일을 호출합니다.

process.env.REACT_APP_API_KEY

React는 react-scripts@0.5.0 이후 환경 변수를 지원합니다.이를 위해 외부 패키지가 필요하지 않습니다.

https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-development-environment-variables-in-env

* 참고 : create-react-app이 프로젝트를 만들 때이 파일을 gitignore에 추가하기 때문에 .env 대신 .env.local을 제안합니다.

파일 우선 순위 :

npm 시작 : .env.development.local, .env.development, .env.local, .env

npm 실행 빌드 : .env.production.local, .env.production, .env.local, .env

npm 테스트 : .env.test.local, .env.test, .env (.env.local이 누락 됨)

추가 정보 : https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables


적절한 이름이 저에게 도움이되었습니다. .env.dev를 사용했고 React는 .env.development를 찾고 있었기 때문에 .env로 돌아갔습니다
Omnibyte

25

Webpack 사용자

웹팩을 사용하는 경우 dotenv-webpack플러그인을 설치하고 사용 하여 아래 단계를 수행 할 수 있습니다.

패키지 설치

yarn add dotenv-webpack

.env파일 생성

// .env
API_KEY='my secret api key'

webpack.config.js파일에 추가

// webpack.config.js
const Dotenv = require('dotenv-webpack');

module.exports = {
  ...
  plugins: [
    new Dotenv()
  ]
  ...
};

코드에서 다음과 같이 사용하십시오.

process.env.API_KEY

자세한 정보 및 구성 정보는 여기를 방문 하십시오.


webpack-devserver를 사용하는 경우 다시 시작할 때까지 변경 사항이 표시되지 않습니다.
Isaac Pak

이것은 나에게 가장 좋은 해결책이었습니다. 감사. 참고 : 저는 서버 측 렌더링을 사용하고 있으므로 두 웹팩 파일 (클라이언트도)을 업데이트해야했습니다.
Jorge Mauricio

@Aminu Kano 소스에서 bundle.js 파일을 온라인으로 볼 때 api-key가 여전히 표시되는 경우이 접근 방식을 사용하는 이유가 무엇인지 설명해 주시겠습니까?
Linas M.

@LinasM. 예,하지만 "온라인"이란 무엇을 의미합니까?
Aminu Kano

1
@AminuKano, 예, 요점을 매우 명확하게 설명했습니다. 감사합니다
Linas M.

9

1. 루트 폴더에 .env 파일을 만듭니다.

일부 소스는 사용하는 prefere .env.development.env.production하지만 의무적이 아니다.

2. VARIABLE의 이름은 REACT_APP_YOURVARIABLENAME로 시작해야합니다.

환경 변수가 그렇게 시작하지 않으면 문제가 발생할 것 같습니다.

3. 변수 포함

환경 변수를 포함하려면 코드에 process.env.REACT_APP_VARIABLE

외부 종속성을 설치할 필요가 없습니다.


나는 똑같은 일을하지만 그것은 콘솔에 정의되지 않은 것을 보여준다
PRADIP GORULE

확인할 수 있습니다. 작동하지 않습니다.
가설

1
값을 정의되지 않은 것으로 가져 오는 경우 다시 컴파일하십시오.
익명

8

npm install env-cmd 를 설치해야합니다.

루트 디렉토리에 .env를 만들고 다음과 같이 업데이트하십시오. REACT_APP_ 는 변수 이름의 필수 접두사입니다.

REACT_APP_NODE_ENV="production"
REACT_APP_DB="http://localhost:5000"

package.json 업데이트

  "scripts": {
    "start": "env-cmd react-scripts start",
    "build": "env-cmd react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

6
  1. dotenvdevDependencies로 설치 하십시오.
npm i --save-dev dotenv
  1. .env루트 디렉터리에 파일을 만듭니다 .
my-react-app/
|- node-modules/
|- public/
|- src/
|- .env
|- .gitignore
|- package.json
|- package.lock.json.
|- README.md
  1. .env아래와 같이 파일을 업데이트하십시오. REACT_APP_ 는 변수 이름의 필수 접두사입니다.
REACT_APP_BASE_URL=http://localhost:8000
REACT_APP_API_KEY=YOUR-API-KEY
  1. [ 선택 사항이지만 모범 사례 ] 이제 변수를 저장하는 구성 파일을 만들고 다른 파일에서 사용할 수 있도록 변수를 내보낼 수 있습니다.

예를 들어, base.js다음과 같이 이름이 지정된 파일을 만들고 업데이트했습니다.

export const BASE_URL = process.env.REACT_APP_BASE_URL;
export const API_KEY = process.env.REACT_APP_API_KEY;
  1. 또는 다음과 같은 방법으로 JS 파일의 환경 변수를 간단히 호출 할 수 있습니다.
process.env.REACT_APP_BASE_URL

단일 .env파일을 사용할 때 개발 환경과 제품 환경을 어떻게 구별 합니까? 우리는 파일 .env.development.env.prod파일 을 만들어야한다는 것을 알고 있지만 귀하의 방법을 사용하여 어떻게 구별합니까?
ameyaraje

@ameyaraje 기본적으로, 우리는 무시 .env우리에서 파일을 .gitignore. 따라서 배포시 .env파일을 서버에 복사 하고 BASE_URL 및 기타 필요한 값만 변경하면 됩니다. 이런 식으로 최신 코드를 배포해야 할 때 git 마스터에서 가져와 배포하기 만하면됩니다. 우리는 .env그것을 무시하고 처음에 서버에 설정하기 때문에 생각하지 않습니다 . 감사!
Fatema T. Zuhora

process.env.REACT_APP_API_KEY가 정의되지 않은 값을 제공하지 않습니다. 나는 서버를 중지하고 npm start로 다시 시작했습니다
vikramvi

@vikramvi REACT_APP_BASE_URL.env 파일에서 동일한 이름의 변수에 값을 넣 습니까?
Fatema T. Zuhora

@ FatemaT.Zuhora 그것은 내 잘못이었습니다. 루트 디렉토리에 넣는 대신 실수로 자식 디렉토리에 .env를 넣었습니다
vikramvi

0

값을으로 얻는 경우 undefined노드 서버를 다시 시작하고 다시 컴파일해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.