J'essaie
PUBLIC_URL=http://xxxx.com npm run build
avec un projet construit en utilisant le dernier script create-react-script.
Toutefois, les occurrences de% PUBLIC_URL% dans public/index.html sont remplacées par une chaîne vide et non par la valeur attendue PUBLIC_URL.
public/index.html contient du code comme
<script src="%PUBLIC_URL%/static/js/jarvis.widget.min.js"></script>
Les heures de recherche sur Internet et le débordement de pile montrent qu'il est très peu écrit sur PUBLIC_URL. J'ai cloné create-react-app à partir de git hub et j'ai parcouru le code, mais je n'ai pas encore été éclairé.
Quelqu'un at-il des suggestions quant à ce que je fais mal?
Si les autres réponses ne vous conviennent pas, il existe également un champ homepage
dans package.json
. Après avoir exécuté npm run build
, vous devriez recevoir un message du type suivant:
The project was built assuming it is hosted at the server root.
To override this, specify the homepage in your package.json.
For example, add this to build it for GitHub Pages:
"homepage" : "http://myname.github.io/myapp",
Vous n'aurez qu'à l'ajouter en tant que l'un des champs racine dans package.json
, par exemple.
{
// ...
"scripts": {
// ...
},
"homepage": "https://example.com"
}
Une fois qu'il a été défini avec succès, via homepage
ou PUBLIC_URL
, vous devriez plutôt recevoir un message comme celui-ci:
The project was built assuming it is hosted at https://example.com.
You can control this with the homepage field in your package.json.
Regardez la documentation . Vous pouvez avoir un fichier .env qui récupère le PUBLIC_URL
Bien que vous deviez vous rappeler que ce qui sert à -
Vous pouvez utiliser cette variable pour forcer les actifs à être référencés textuellement dans l'url que vous fournissez (nom d'hôte inclus). Cela peut être particulièrement utile lorsque vous utilisez un CDN pour héberger votre application.
En réalité, la manière de définir les variables d'environnement diffère d'un système d'exploitation à l'autre.
set PUBLIC_URL=http://xxxx.com&&npm start
(Remarque: le manque d'espace est intentionnel.)
PUBLIC_URL=http://xxxx.com npm start
cross-env
{
"scripts": {
"build": "cross-env PUBLIC_URL=http://xxxx.com npm start"
}
}
Les gens comme moi qui cherchent quelque chose comme ça dans la construction:
<script type="text/javascript" src="https://dsomething.cloudfront.net/static/js/main.ec7f8972.js">
Puis définir https://dsomething.cloudfront.net
à homepage
dans package.json
ne fonctionnera pas.
Construisez votre projet comme ceci:
(les fenêtres)
set PUBLIC_URL=https://dsomething.cloudfront.net&&npm run build`
(linux)
PUBLIC_URL=https://dsomething.cloudfront.net npm run build
(Mac)
-- pas certain --
Et vous aurez
<script type="text/javascript" src="https://dsomething.cloudfront.net/static/js/main.ec7f8972.js">
dans votre index.html construit
Créez un fichier appelé .env
à la racine de votre projet (même emplacement que package.json).
Dans ce fichier, écrivez ceci (sans guillemets autour de l’URL):
PUBLIC_URL=https://dsomething.cloudfront.net
Construisez votre projet comme d'habitude (npm run build
)
Cela générera également index.html avec:
<script type="text/javascript" src="https://dsomething.cloudfront.net/static/js/main.ec7f8972.js">
Ajoutez ceci dans votre package.json
"homepage": " http: //: //dsomething.cloudfront.net ",
Ensuite, index.html sera généré avec:
<script type="text/javascript" src="//dsomething.cloudfront.net/static/js/main.ec7f8972.js">
Ce qui est fondamentalement le même que:
<script type="text/javascript" src="https://dsomething.cloudfront.net/static/js/main.ec7f8972.js">
d'après ce que je comprends.
Ce que vous faites mal, c'est d'espérer que PUBLIC_URL et process.env.PUBLIC_URL auront la même valeur.
create-react-app a deux PUBLIC_URL différents:
L'environnement de processus PUBLIC_URL remplace toute page d'accueil package.json. Il peut s'agir d'une URL complète avec schéma, hôte et chemin. L'hôte serait utilisé pour donner les instructions de déploiement correctes.
Process.env.PUBLIC_URL est uniquement le chemin de l'environnement de processus PUBLIC_URL ou de la page d'accueil.
Par conséquent, lorsque vous exécutez
PUBLIC_URL=http://example.com npm run build
En réaction, vous aurez
process.env.PUBLIC_URL === ''
Si tu avais
PUBLIC_URL=http://example.com/foo npm run build
En réaction tu aurais
process.env.PUBLIC_URL === '/foo'
Vous ne savez pas pourquoi vous ne pouvez pas le définir. Dans source , PUBLIC_URL
a priorité sur homepage
const envPublicUrl = process.env.PUBLIC_URL;
...
const getPublicUrl = appPackageJson =>
envPublicUrl || require(appPackageJson).homepage;
Vous pouvez essayer de définir des points d'arrêt dans leur code pour voir quelle logique redéfinit votre variable d'environnement.
Comme documenté ici create-react-app importera uniquement les variables d'environnement commençant par REACT_APP_
; le PUBLIC_URL
, comme je l'ai mentionné par @redbmk, vient donc du paramètre homepage
du fichier package.json
.