711 Stimmen

Wie kann ich verschachtelte NPM-Abhängigkeitsversionen außer Kraft setzen?

Ich würde gerne die grunt-contrib-jasmine NPM-Paket. Es hat verschiedene Abhängigkeiten. Ein Teil des Abhängigkeitsgraphen sieht wie folgt 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 was eine korrekte Installation unter Mac OS X verhindert. Dies ist in der neuesten Version behoben.

Wie kann ich die grunt-lib-phantomjs zur Verwendung einer neueren Version von phantomjs ?

Einige zusätzliche Informationen:

12voto

Basierend auf dem Rest der Antworten, biete ich die gleiche Lösung, aber ich zeige die package.json, wie ich ein wenig auf, wo die Überschreibung und wie zu platzieren kämpfte.

{
  "name": "my-app",
  "version": "snapshot",
  "scripts": {
    "ng": "ng",
    "build-dev": "ng build --configuration development",
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "~14.2.9",
    "@angular/common": "~14.2.9"
    ...
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^14.2.8",
    ....
  },
  "overrides": {  
    "loader-utils@>2.0.0 <3": "2.0.4",
    "loader-utils@>3.0.0 <4": "3.2.1"
  }
}

Für die Sicherheitslücke "loader-utils" vom November 2022 wurde beantragt, dass

  • verwenden Sie die Version 2.0.4, wenn Sie in der 2.X
  • verwenden Sie die Version 3.2.1, wenn Sie in der 3.X

Und um zu überprüfen

  • Fügen Sie der package.json das Überschreibungs-Tag hinzu
  • die Datei package-lock.json löschen
  • npm install" ausführen
  • npm audit" ausführen

11voto

Justin Dehorty Punkte 948

Verschachtelte Ersetzung durch ein völlig anderes Paket

Die meisten der Strategien, die in den anderen Antworten hier beschrieben wurden, funktionieren gut, wenn Sie nur daran interessiert sind, die Versionsnummer des Pakets zu überschreiben, aber in unserem Fall mussten wir einen Weg finden, eine verschachtelte npm-Unterabhängigkeit mit einer anderes Paket insgesamt. Warum Sie das überhaupt tun sollten, erfahren Sie in der folgenden Frage:

Wie kann man eine verschachtelte npm-Sub-Abhängigkeit mit einem ganz anderen Paket überschreiben (nicht nur mit einer anderen Paketversionsnummer)?

Geben Sie den Tarball direkt an

Für die verschachtelte Ersetzung eines Pakets durch ein völlig anderes Paket unter Verwendung der npm-force-resolutions Strategie, die bereits von anderen erwähnt wurde, müssen Sie lediglich einen Link zu dem Tarball angeben, in dem Sie normalerweise die vorrangige Versionsnummer angeben würden.

Ein Beispiel für den Fall, dass das anfällige Paket ersetzt werden soll, ansi-html mit der festen Abspaltung dieses Pakets, ansi-html-community Ihre Entschließungen in der Rubrik package.json sollte folgendermaßen aussehen:

"resolutions": {
    "ansi-html": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz"
}

Um den Link zum Tarball zu finden, verwenden Sie den folgenden Befehl, wobei Sie Ihre Registrierung nach Bedarf ändern:

npm view ansi-html-community dist.tarball --registry=https://registry.npmjs.org/

Außerdem ist zu beachten, dass für npm-force-resolutions zu arbeiten, wenn Sie npm install benötigen Sie eine preinstall Eintrag unter dem scripts Abschnitt von package.json :

  "scripts": {
    "preinstall": "npx npm-force-resolutions"
  }

3voto

Emilio Venegas Punkte 507

Die Antwort von @user11153 hat bei mir lokal funktioniert, aber wenn ich versuche, eine saubere Installation durchzuführen (aka Löschen von node_modules ), würde ich bekommen:

npm-force-resolutions: command not found

Ich musste die preinstall Skript zu sein:

"preinstall": "npm i npm-force-resolutions && npm-force-resolutions"

Dadurch wird sichergestellt, dass npm-force-resolutions Paket installiert ist, bevor Sie versuchen, es auszuführen.

Wenn Sie allerdings die Möglichkeit haben, stattdessen Garn zu verwenden, würde ich das tun und dann die @Gus 's Antwort .

2voto

Ethan Yang Punkte 31

Ich hatte ein Problem, wo eine der verschachtelten Abhängigkeit eine npm-Audit-Schwachstelle hatte, aber ich wollte immer noch die übergeordnete Abhängigkeit Version beibehalten. die npm Shrinkwrap-Lösung funktionierte nicht für mich, so was ich tat, um die verschachtelte Abhängigkeit Version zu überschreiben:

  1. Entfernen Sie die verschachtelte Abhängigkeit unter dem Abschnitt "requires" in package-lock.json
  2. Fügen Sie die aktualisierte Abhängigkeit unter DevDependencies in package.json hinzu, damit Module, die sie benötigen, weiterhin auf sie zugreifen können.
  3. npm i

2voto

CTS_AE Punkte 10033

Ich wollte gerade in die npm-force-resolutions Route, aber es scheint, dass ich die Abhängigkeit einfach in meine eigene package.json hat das Problem für mich behoben.

Ich glaube, dass dies in meinem Fall funktioniert hat, weil die ursprüngliche Abhängigkeit Patch-Versionen der fraglichen Abhängigkeit zulässt, die ich aktualisieren wollte. Wenn ich also manuell eine neuere Version einfüge, erfüllt sie immer noch die Abhängigkeit der ursprünglichen Abhängigkeit und verwendet die von mir manuell hinzugefügte Version.

Beispiel

Problem

Ich muss aktualisieren plyr zur Version 3.6.9 von 3.6.8

Meine

package.json

{
  "dependencies": {
    "react-plyr": "^3.2.0"
  }
}

React Plyr

package.json

{
  "dependencies": {
    "plyr": "^3.6.8"
  }
}

Hinweis für die plyr Abhängigkeit beginnt es mit ^ Das bedeutet, dass es alle kleineren Patches akzeptieren kann. Mehr darüber können Sie hier erfahren:

https://docs.npmjs.com/about-semantic-versioning#using-semantic-versioning-to-specify-update-types-your-package-can-accept

Aktualisierung der Mine

Damit wird die plyr Abhängigkeit von meiner package.json .

package.json

{
  "dependencies": {
    "plyr": "^3.6.9",
    "react-plyr": "^3.2.0"
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X