Aufgrund von https://github.com/npm/npm/issues/2943 unterstützt npm niemals die Möglichkeit, Pakete zu aliasen und mehrere Versionen desselben Pakets zu installieren.
Die im Github-Problem veröffentlichten Problemumgehungen funktionieren möglicherweise für reine JS-Module. Da npm jedoch zum Standard für die Verwaltung von Frontend-Paketen wird, enthalten Pakete jetzt verschiedene Elemente wie CSS.
Gibt es eine Problemumgehung, um mehrere Versionen desselben Pakets zu installieren?
Die beste Idee, die ich mir ausgedacht habe, ist, ein Paket zu "klonen" und es unter einem etwas anderen Namen zu veröffentlichen.
Zum Beispiel, wenn Sie mehrere Versionen benötigen jquery
, könnten Sie nur Pakete genannt veröffentlichen jquery-alias1
, jquery-alias2
, jquery-alias3
etc, und dann die entsprechenden Versionen in Ihrem gesetzt package.json
.
Oder Sie könnten die Pakete entsprechend ihrer Versionsnummer nennen, zum Beispiel jquery-1.11.x
, jquery-2.1.x
, etc ..
Beide Ansätze scheinen jedoch schlampig. Gibt es bessere?
Antworten:
Ab npm v6.9.0 unterstützt npm jetzt Paketaliasnamen . Es implementiert dieselbe Syntax wie Yarn:
Dies fügt Folgendes hinzu
package.json
:Mit dieser Syntax kann auch direkt von Github aus installiert werden. Wenn Sie beispielsweise sowohl die npm-Registrierungsversion als auch einen Github-Fork des Pakets installieren möchten
foobar
:quelle
eslint
, aber nicht wusste, dass er jetzt benannt wurdeeslint6
Ich wollte hier für jemanden wie mich posten, der Garn verwendet und hier gelandet ist. Es ist ein mehr oder weniger Drop-In-Ersatz für NPM, der sofort einsatzbereites Aliasing unterstützt:
(Gutschrift geht zum Beispiel an https://github.com/callemall/material-ui/issues/7195#issuecomment-314547601 )
quelle
<alternative-name>@npm:<package-name>@<version>
Es klingt so, als ob "JSPM" genau das Werkzeug ist, nach dem Sie suchen. JSPM baut auf NPM auf, ermöglicht es Ihnen jedoch, Pakete aus mehreren Quellen (github, npm usw.) abzurufen. Es verwendet den universellen Modullader System.js am Frontend zum Laden von Modulen und "verwendet die flache Versionsverwaltung zum Herunterladen in Ordner mit Versionssuffix", über die leicht nachzudenken ist.
jspm.io
Wenn Sie ein Paket mit jspm installieren, können Sie dieses Paket auf einen bestimmten Namen aliasen, den Sie später
require
speziell in Ihren Modulen verwenden können.Dann können Sie in Ihrem js einfach
require(jquery)
und / oderrequire(jqueryOne)
nach Bedarf, so dass Sie nach Bedarf hin und her gehen können.Dies gilt auch für alle Pakete, von denen Sie mehrere Versionen verwenden möchten.
quelle
Dies ist aufgrund der Funktionsweise von npm ziemlich schwierig sauber zu machen, daher würde ich vermeiden, es in der Produktion zu versuchen.
Doch für die Integrationstests und ähnliche Anwendungsfälle, habe ich ein Paket namens multidep , die mehrere Versionen des gleichen Pakets und installieren können
require
sie gerne so:quelle
Die NPM-Installationsversion ( https://github.com/scott113341/npm-install-version ) ist ebenfalls eine Option. Es macht im Wesentlichen das, was einige der anderen Lösungen hier tun (technisch gesehen), ist aber recht einfach zu verwenden. Module, die mit einer Versionsnummer installiert sind (von NPM verwendeter Standardbefehlsparameter @version), werden voraussichtlich in einem Unterordner unter node_modules mit diesem Namen installiert . Sie können auch das Zielverzeichnis pro Modul steuern - was bei Buildsystemen hilfreich ist.
Verwendungscode-Snippet aus den GitHub-Dokumenten:
quelle
install-npm-version
( https://github.com/scott-lin/install-npm-version ) ist eine weitere Option. Es kann in der Befehlszeile oder über eine programmgesteuerte Oberfläche verwendet werden - geschrieben in TypeScript für die moderne Entwicklung.Beispiel 1: Installation in ein versioniertes (Standard-) Verzeichnis
Beispiel 2: In benutzerdefiniertes Verzeichnis installieren
Beispiel 3: Installation mit leiser oder lauter Standardausgabe
Beispiel 4: Überschreiben Sie eine vorhandene Installation
quelle
In meinem Fall musste ich eine ältere Version von create-react-app installieren als die Version, die ich global installiert hatte, da ich einen Kurs belegte, für den diese ältere Version für die Aufgaben erforderlich war.
Ich habe einen neuen Ordner erstellt, um diese ältere Version zu enthalten, habe eine CD hineingelegt und eine erstellt
Nachdem ich diese Shell package.json eingerichtet hatte, installierte ich genau die Version der create-react-app, die ich brauchte
Dadurch wurde ein lokaler Ordner node_modules mit der älteren Version von create-react-app erstellt.
Dann habe ich ein einfaches Bash-Skript (create-react-app.sh) als Verknüpfung zu dieser älteren Version erstellt und die Bash-Variable "$ @" verwendet, um alle Argumente weiterzuleiten:
Schließlich habe ich dieses einfache Bash-Skript ausführbar gemacht
Wenn Sie dieses Bash-Skript direkt ausführen, wird die ältere Version der create-react-app ausgeführt:
quelle