Étape 06
Prérequis
git checkout --force step-06
pnpm i
Description
Les équipes sont contentes, elles peuvent développer en toute autonomie.
Mais ce n'est pas le cas de l'équipe OPS car ils ne peuvent plus déployer l'application !
En effet, Bookshelf
cherche à télécharger les remoteEntry.js
de Booklist
et de Book
depuis localhost
.
Exercice
Générer un bundle pouvant être déployer n'importe où.
Pour simplifier l'exercice et éviter d'avoir à configurer un nginx ou autre, nous allons créer un bundle contenant notre host et nos deux remote sous une même arborescence. Ce bundle sera déployable sur n'importe quel serveur de fichier.
L'arborescence sera la suivante :
/
: les fichiers de notre hostBookshelf
/remote/booklist
: les fichiers du remoteBooklist
/remote/book
: les fichiers du remoteBook
Le script générant ce bundle est déjà présent (apps/bookshelf-bundle/scripts/build.mts
).
Il vous reste donc à modifier la configuration.
- Déplacez le script
serve
(qui ne fonctionnait plus depuis l'étape 01 😱) vers le nouveau packagebookshelf-bundle
.
"scripts": {
"build": "NODE_ENV=production webpack",
"dev": "webpack serve",
"lint": "eslint src/",
- "serve": "serve -s -p 4000 ./dist",
"tscheck": "tsc --noEmit"
},
"scripts": {
"build": "NODE_ENV=production ts-node-esm --swc -- ./scripts/build.mts",
"lint": "eslint scripts/",
+ "serve": "serve -s -p 4000 ./dist",
"tscheck": "tsc --noEmit"
},
- Ajoutez le script
build
sur les remotes.
"scripts": {
+ "build": "NODE_ENV=production webpack",
"dev": "webpack serve",
"lint": "eslint src/",
"tscheck": "tsc"
},
"scripts": {
+ "build": "NODE_ENV=production webpack",
"dev": "webpack serve",
"lint": "eslint src/",
"tscheck": "tsc"
},
- Mettez à jour la configuration du plugin Module Federation pour utiliser les urls
/remote/xxx
en production.
-const {createConfig} = require('webpack-config')
+const {createConfig, isProd} = require('webpack-config')
// ...
},
remotes: {
- book: 'book@//localhost:3002/remoteEntry.js',
+ book: `book@${isProd ? '/remote/book' : '//localhost:3002'}/remoteEntry.js`,
},
shared: {
-const {createConfig} = require('webpack-config')
+const {createConfig, isProd} = require('webpack-config')
// ...
name: 'bookshelf',
remotes: {
- booklist: 'booklist@//localhost:3001/remoteEntry.js',
- book: 'book@//localhost:3002/remoteEntry.js',
+ booklist: `booklist@${isProd ? '/remote/booklist' : '//localhost:3001'}/remoteEntry.js`,
+ book: `book@${isProd ? '/remote/book' : '//localhost:3002'}/remoteEntry.js`,
},
shared: {
- Vérifiez que vos modifications fonctionnent en lançant le script
serve
.
pnpm serve
Les scripts build
seront automatiquement exécutés grâce à notre configuration Turborepo.
Rendez vous sur localhost:4000.
Jetez un oeil sur le chargement des fichiers dans l'onglet Network de vos devtools.
Bonus
Rendre le script plus générique et éviter d'avoir tous les chemins en dur.
Solution
Pour accéder à la solution :
git checkout --force step-06-result
Pour voir les changements :
git diff step-06..step-06-result
ou sur Github.