Je suis en train de convertir une bibliothèque ( ng-app-state ) pour utiliser le angular cli, maintenant que la v6 prend en charge les bibliothèques (yay!).
Après avoir échafaudé et copié du code, voici ma première question:
Comment/où puis-je ajouter des dépendances tierces?
Pour package.json
ou pour projects/ng-app-state/package.json
?
Il s'avère que la réponse est un peu "les deux". Comprendre la réponse provient de ceci:
package.json
est ce qui sera utilisé lors du développement. En fait, vous installez ici toutes vos bibliothèques pour votre propre usage, y compris celles dont les utilisateurs auront également besoin. Vous ne devriez avoir qu'un répertoire node_modules/
à la racine de votre projet, pas dans le répertoire de la bibliothèque (donc, exécutez uniquement npm install
et similaire ici).projects/ng-app-state/package.json
est ce qui sera déployé sur npm (avec quelques champs supplémentaires ajoutés par le processus de construction). Copiez donc dans le dependencies
et/ou peerDependencies
dont les utilisateurs de votre bibliothèque auront besoin. Il est inutile de placer devDependencies
ici.C'est la réponse complète. Lisez la suite pour voir un exemple.
Dans mon cas, package.json
a une longue liste de beaucoup dependencies
et devDependencies
(vous pouvez le voir ici ), mais tout cela ne me touche (et qui veut contribuer à ng-app-state
). projects/ng-app-state/package.json
est beaucoup plus petit, et c'est ce qui affecte les utilisateurs de ma bibliothèque:
{
"name": "ng-app-state",
"version": "8.0.0",
"author": "Simonton Software",
"license": "MIT",
"repository": "simontonsoftware/ng-app-state",
"peerDependencies": {
"@angular/common": ">=6.0.0 <7.0.0",
"@angular/core": ">=6.0.0 <7.0.0",
"@ngrx/store": ">=6.0.0 <7.0.0",
"micro-dash": ">=3.5.0 <4.0.0"
}
}
Après avoir exécuté ng build np-app-state --prod
pour générer ce qui sera publié dans npm, voici ce qui aboutira dans dist/ng-app-state/
(qui devrait être publié):
{
"name": "ng-app-state",
"version": "8.0.0",
"author": "Simonton Software",
"license": "MIT",
"repository": "simontonsoftware/ng-app-state",
"peerDependencies": {
"@angular/common": ">=6.0.0 <7.0.0",
"@angular/core": ">=6.0.0 <7.0.0",
"@ngrx/store": ">=6.0.0 <7.0.0",
"micro-dash": ">=3.5.0 <4.0.0"
},
"main": "bundles/ng-app-state.umd.js",
"module": "fesm5/ng-app-state.js",
"es2015": "fesm2015/ng-app-state.js",
"esm5": "esm5/ng-app-state.js",
"esm2015": "esm2015/ng-app-state.js",
"fesm5": "fesm5/ng-app-state.js",
"fesm2015": "fesm2015/ng-app-state.js",
"typings": "ng-app-state.d.ts",
"metadata": "ng-app-state.metadata.json",
"sideEffects": false,
"dependencies": {
"tslib": "^1.9.0"
}
}
Il devrait être ajouté dans package.json
comme peerDependencies
Les dépendances de tiers doivent être placées dans dependencies
de projects/ng-app-state/package.json
Toutefois, si les dépendances tierces prennent également en charge la version 6, vous avez une question différente et une complexité accrue qui dépasse le cadre de cette question. Je dirai brièvement que vous devrez peut-être appeler ng update sur leurs bibliothèques ou développer des schémas appelant les leurs qui s'attendent à ce que leur version ng 6 de la bibliothèque soit présente.