-
Notifications
You must be signed in to change notification settings - Fork 10
Tech : passage à Parcel v2 #777
Conversation
2db741f
to
a0cc8b6
Compare
Peut-être des choses à piocher ici https://www.tomspencer.dev/blog/2020/05/22/its-2020-lets-build-a-node.js-app-with-typescript/ |
Il reste des problèmes que je ne sais pas trop résoudre quand le scope hoisting est activé... |
c3f4316
to
6e796a3
Compare
@davidbgk Suite à notre discussion j’ai refait une petite passe sur le service worker (c’était bien ça les 404) et la manière de contrôler le nommage des bundles. |
Je viens de regarder et niveau perfs on est très sensiblement sur les mêmes valeurs 💪 |
Dans le log du build, j'ai deux choses qui m'interpellent :
Et aussi le
Est-ce que tu as le même comportement @ronnix ? |
Oui, je n'ai pas trop creusé ces logs. Mon impression intuitive était qu'un même fichier était peut être importé à plusieurs endroits, mais qu'à la fin ça se résolvait en un seul fichier. |
J’ai squashé les commits car sinon c’est chiant à rebaser, mais j’ai compilé toutes les notes dans le message. |
d30479f
to
372374c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👏 🙇
https://github.com/parcel-bundler/parcel/releases/tag/v2.5.0 https://www.npmjs.com/package/parcel/v/2.5.0 == Notes de migration == - Par défaut, Parcel v2 utilise swc au lieu de Babel pour la transpilation Avantage : c’est plus rapide. Par contre, l’utilisation des tagged template litterals conduit à la génération de code qui déclenche une erreur dans terser (le minifieur) : parcel-bundler/parcel#7101 On contourne le problème en écrivant différemment notre code pour échapper le nom du profil dans le HTML généré dynamiquement. - Depuis la 2.4.0, Parcel utilise @parcel/css au lieu de PostCSS (cf. https://parceljs.org/blog/v2-4-0/) - On met à jour les anciens plugins (changement d’API) : - on remplace le plugin [parcel-plugin-static-files-copy](https://www.npmjs.com/package/parcel-plugin-static-files-copy) par [parcel-reporter-static-files-copy](https://www.npmjs.com/package/parcel-reporter-static-files-copy) - on remplace [parcel-plugin-ogimage](https://www.npmjs.com/package/parcel-plugin-ogimage) par [parcel-optimizer-ogimage](https://www.npmjs.com/package/parcel-optimizer-ogimage) - on remplace [parcel-plugin-html-externals](https://www.npmjs.com/package/parcel-plugin-html-externals) par [parcel-resolver-ignore](https://www.npmjs.com/package/parcel-resolver-ignore) - on active le plugin standard `@parcel/resolver-glob` pour utiliser des imports `*` comme dans Parcel V1. - on remplace le plugin [parcel-plugin-sw-asset-urls](https://www.npmjs.com/package/parcel-plugin-sw-asset-urls) par le plugin standard `@parcel/service-worker` (ce qui évite de devoir maintenir à la main la liste de fichiers à mettre en cache) - On s’assure que les noms des bundles soient mcc.XXX.(css|js) Les règles de nommage par défaut de Parcel utilisent l’arbre d’import pour déterminer quel est le nom du fichier racine : https://github.com/parcel-bundler/parcel/blob/v2/packages/namers/default/src/DefaultNamer.js Cela donne des noms un peu arbitraires pour les bundles CSS et JS. On utilise le plugin `parcel-namer-rewrite` pour forcer un nom plus explicite : https://www.npmjs.com/package/parcel-namer-rewrite - On normalise les liens dans les fichiers sources : - lien absolu "/" pour aller vers la page d’accueil - lien relatif "toto.html" pour aller vers une autre page Note: des liens absolus seront bien générés par Parcel au final. - On ajoute un lien vers le fichier `browserconfig.xml` - On note que deux versions du JS sont générées : - une pour les navigateurs modernes capables de charger un script de type "module" - une option de repli pour les navigateurs plus anciens cf. https://parceljs.org/features/targets/#differential-bundling
https://github.com/parcel-bundler/parcel/releases/tag/v2.5.0
https://www.npmjs.com/package/parcel/v/2.5.0
Infos
Notes de migration
Par défaut, Parcel v2 utilise swc au lieu de Babel pour la transpilation
Avantage : c’est plus rapide. Par contre, l’utilisation des tagged template litterals conduit à la génération de code qui déclenche une erreur dans terser (le minifieur) : Build fails if more than one file includes a tagged template literal parcel-bundler/parcel#7101
On contourne le problème en écrivant différemment notre code pour échapper le nom du profil dans le HTML généré dynamiquement.
Depuis la 2.4.0, Parcel utilise @parcel/css au lieu de PostCSS (cf. https://parceljs.org/blog/v2-4-0/)
On met à jour les anciens plugins (changement d’API) :
on remplace le plugin parcel-plugin-static-files-copy par parcel-reporter-static-files-copy
on remplace parcel-plugin-ogimage par parcel-optimizer-ogimage
on remplace parcel-plugin-html-externals par parcel-resolver-ignore
on active le plugin standard
@parcel/resolver-glob
pour utiliser des imports*
comme dans Parcel V1.on remplace le plugin parcel-plugin-sw-asset-urls par le plugin standard
@parcel/service-worker
(ce qui évite de devoir maintenir à la main la liste de fichiers à mettre en cache)On s’assure que les noms des bundles soient mcc.XXX.(css|js)
Les règles de nommage par défaut de Parcel utilisent l’arbre d’import pour déterminer quel est le nom du fichier racine : https://github.com/parcel-bundler/parcel/blob/v2/packages/namers/default/src/DefaultNamer.js
Cela donne des noms un peu arbitraires pour les bundles CSS et JS.
On utilise le plugin
parcel-namer-rewrite
pour forcer un nom plus explicite : https://www.npmjs.com/package/parcel-namer-rewriteOn normalise les liens dans les fichiers sources :
Note: des liens absolus seront bien générés par Parcel au final.
On ajoute un lien vers le fichier
browserconfig.xml
On note que deux versions du JS sont générées :
cf. https://parceljs.org/features/targets/#differential-bundling