Deux versions d'un même package npm dans le Nœud de l'application
Je suis en train de travailler sur un outil CLI en NodeJS qui utilise un autre NodeJs package que nous développons, qui est un kit de développement SDK.
La chose est, nous venons de publier une version V2 de ce SDK, et nous voulons offrir à la CLI de l'utilisateur un mode legacy, de sorte qu'ils peuvent utiliser soit la première ou la deuxième version de notre SDK, comme suit:
$ cli do-stuff
#execute sdk v2
Ou
$ LEGACY_MODE='on' cli do-stuff
#execute sdk v1
Mon problème est que je n'ai pas trouvé de moyen propre à l'utilisation de deux versions de la même dépendance dans mon CLI.
J'ai essayé d'utiliser npm-installer-version paquet. Il fonctionne bien sur mon environnement local, mais après la publication de mon cli et de faire npm install -g my-cli
, il ne fonctionne plus, car il crée un dossier node_modules dans le dossier en cours, au lieu de la /usr/local/lib/node_modules/my-cli
dossier.
J'ai aussi essayé multidep, et j'ai un peu le même problème.
Pour l'instant, mon paquet.json ne contiennent pas du tout mon sdk, mais je voudrais avoir quelque chose comme :
"dependencies": {
"my-sdk": "2.0.0"
"my-sdk-legacy": "1.0.0"
}
Ou
"dependencies": {
"my-sdk": ["2.0.0", "1.0.0"]
}
Je n'ai pas trouvé autre chose pour l'instant. Je suis en train de penser à propos de la publication de la première version de mon sdk paquet avec un autre nom, comme "mon-sdk-legacy", mais je voudrais éviter si possible.
Aucune solution pour que ?
Vous devez vous connecter pour publier un commentaire.
C'est en fait, un scénario qui a été abordé à plusieurs reprises.
Il y a une question fermée pour npm et question ouverte pour fil les gestionnaires de paquets.
La première solution a été suggérée par l'auteur de la NGP dans cette GH commentaire:
Publier un package séparé sous un nom différent. Il faudra une version spécifique à l'intérieur.
Dans votre cas, vous allez publier
my-sdk-v1
etmy-sdk-v2
. Et à partir de maintenant, vous pouvez facilement installer les 2 versions d'un paquet dans un projet sans se heurter à des conflits.La deuxième façon à peu près la même idée proposée - l'utilisation de git url:
Contrairement aux mnp paquet, vous êtes libre de choisir n'importe quel nom que vous voulez! La source de la vérité est l'url git.
Plus tard
npm-install-version
surgi. Buuut, comme vous l'avez déjà fait, son utilisation est un peu limité. Depuis qu'elle engendre un processus enfant d'exécuter certaines commandes et écrit de tmp dirs. Pas de la manière la plus fiable pour un CLI.Pour résumer: vous êtes de gauche avec choix 1 & 2. Je collerais avec la première, depuis le dépôt github nom & tags pourrait changer.
2ème option avec l'url git est mieux quand vous voulez changer d'une version à dépendre de plus en plus fréquemment. Imaginez que vous souhaitez publier un correctif de sécurité pour mon-sdk-v1 héritage. Sera plus facile de faire référence à une url git puis publier
my-sdk-v1.1
de mnp, encore et encore.node_modules
dossier, il y a seulement un dossier nommé "mes-sdk". Ainsi, le code suivant ne fonctionne pas, soitrequire('my-sdk-v1');
Mais je peux fairerequire('my-sdk');
Donc je pense que je vais m'en tenir à la première version, même si elle est un peu moins pratique pour moi. MerciJuste pour ajouter jusqu'aux solutions actuelles vous pouvez également fournir des paquets de la sorte:
ou dans
package.json
si vous ne se soucient spécifiques ancienne version et la nouvelle.
Basé sur ma réponse pour une question similaire:
De npm v6.9.0, mnp prend désormais en charge le package alias. Il implémente la même syntaxe que la Laine utilise:
Cela ajoute à
package.json
:Cela me semble la solution la plus élégante possible, et est compatible avec la Le fil de la solution proposée par @Aivus.
@types/[...]
paquets.npm install react-types@npm:@types/react
(pour Réagir TS définitions installé sous le pseudonymereact-types
)