Mit npm können wir angeben bundledDependencies
, aber was sind die Vorteile davon? Ich denke, wenn wir unbedingt sicherstellen wollen, dass wir die richtige Version erhalten, auch wenn das Modul, auf das wir verweisen, gelöscht wird, oder wenn die Bündelung einen Geschwindigkeitsvorteil bietet?
Kennt jemand die Vorteile bundledDependencies
gegenüber normalen Abhängigkeiten?
node.js
npm
dependencies
Balupton
quelle
quelle
Antworten:
Eines der größten Probleme bei Node ist derzeit, wie schnell es sich ändert. Dies bedeutet, dass Produktionssysteme sehr zerbrechlich sein und
npm update
leicht kaputt gehen können.Die Verwendung von bundledDependencies ist eine Möglichkeit, dieses Problem zu umgehen, indem Sie, wie Sie richtig vermuten, sicherstellen, dass Sie immer die richtigen Abhängigkeiten bereitstellen, unabhängig davon, was sich sonst noch ändert.
Sie können dies auch verwenden, um Ihre eigenen, privaten Bundles zu bündeln und mit der Installation zu liefern.
quelle
npm update
dass keine Abhängigkeiten in bundledDependencies beeinflusst werden?Für den schnellen Leser : In dieser Qualitätssicherung gehtes um dasFeld package.json bundledDependencies, nicht um das Paket .
Was bundledDependencies tun
"bundledDependencies" sind genau das, was ihr Name impliziert. Abhängigkeiten, die sich in Ihrem Projekt befinden sollten. Die Funktionalität entspricht also im Wesentlichen den normalen Abhängigkeiten. Sie werden auch beim Laufen verpackt
npm pack
.Wann man sie benutzt
Normale Abhängigkeiten werden normalerweise aus der npm-Registrierung installiert. Daher sind gebündelte Abhängigkeiten nützlich, wenn:
Auf diese Weise müssen Sie kein eigenes npm-Repository erstellen (und verwalten), sondern erhalten dieselben Vorteile wie npm-Pakete.
Wann keine gebündelten Abhängigkeiten verwendet werden sollen
Bei der Entwicklung denke ich jedoch nicht, dass der Hauptpunkt darin besteht, versehentliche Updates zu verhindern. Wir haben dafür bessere Tools, nämlich Code-Repositorys (git, mercurial, svn ...) oder sperren jetzt Dateien.
Um Ihre Paketversionen zu pinnen, können Sie Folgendes verwenden:
Option 1: Verwenden Sie die neuere NPM-Version 5, die mit Knoten 8 geliefert wird . Sie verwendet eine
package-lock.json
Datei (siehe Knoten-Blog und Version von Knoten 8).Option 2: Verwenden Sie Garn anstelle von
npm
. Es ist ein Paketmanager von Facebook, schneller alsnpm
und es verwendet eineyarn.lock
Datei.package.json
Ansonsten wird dasselbe verwendet .npm
tatsächlich kopierte diese Funktionyarn
unter anderem von.npm shrinkwrap
meiste Zeit zu verwenden und manchmal das Ganze, einschließlich des Ordners node_module, in Ihr Code-Repository zu stellen. Oder verwenden Sie möglicherweise Shrinkpack . Die damaligen Best Practices wurden im node.js-Blog und auf den freudigen Entwickler- Websites diskutiert .Siehe auch
Dies liegt etwas außerhalb des Rahmens der Frage, aber ich möchte die letzte Art von Abhängigkeiten erwähnen (von denen ich weiß): Peer-Abhängigkeiten . Siehe auch diese verwandte SO-Frage und möglicherweise die Dokumente zu
yarn
on bundledDependencies .quelle
npm install -g shrinkpack
Tool automatisieren .Ein weiterer Vorteil ist, dass Sie Ihre internen Abhängigkeiten (Anwendungskomponenten) dort ablegen und sie dann einfach in Ihrer App benötigen können, als wären sie unabhängige Module, anstatt Ihre lib / zu überladen und sie in npm zu veröffentlichen.
Wenn sie bis zu dem Punkt gereift sind, an dem sie als separate Module leben könnten, können Sie sie einfach auf npm setzen, ohne Ihren Code zu ändern.
quelle
Ich bin überrascht, dass ich dies hier noch nicht gesehen habe, aber wenn es sorgfältig ausgewählt wird,
bundledDependencies
kann es verwendet werden, um ein verteilbares Paket daraus zu erstellennpm pack
, das auf einem System ausgeführt wird, auf demnpm
es nicht konfiguriert ist. Dies ist hilfreich, wenn Sie zB ein System haben, das nicht vernetzt ist / nicht im Internet: Bringen Sie Ihr Paket auf einen USB-Stick (oder was auch immer) und packen Sie den Tarball aus, dannnpm run
odernode index.js
und es funktioniert einfach.Vielleicht gibt es eine bessere Möglichkeit, Ihre Anwendung so zu bündeln, dass sie "offline" ausgeführt wird, aber wenn ja, habe ich sie nicht gefunden.
quelle
Operativ betrachte ich bundledDependencies als den privaten Modulspeicher eines Moduls, in dem Abhängigkeiten öffentlicher sind und zwischen Ihrem Modul und seinen Abhängigkeiten (und Unterabhängigkeiten) aufgelöst werden. Ihr Modul basiert möglicherweise auf einer älteren Version von beispielsweise "Reagieren", für eine Abhängigkeit ist jedoch die neueste und größte Version erforderlich. Ihr Paket / Ihre Installation führt zu Ihrer angehefteten Version
node_modules/$yourmodule/node_modules/react
, während Ihre Abhängigkeit ihre Version erhältnode_modules/react
(odernode_modules/$dependency/node_modules/react
wenn sie so geneigt sind).Eine Einschränkung: Ich bin kürzlich auf eine Abhängigkeit gestoßen, die ihre Abhängigkeit von "Reagieren" nicht richtig konfiguriert hat, und nachdem ich in "BundledDependencies" reagiert habe, ist dieses abhängige Modul zur Laufzeit fehlgeschlagen.
quelle