Ich möchte das grunt-contrib-jasmine
NPM-Paket verwenden. Es hat verschiedene Abhängigkeiten. Ein Teil des Abhängigkeitsdiagramms sieht folgendermaßen aus:
─┬ grunt-contrib-jasmine@0.4.1
│ ├─┬ grunt-lib-phantomjs@0.2.0
│ │ ├─┬ phantomjs@1.8.2-2
Leider gibt es in dieser Version einen Fehler, phantomjs
der die korrekte Installation unter Mac OS X verhindert. Dies ist in der neuesten Version behoben.
Wie kann ich grunt-lib-phantomjs
eine neuere Version von verwenden phantomjs
?
Ein zusätzlicher Kontext:
grunt-contrib-jasmine
erfordert explizit die Version"~0.2.0"
vongrunt-lib-phantomjs
, die explizit die Version"~1.8.1"
von erfordertphantomjs
.- Das
phantomjs
erstmalige Hinzufügen zu den Abhängigkeiten meines Pakets hat keine Auswirkung. Beide Versionen sind installiert und verwendengrunt-contrib-jasmine
weiterhin die älteren Versionen (siehe: Wenn Sie ein Paket mit NPM installieren, können Sie ihm mitteilen, dass eine andere Version einer seiner Abhängigkeiten verwendet werden soll? ).
git clone
oder Gabel benötigt Modul. Sie können verschachteltephantomjs
Dateien auch manuell entfernen .grunt-contrib-jasmine
ist auf 0.5.1, die verwendet[email protected]
, die verwendet[email protected]
:)Antworten:
Sie können die npm-Shrinkwrap- Funktion verwenden, um Abhängigkeiten oder Unterabhängigkeiten zu überschreiben.
Ich habe das gerade in einem Grunzprojekt von uns gemacht. Wir brauchten eine neuere Version von connect seit 2.7.3. hat uns Ärger gemacht. Also habe ich eine Datei mit dem Namen npm-shrinkwrap.json erstellt:
npm sollte es während der Installation für das Projekt automatisch abholen.
(Siehe: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ )
quelle
grunt-contrib-connect
Abhängigkeit und ihre untergeordneten Elemente installiert. Alle meine anderen Abhängigkeiten in package.json sind nicht installiert.node_modules
Am Ende habe ich das Verzeichnis so bearbeitet , dass der vollständige Shrinkwrap-Abhängigkeits-Dump genau das war, was ich wollte, und nicht nur Überschreibungen. Aber immer noch eine Art schmerzhafte Lösung.node_modules
scheint das Ausführen einer Installation mit einem minimalen ShrinkwrapdevDependencies
intakt zu bleiben, obwohl es ignoriertdependencies
wird. Wenn Sie jedoch eine andere Installation ausführen, werden die nicht expliziten Elemente entfernt. Daher ist es vorerst wichtignpm shrinkwrap
, eine vollständige Datei abzurufen, den betreffenden Teil zu ändern und dannnpm install
wieder laufen )Für Benutzer ab 2018, die npm Version 5 oder höher verwenden: Bearbeiten Sie Ihre
package-lock.json
: Entfernen Sie die Bibliothek aus dem"requires"
Abschnitt und fügen Sie sie unter "Abhängigkeiten" hinzu.Sie möchten beispielsweise, dass das
deglob
Paket dieglob
Paketversion3.2.11
anstelle der aktuellen verwendet. Sie öffnenpackage-lock.json
und sehen:Entfernen Sie
"glob": "7.1.2",
aus"requires"
, fügen Sie"dependencies"
mit der richtigen Version:Entfernen Sie nun Ihren
node_modules
Ordner, führen Sie ihn ausnpm install
und es werden fehlende Teile zum"dependencies"
Abschnitt hinzugefügt .quelle
npm install
läuft. In meinem Fall sind die Änderungen erforderlich, da die verschachtelte Dep einen Fehler verursacht.npm i
jedes Mal entfernt, wenn Sie ausführen, anstatt Ihre package-lock.json zu bearbeiten und die untergeordnete Abhängigkeit zu "Abhängigkeiten" hinzuzufügen. Fügen Sie die untergeordnete Abhängigkeit zu Ihrem package.json-Abschnitt "Abhängigkeiten" hinzunpm install
dannpackage-lock.json
wieder starte dann werden alle Änderungen rückgängig gemacht und ich bekomme die schlechte Version der Dep zurück.npm ci
package-lock.json
Für diejenigen, die Garn verwenden.
Ich habe versucht, npm shrinkwrap zu verwenden, bis ich herausfand, dass das Garn cli meine Datei npm-shrinkwrap.json ignorierte.
Yarn hat dafür https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ . Ordentlich.
Überprüfen Sie auch diese Antwort: https://stackoverflow.com/a/41082766/3051080
quelle
Ich hatte ein Problem, bei dem eine der verschachtelten Abhängigkeiten eine Sicherheitsanfälligkeit bezüglich der npm-Prüfung aufwies, aber ich wollte trotzdem die übergeordnete Abhängigkeitsversion beibehalten. Die Shrinkwrap-Lösung von npm hat bei mir nicht funktioniert. Was ich also getan habe, um die verschachtelte Abhängigkeitsversion zu überschreiben:
quelle
NPM Shrinkwrap bietet eine gute Lösung für dieses Problem. Es ermöglicht uns, diese Version einer bestimmten Abhängigkeit eines bestimmten Untermoduls zu überschreiben.
Wenn Sie npm install ausführen, überprüft npm im Wesentlichen zunächst in Ihrem Stammverzeichnis, ob eine Datei npm-shrinkwrap.json vorhanden ist. Wenn dies der Fall ist, wird dies zuerst verwendet, um die Paketabhängigkeiten zu bestimmen und dann zum normalen Prozess des Durcharbeitens der package.json-Dateien zurückzukehren.
Um eine npm-shrinkwrap.json zu erstellen, müssen Sie nur noch etwas tun
Code:
quelle
Ich habe eine Lösung gefunden, die für mich funktioniert.
So. Bearbeiten Sie zuerst Ihre Datei npm-shrinkwrap.json wie von allen anderen Lösungen empfohlen.
Dann (unter Windows):
Die anderen vorgeschlagenen Lösungen sind gut genug, wenn Sie die 'npm-Installation' nur einmal ausführen. Nach der ersten 'npm-Installation' wird die Datei 'npm-shrinkwrap.json' jedoch erneut wie vor Ihrer Änderung geändert.
quelle