177 votes

Utiliser un dossier de sortie de génération personnalisé lors de l'utilisation de create-react-app

Facebook fournit un create-react-app commande à construire réagir apps. Quand nous courons npm run build, nous voyons de sortie en /build le dossier.

npm exécuter construire

La création de l'application pour la production du dossier de création. Correctement les faisceaux de Réagir dans le mode de production et optimise la construction pour le meilleur les performances.

La construction est minimisé et le nom de fichier inclut les tables de hachage. Votre application est prêt à être déployé!

Comment peut-on utiliser un dossier personnalisé au lieu de /build de la production? Merci.

142voto

Félix Points 523

Modifiez votre package.json:

 "build": "react-scripts build && mv build webapp"
 

77voto

Malcolm Dwyer Points 407

Créer-réagir-application Version 2+ réponse

Pour les versions récentes (> v2) de create-react-app (et peut-être plus anciennes également), ajoutez la ligne suivante à votre package.json, puis reconstruisez.

 "homepage": "./"
 

Vous devriez maintenant voir que build / index.html aura des liens relatifs ./static/... au lieu de liens vers la racine du serveur: /static/... .

66voto

Kaloyan Kosev Points 5556

Vous ne pouvez pas modifier la sortie de génération de nom de dossier avec les options de configuration actuelles.

En outre, vous ne devriez pas. C'est une partie de la philosophie sous - react-create-app: ils disent que la Convention de Configuration.

Si vous avez vraiment besoin de renommer votre dossier, je vois deux options:

  1. Juste après le processus de construction finitions, écrire une commande qui copie le dossier de création de contenu vers un autre dossier que vous souhaitez. Par exemple, vous pouvez essayer l' copyfiles mnp paquet, ou quelque chose de semblable.

  2. Vous pourriez essayer d' éjecter réagir-créer l'application et de modifier la configuration.

    Si vous n'êtes pas satisfait avec l'outil de construction et le choix de la configuration, vous pouvez éjecter à tout moment. Cette commande supprime la seule dépendance de compilation de votre projet.

    Au lieu de cela, il permet de copier tous les fichiers de configuration et les dépendances transitives (Webpack, Babel, ESLint, etc) dans votre projet si vous avez le plein contrôle sur eux. Toutes les commandes, à l'exception d'éjection fonctionne toujours, mais ils vont point à la copie des scripts de sorte que vous pouvez ajuster. À ce stade, vous êtes sur votre propre.

    Cependant, il est important de noter que c'est une opération. Une fois que vous éjecter, vous ne pouvez pas revenir en arrière! Vous perdez toutes les futures mises à jour.

Par conséquent, je vous recommande de ne pas utiliser un nom de dossier, si possible. Essayez de coller avec le nom par défaut. Si pas une option, essayez le #1. Si cela ne fonctionne toujours pas pour votre cas d'utilisation, et vous êtes vraiment d'options - explorer #2. Bonne chance!

22voto

Wallace Sidhrée Points 2229

Félix réponse est bonne et upvoted, soutenue par Dan Abramov lui-même.

Mais pour ceux qui voudraient faire changer la structure de la production elle-même (à l'intérieur de l' build le dossier), on peut courir après génération des commandes à l'aide d' postbuild, qui s'exécute automatiquement après l' build script défini dans l' package.json le fichier.

L'exemple ci-dessous, ça change de l' static/ de user/static/, le déplacement des fichiers et mise à jour des références de fichiers sur les fichiers (plein de gist ici):

package.json

{
  "name": "your-project",
  "version": "0.0.1",
  [...]
  "scripts": {
    "build": "react-scripts build",
    "postbuild": "./postbuild.sh",
    [...]
  },
}

postbuild.sh

#!/bin/bash

# The purpose of this script is to do things with files generated by
# 'create-react-app' after 'build' is run.
# 1. Move files to a new directory called 'user'
#    The resulting structure is 'build/user/static/<etc>'
# 2. Update reference on generated files from
#    static/<etc>
#     to
#    user/static/<etc>
#
# More details on: https://github.com/facebook/create-react-app/issues/3824

# Browse into './build/' directory
cd build
# Create './user/' directory
echo '1/4 Create "user" directory'
mkdir user
# Find all files, excluding (through 'grep'):
# - '.',
# - the newly created directory './user/'
# - all content for the directory'./static/'
# Move all matches to the directory './user/'
echo '2/4 Move relevant files'
find . | grep -Ev '^.$|^.\/user$|^.\/static\/.+' | xargs -I{} mv -v {} user
# Browse into './user/' directory
cd user
# Find all files within the folder (not subfolders)
# Replace string 'static/' with 'user/static/' on all files that match the 'find'
# ('sed' requires one to create backup files on OSX, so we do that)
echo '3/4 Replace file references'
find . -type f -maxdepth 1 | LC_ALL=C xargs -I{} sed -i.backup -e 's,static/,user/static/,g' {}
# Delete '*.backup' files created in the last process
echo '4/4 Clean up'
find . -name '*.backup' -type f -delete
# Done

10voto

Jaison Points 261

J'ai eu le scénario comme vouloir renommer le dossier et changer l'emplacement de sortie de la construction, et utilisé le code ci-dessous dans le package.json avec la dernière version
"build": "react-scripts build && mv build ../my_bundles",

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X