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.