dotenv не работает в папке клиента в приложении mern stack

#reactjs #mern #dotenv

#реагирует на #мерн #дотенв

Вопрос:

У меня есть приложение mern stack. Я использую dotenv для сокрытия ключей. Он работает в бэкэнде, но когда я использую его в папке клиента, он не работает.

Моя структура папок.

введите описание изображения здесь

dotenv устанавливается в package.json серверной части. (не в клиенте). Но когда я установил также клиент, он не работал. Кстати, я создал своего клиента с помощью npx react-react-приложения

мой firebase.js

 import firebase from 'firebase/app'; import "firebase/auth"; require('dotenv').config()  export const firebaseConfig = {  apiKey: process.env.REACT_APP_FIREBASE_API_KEY, }  const app = firebase.initializeApp(firebaseConfig);  export const auth = app.auth(); export default app;  

это работает, когда я использую его в своей server.js для другой переменной. Это мое server.js

 require('dotenv').config()  mongoose.connect( process.env.MONGODB_STRING,{  useNewUrlParser: true,  useUnifiedTopology: true })  

Это мой файл .env

 MONGODB_STRING=mongodb srv://..... REACT_APP_FIREBASE_API_KEY=.......  

моя ошибка, которую я получаю после использования path.

 DevTools failed to load source map: Could not load content for chrome-extension://nmibbjghlmdiafjolcphdggihcbcedmg/js.3bd8b779.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME log.js:24 [HMR] Waiting for update signal from WDS... provider.ts:122 Uncaught t {code: 'auth/invalid-api-key', message: 'Your API key is invalid, please check you have copied it correctly.', a: null}a: nullcode: "auth/invalid-api-key"message: "Your API key is invalid, please check you have copied it correctly."[[Prototype]]: Error Provider.getImmediate @ provider.ts:122 FirebaseAppImpl._getService @ firebaseApp.ts:136 firebaseAppImpl.lt;computedgt; @ firebaseNamespaceCore.ts:228 (anonymous) @ firebase.js:27 ./src/firebase.js @ firebase.js:29 __webpack_require__ @ bootstrap:851 fn @ bootstrap:150 (anonymous) @ Signup.js:67 ./src/contextAPI/authContext.js @ authContext.js:14 __webpack_require__ @ bootstrap:851 fn @ bootstrap:150 (anonymous) @ Footer.js:141 ./src/components/Header.js @ Header.js:117 __webpack_require__ @ bootstrap:851 fn @ bootstrap:150 (anonymous) @ index.css:7 ./src/App.js @ App.js:50 __webpack_require__ @ bootstrap:851 fn @ bootstrap:150 (anonymous) @ index.css?bb0a:82 ./src/index.js @ index.js:9 __webpack_require__ @ bootstrap:851 fn @ bootstrap:150 1 @ Shoppingcard.scss?2b73:82 __webpack_require__ @ bootstrap:851 checkDeferredModules @ bootstrap:45 webpackJsonpCallback @ bootstrap:32 (anonymous) @ main.chunk.js:1 index.js:1 Uncaught Error: The error you provided does not contain a stack trace.  at L (index.js:1)  at Y (index.js:1)  at index.js:1  at index.js:1  at o (index.js:1)  

Комментарии:

1. вы перезапустили сервер приложений react?

2. вы имеете в виду начало npm? Да, поскольку горячая перезагрузка иногда не работает, я несколько раз проверял с закрытием и повторным запуском npm.

Ответ №1:

Итак, мы выяснили с @A7x, в чем была проблема.

React не может получить доступ к файлам .env, если они находятся за пределами его рабочего каталога, даже при использовании dotenv и path.resolve

Отдельный .env , выделенный для реакции, необходим непосредственно в корне, переменные должны иметь префикс, REACT_APP_ и нет необходимости вызывать require("dotenv").config()

Обязательно перезапускайте сервер при каждом изменении/создании файла .env, иначе изменения не будут отражены.

Комментарии:

1. Я написал это. В нем говорилось, что путь не определен. После этого я написал const path = require(«путь»); с установкой npm установочный путь. Но это все равно не работает.

2. Моя вина, что это "/../../.env" вместо "../../.env" . Это должно сработать сейчас

3. к сожалению, это все еще не работает.

4. Очень странно. Я воспроизвел ту же структуру папок, что и у вас, и она работает. В чем заключается ошибка?

5. Я отредактировал вопрос с ошибкой. Для краткости, это выглядит так: provider.ts:122 Неперехваченных t {код: ‘аутентификация/недопустимый-api-ключ’,. В героку это работа, так что ключ верен.