J'ai travaillé sur la création d'une petite bibliothèque de composants React pour une utilisation dans plusieurs autres projets. Je publie le package en interne (en utilisant un référentiel GitHub privé), puis en l'incluant dans un autre projet. Cependant , lorsque je vais importer à partir d'un sous-répertoire du package, je ne peux pas le faire car les chemins ne correspondent pas.
Les projets utilisant le package utilisent tous webpack pour regrouper/transpiler du code car j'essaye d'éviter de faire tout bâtiment dans la bibliothèque de composants si possible.
- package.json
- src/
- index.js
- Button/
- index.js
- Button.jsx
- ButtonGroup.jsx
- Header/
- index.js
- Header.jsx (default export)
package.json
...
"main": "./src/index.js",
"scripts": "",
...
src/Button/index.js
import Button from './Button';
import ButtonGroup from './ButtonGroup';
export default Button;
export { Button, ButtonGroup};
src/index.js
Ce fichier est-il réellement nécessaire si vous importez uniquement à partir de sous-répertoires?
import Button from './Button';
import ButtonGroup from './Button/ButtonGroup';
import Header from './Header';
export { Button, ButtonGroup, Header };
Autre projet
// This project is responsible for building/transpiling after importing
import { Button, ButtonGroup } from 'components-library/Button';
Material-UI est une bibliothèque de composants React) qui est utilisée en exigeant de la manière suivante: import { RadioButtonGroup } from 'material-ui/RadioButton
. J'ai essayé de comprendre comment cela fonctionne pour eux, mais en vain pour le moment.
src/
répertoire, que j'essaye d'éviter (devrait être component-library/item
, ne pas component-library/src/item
(qui fonctionne actuellement)src/
répertoire en quelque sorte dans le chemin d'importation?La réponse peut dépendre de la façon dont vous avez installé votre bibliothèque de composants. Si vous l'avez fait via npm install <git-Host>:<git-user>/<repo-name>
ou npm install <git repo url>
,
Tu devrais être capable de import {Button} from 'component-library/Button'
tel quel, selon votre première question liée . Semblable à résolution require () du nœud , Webpack doit résoudre les sous-répertoires de la bibliothèque de composants par rapport au point d'entrée de la bibliothèque de composants. Vous pouvez trouver les documents sur la personnalisation du comportement de résolution via la propriété webpack.config.resolve . material-ui semble dépendre de la résolution des importations de sous-répertoire à partir du répertoire d'entrée du module.
Pour distribuer une bibliothèque de modules ES, il n'est pas nécessaire de construire avant la distribution. Cependant, des projets tels que create-react-app peuvent nécessiter une version pré-transpilée.
Vous pouvez également écrire import {Button} from 'components-library'
. Webpack retracera les dépendances à travers chaque index
sans problème.