J'utilise la variable d'environnement suivante dans mon application créer-réagir:
console.log(process.env.REACT_APP_API_URL) // http://localhost:5555
Cela fonctionne lorsque je lance npm start
en lisant un fichier .env
:
REACT_APP_API_URL=http://localhost:5555
Comment définir une valeur différente, telle que http://localhost:1234
lors de l'exécution de npm run build
?
Voici mon fichier package.json
:
{
"name": "webapp",
"version": "0.1.0",
"private": true,
"devDependencies": {
"react-scripts": "0.9.0"
},
"dependencies": {
"react": "^15.4.2",
"react-dom": "^15.4.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
Vous pouvez utiliser le process.env.NODE_ENV
comme suit:
const apiUrl = process.env.NODE_ENV === 'production' ? process.env.REACT_APP_PROD_API_URL : process.env.REACT_APP_DEV_API_URL;
Vous devez disposer de REACT_APP_PROD_API_URL
et REACT_APP_DEV_API_URL
.
Ou, si l'URL de production est toujours identique, vous pouvez le simplifier:
const apiUrl = process.env.NODE_ENV === 'production' ? 'https://example.com' : process.env.REACT_APP_DEV_API_URL;
Créer React App définit le NODE_ENV
sur 'Production' pour vous lors de la génération, de sorte que vous n'avez pas à vous soucier du moment de le définir en production.
Remarque: vous devez redémarrer votre serveur (par exemple, exécutez à nouveau npm start
]) pour détecter les modifications de la variable d'environnement.
J'imagine que cela fonctionne déjà maintenant, mais pour quiconque trouve cela, vous définissez vos variables d'environnement par défaut dans un fichier _.env
_ à la racine de votre projet "create-react-app".
Pour séparer les variables utilisées lors de l’utilisation de _npm start
_ et _npm run build
_, vous pouvez créer deux fichiers env supplémentaires: _.env.development
_ et _.env.production
_.
_npm start
_ définira _REACT_APP_NODE_ENV
_ sur development
et utilisera donc automatiquement le fichier _.env.development
_ et _npm run build
_ définit _REACT_APP_NODE_ENV
_ sur production
et utilisera automatiquement _.env.production
_. Les valeurs définies dans celles-ci remplacent les valeurs de votre _.env
_.
Si vous travaillez avec d'autres personnes et avez des valeurs spécifiques à votre ordinateur uniquement, vous pouvez remplacer les valeurs dans _.env.development
_ et _.env.production
_ en ajoutant ces valeurs à un nouveau fichier - _.env.development.local
_ et _.env.production.local
_ respectivement.
EDIT: Je dois signaler que les variables d'environnement que vous avez définies doivent commencer par "REACT_APP_", par exemple. "REACT_APP_MY_ENV_VALUE".
EDIT 2: si vous avez besoin de plus que du développement et de la production, utilisez env-cmd , comme spécifié par ce commentaire .
Si vous souhaitez avoir des fichiers dotenv distincts pour la construction et/ou le déploiement dans des environnements distincts (stage, prod), vous pouvez utiliser env-cmd comme suit:
npm install --save-dev env-cmd
./node_modules/.bin/env-cmd -f ./stage.env npm build
Ensuite, mettez à jour votre package.json
en conséquence:
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"build:stage": "env-cmd -f ./.env.stage npm run-script build"
},
Ensuite, pour construire, il vous suffirait d’exécuter cette commande Shell:
npm run build:stage