Ich konvertiere eine Bibliothek ( ng-app-state ), um die angular cli zu verwenden, jetzt, da v6 Bibliotheken unterstützt (yay! ).
Nach dem Gerüstbau und dem Kopieren von Code ist hier meine erste Frage:
Wie/wo füge ich Abhängigkeiten von Drittanbietern hinzu?
Zu package.json
, oder zu projects/ng-app-state/package.json
?
Es stellt sich heraus, dass die Antwort "beides" ist. Das Verständnis der Antwort ergibt sich daraus:
package.json
Wird während der Entwicklung verwendet. Sie installieren hier tatsächlich alle Bibliotheken für Ihren eigenen Gebrauch, einschließlich der Bibliotheken, die Benutzer ebenfalls benötigen. Sie sollten nur ein node_modules/
- Verzeichnis im Stammverzeichnis Ihres Projekts haben, nicht im Bibliotheksverzeichnis (also nur npm install
Und ähnliches hier ausführen).projects/ng-app-state/package.json
Wird in npm bereitgestellt (mit einigen zusätzlichen Feldern, die vom Erstellungsprozess hinzugefügt wurden). Kopieren Sie also die dependencies
und/oder peerDependencies
, die Benutzer Ihrer Bibliothek benötigen. Es macht keinen Sinn, devDependencies
hierher zu setzen.Das ist die vollständige Antwort. Lesen Sie weiter, um ein Beispiel zu sehen.
In meinem Fall hat package.json
Eine lange Liste von vielen dependencies
und devDependencies
(Sie können es sehen hier ), aber all dies wirkt sich nur auf mich aus (und jeder, der einen Beitrag zu ng-app-state
leisten möchte). projects/ng-app-state/package.json
Ist viel kleiner und dies betrifft Benutzer meiner Bibliothek:
{
"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"
}
}
Nachdem Sie ng build np-app-state --prod
Ausgeführt haben, um das zu generieren, was für npm freigegeben wird, endet dies in dist/ng-app-state/
(Was veröffentlicht werden sollte):
{
"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"
}
}
Es sollte in package.json
Als peerDependencies
hinzugefügt werden
Die Abhängigkeiten von Drittanbietern sollten in dependencies
von projects/ng-app-state/package.json
Platziert werden.
Wenn die Abhängigkeiten von Drittanbietern jedoch auch ng 6 unterstützen, haben Sie eine andere Frage und mehr Komplexität als in dieser Frage angegeben. Ich werde kurz sagen, dass Sie möglicherweise ng update für ihre Bibliotheken aufrufen oder Schaltpläne entwickeln müssen, die sie aufrufen, die erwarten, dass ihre ng 6-Version der Bibliothek vorhanden ist.