Introduction
Prérequis
Ce projet est un monorepo, il utilise lerna pour gérer les dépendances entre les modules.
Les modules développés se trouvent dans le dossier packages.
Installation
Premièrement, il faut installer les dépendances :
$ npm install
Afin de pouvoir développer les modules, et les utiliser dans une application locale, il faut lier les librairies en développement :
$ sudo npm run link:all
Cela va permettre de créer un lien symbolique entre le dossier courant et le dossier global des modules (/usr/local/lib/node_modules)
Développement
Afin d'utiliser l'un des modules dans une application locale, il faut maintenant lier le module.
Premièrement, il faut installer le projet :
$ npm install
Il faut ensuite lier le ou les modules nécessaires :
$ npm link @creatic/reactic-utils
Cette commande doit être effectuée sur une version de npm < 7. Ceci est dû à un bug sur npm link depuis cette version : https://github.com/npm/cli/issues/2339
Cette commande crée des node_modules dans les sous-dossiers du monorepo (app-1, packages, etc.). Il faut les supprimer.
$ reactic clean:submodules
Vous pouvez maintenant utiliser le module dans votre application locale.
Lorsque vous développez un module, veillez à ne pas faire de dépendances circulaires.
Vérifiez bien les import et les export de vos modules.
Création d'un module
Il faut créer un dossier dans le dossier packages, respectant la structure suivante :
packages
└── my-module
├── README.md
├── package.json
├── src
│ └── index.ts
└── tsconfig.json
Le fichier index.ts doit contenir des exports, correspondant à ce qui doit être exporté par le module.
Si c'est un module typescript, il faut ajouter dans le fichier racine tsconfig.json, une reference
au module:
{
"references": [
{
"path": "./packages/my-module"
}
]
}
Publication
Les linters doivent être passés avant de publier, le cas échéant, la publication ne doit pas être effectuée.
Afin de publier, il faut tout d'abord monter la version de tous les paquets :
$ npm run version
Avant la publication, il faut commiter les montés de versions des paquets.
Ensuite, il faut builder les différents modules :
$ npm run build:all
Puis, publier les paquets :
$ npm run publish
Il faut obligatoirement builder les modules avant de les publier. Le script 'npm run publish' effectue un build des modules avant de les publier.
Troubleshooting
Lors de la construction des modules, j'ai une erreur de type Cannot find module 'react-router-dom' or its corresponding type declarations.
Il faut supprimer tous les node_modules, lancer la commande npm install, puis relancer la commande de build.