Je crée une bibliothèque de composants React partageable.
La bibliothèque contient de nombreux composants, mais l'utilisateur final n'aura peut-être qu'à en utiliser quelques-uns.
Lorsque vous regroupez du code avec Webpack (ou Parcel ou Rollup), il crée un fichier unique avec tout le code .
Pour des raisons de performances, je ne souhaite pas que tout ce code soit téléchargé par le navigateur à moins qu'il ne soit réellement utilisé. Ai-je raison de penser que je ne devrais pas regrouper les composants? L'emballage doit-il être laissé au consommateur des composants? Dois-je laisser autre chose au consommateur des composants? Dois-je simplement transpiler le JSX et c'est tout?
Si le même référentiel contient de nombreux composants différents, que devrait contenir main.js?
imported
dans le code, diminuant ainsi la taille du bundle.Réponses:
Il s'agit d'une réponse extrêmement longue car cette question mérite une réponse extrêmement longue et détaillée, car la méthode des "meilleures pratiques" est plus compliquée qu'une simple réponse en quelques lignes.
Iv'e a maintenu nos bibliothèques internes pendant plus de 3,5 ans pendant cette période iv'e a opté pour deux façons, je pense que les bibliothèques devraient être regroupées, les compromis dépendent de la taille de votre bibliothèque et, personnellement, nous compilons les deux façons de satisfaire les deux sous-ensembles de les consommateurs.
Méthode 1: créez un fichier index.ts avec tout ce que vous souhaitez exposer exporté et rollup cible à ce fichier comme entrée. Regroupez votre bibliothèque entière dans un seul fichier index.js et un fichier index.css; Avec des dépendances externes héritées du projet consommateur pour éviter la duplication du code de bibliothèque. (l'essentiel inclus au bas de l'exemple de configuration)
import { Foo, Bar } from "library"
Méthode 2: c'est pour les utilisateurs avancés: créez un nouveau fichier pour chaque exportation et utilisez rollup-plugin-multi-input avec l'option "preserveModules: true" selon la façon dont le système css que vous utilisez, vous devez également vous assurer que votre css n'est PAS fusionné en un seul fichier mais que chaque fichier css nécessite une instruction (". css") est laissé dans le fichier de sortie après le rollup et ce fichier css existe.
next-transpile-modules
package npm.import { Foo,Bar } from "library"
transformer en babel ...Nous avons plusieurs configurations de cumul où nous utilisons en fait les deux méthodes; Ainsi, pour les consommateurs de bibliothèques qui ne se soucient pas de l'agitation des arbres, il suffit de faire
"Foo from "library"
et d'importer le fichier CSS unique; et pour les consommateurs de bibliothèques qui se soucient de secouer les arbres et qui n'utilisent que des css critiques, ils peuvent simplement activer notre plugin babel.Guide de synthèse des meilleures pratiques:
si vous utilisez tapuscrit ou non TOUJOURS construit avec
"rollup-plugin-babel": "5.0.0-alpha.1"
Assurez-vous que votre .babelrc ressemble à ceci.Et avec le plugin babel en rollup qui ressemble à ceci ...
Et votre package.json ressemblant à ATLEAST comme ceci:
Et enfin, vos externes en résumé ressemblant à ATLEAST comme ceci.
Pourquoi?
Enfin, voici un aperçu d'un exemple de fichier de configuration de cumul de sortie de fichier index.js unique. https://gist.github.com/ShanonJackson/deb65ebf5b2094b3eac6141b9c25a0e3 Où le src / export / index.ts cible ressemble à ceci ...
Faites-moi savoir si vous rencontrez des problèmes avec babel, rollup ou si vous avez des questions sur le regroupement / bibliothèques.
la source
Il est possible de générer des fichiers séparés pour chaque composant. Webpack a une telle capacité en définissant plusieurs entrées et sorties. Disons que vous avez la structure suivante d'un projet
Le fichier Webpack ressemblerait à quelque chose comme ceci
Plus d'informations sur le "fractionnement de code" sont ici dans les documents Webpack
Il y a un seul champ dans le
package.json
fichier nommémain
, il est bon de mettre sa valeur enlib/index.js
fonction de la structure du projet ci-dessus. Et dans leindex.js
fichier, tous les composants sont exportés. Dans le cas où le consommateur souhaite utiliser un seul composant, il est accessible en faisant simplementBien c'est comme tu veux. J'ai constaté que certaines bibliothèques React sont publiées de manière originale, d'autres - sont regroupées. Si vous avez besoin d'un processus de construction, définissez-le et exportez la version groupée.
J'espère que toutes vos questions auront une réponse :)
la source
Vous pouvez diviser vos composants comme le fait lodash pour leurs méthodes.
Ce que vous avez probablement, ce sont des composants séparés que vous pouvez autoriser à importer séparément ou via le composant principal.
Ensuite, le consommateur pourrait importer l'ensemble du colis
ou ses parties individuelles
Les consommateurs créeront leurs propres offres groupées en fonction des composants qu'ils importent. Cela devrait empêcher le téléchargement de votre ensemble.
la source
Vous devriez jeter un œil à Bit , je pense que c'est une bonne solution pour partager, réutiliser et visualiser les composants.
C'est très simple à installer. Vous pouvez installer votre bibliothèque de bits ou simplement un composant avec:
Ensuite, vous pouvez importer le composant dans votre application avec:
La bonne partie est que vous n'avez pas à vous soucier de la configuration de Webpack et de tout ce jazz. Bit prend même en charge la gestion des versions de vos composants. Cet exemple montre un composant réagissant à la liste de titres afin que vous puissiez vérifier s'il répond à vos besoins ou non
la source
Il y a une configuration dans webpack pour créer des fichiers de morceaux. Pour commencer, il créera le paquet principal en plusieurs morceaux et le chargera comme requis. si votre projet a des modules bien structurés, il ne chargera aucun code qui n'est pas requis.
la source