J'utilise react-scripts build
pour préparer la production et la déployer sur le serveur AWS J'utilise
GENERATE_SOURCEMAP = false yarn build && aws s3 sync build / s3: // *********
Existe-t-il un moyen d'appliquer la compression gzip pour créer des fichiers et d'inclure des fichiers gzippés dans index.html et de les déployer sur aws afin que les fichiers gzip du navigateur soient servis.
4 Réponses :
Ce n'est pas vraiment facile de changer le processus de construction de l'AR, vous pouvez l'éjecter mais vous devrez créer le vôtre après. Mais, dans votre package.json, vous pouvez définir une tâche à lancer après la construction:
"scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", "postbuild": "node yourNodeGzipScript.js" }
J'espère que cela pourra vous aider.
Je suis capable de compresser les fichiers mais je ne peux pas changer le nom du fichier injecté car .gz doit être inclus dans le dernier nom de fichier, par exemple en passant de ** .chunks.js à ** chunks.js.gz
Avez-vous essayé d'utiliser les méthodes "renommer" ou "copier" du package "fs"?
Oui, j'ai fait ça, j'ai créé un fichier .js et j'utilise «fs» pour mettre à jour les balises script et css. Et cela a fonctionné .. Merci mon pote.
Vous pouvez également simplement ajouter un script postbuild dans votre package.json avec:
"postbuild": "find ./build -type f -name '*.css' -o -name '*.js' -exec gzip -k '{}' \\;"
Installez le package gzipper ( https://www.npmjs.com/package/gzipper ) . Modifiez la commande de construction comme ceci
server { # Gzip Settings gzip on; gzip_static on; # allows pre-serving of .gz file if it exists gzip_disable "msie6"; # Disable for user-agent Internet explorer 6. Not supported. gzip_proxied any; # enable gzip for all proxied requests gzip_buffers 16 8k; # number and size of buffers to compress a response gzip_http_version 1.1; gzip_min_length 256; # Only gzip files of size in bytes gzip_types text/plain text/css text/html application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon; gunzip on; # Uncompress on the fly listen 4000; server_name localhost; location / { root html/react-app; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
et construisez votre projet, vous obtiendrez à la fois gzip et le fichier normal. C'est à vous de faire en sorte que le serveur serve gzip au lieu d'un fichier normal. Si vous utilisez nginx, vous devez configurer votre serveur dans le fichier nginx.conf comme ci-dessous
"build": "react-scripts build && gzipper --verbose ./build"
J'ai résolu le problème depuis le cloud. mais merci pour la solution. :)
cela devrait être la réponse acceptée. Le plus détaillé et le plus utile à coup sûr
J'ai utilisé cette commande pour gzip les fichiers en les gardant sous le même nom
- yarn global add gzipper - gzipper compress ./build ./gzip_build --output-file-format [filename].[ext] --verbose
FYI: gzipper --verbose m'a obtenu une erreur. "Compresser" manqué.
Normalement, je compresserais les fichiers via CloudFront. Voir: stackoverflow.com/questions/54655204/...
@CharlieHileman Je l'ai fait avec l'aide de CloudFront et cela fonctionne bien. Merci pour l'idée. Ce lien a > a les détails sur la façon de le faire.