Je voudrais utiliser le package grunt-contrib-jasmine
NPM. Il a diverses dépendances. Une partie du graphique de dépendance ressemble à ceci:
─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
Malheureusement, cette version phantomjs
présente un bogue qui l’empêche de s’installer correctement sur Mac OS X. Ce problème a été corrigé dans la dernière version.
Comment puis-je obtenir que grunt-lib-phantomjs
utilise une version plus récente de phantomjs
?
Un contexte supplémentaire:
grunt-contrib-jasmine
requiert explicitement la version "~0.2.0"
de grunt-lib-phantomjs
, qui requiert explicitement la version "~1.8.1"
de phantomjs
.phantomjs
aux dépendances de mon paquet n'a aucun effet; les deux versions sont installées et grunt-contrib-jasmine
utilise toujours les anciennes versions (voir: Lors de l'installation d'un paquet avec NPM, pouvez-vous lui dire d'utiliser une version différente de l'une de ses dépendances? ).Vous pouvez utiliser la fonctionnalité npm shrinkwrap , afin de remplacer toute dépendance ou sous-dépendance.
Je viens de faire cela dans un de nos projets. Nous avions besoin d'une version plus récente de connect, depuis la 2.7.3. causait des problèmes pour nous. J'ai donc créé un fichier nommé npm-shrinkwrap.json:
{
"dependencies": {
"grunt-contrib-connect": {
"version": "0.3.0",
"from": "[email protected]",
"dependencies": {
"connect": {
"version": "2.8.1",
"from": "connect@~2.7.3"
}
}
}
}
}
npm devrait le récupérer automatiquement lors de l’installation du projet.
(Voir: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ )
Pour ceux à partir de 2018, utilisez npm version 5 ou ultérieure: éditez votre package-lock.json
: supprimez la bibliothèque de la section "requires"
et ajoutez-la sous "dépendances".
Par exemple, vous souhaitez que deglob
package utilise glob
version du package 3.2.11
au lieu de sa version actuelle. Vous ouvrez package-lock.json
et vous voyez:
"deglob": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
"integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
"requires": {
"find-root": "1.1.0",
"glob": "7.1.2",
"ignore": "3.3.5",
"pkg-config": "1.1.1",
"run-parallel": "1.1.6",
"uniq": "1.0.1"
}
},
Supprimez "glob": "7.1.2",
de "requires"
, ajoutez "dependencies"
avec la version appropriée:
"deglob": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
"integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
"requires": {
"find-root": "1.1.0",
"ignore": "3.3.5",
"pkg-config": "1.1.1",
"run-parallel": "1.1.6",
"uniq": "1.0.1"
},
"dependencies": {
"glob": {
"version": "3.2.11"
}
}
},
Maintenant, supprimez votre dossier node_modules
, exécutez npm install
et il ajoutera les parties manquantes à la section "dependencies"
.
Pour ceux qui utilisent du fil.
J'ai essayé d'utiliser npm shrinkwrap jusqu'à ce que je découvre que le fil cli ignorait mon fichier npm-shrinkwrap.json.
Le fil a https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ pour cela. Soigné.
Découvrez également cette réponse: https://stackoverflow.com/a/41082766/305108
J'ai trouvé une solution qui a fonctionné pour moi.
Alors. Commencez par éditer votre fichier npm-shrinkwrap.json comme recommandé pour toutes les autres solutions.
Ensuite, (sous Windows):
Les autres solutions proposées suffisent si vous effectuez l'opération 'npm install' une seule fois. Mais après la première installation de npm, le fichier 'npm-shrinkwrap.json' est modifié à nouveau comme avant votre modification.
NPM shrinkwrap offre une solution intéressante à ce problème. Cela nous permet de remplacer cette version d'une dépendance particulière d'un sous-module particulier.
Essentiellement, lorsque vous exécuterez l’installation de npm, npm examinera d’abord dans votre répertoire racine pour savoir s’il existe un fichier npm-shrinkwrap.json. Si tel est le cas, il l'utilisera d'abord pour déterminer les dépendances du paquet, puis reviendra au processus normal de traitement des fichiers package.json.
Pour créer un fichier npm-shrinkwrap.json, il vous suffit de
npm shrinkwrap --dev
code:
{
"dependencies": {
"grunt-contrib-connect": {
"version": "0.3.0",
"from": "[email protected]",
"dependencies": {
"connect": {
"version": "2.8.1",
"from": "connect@~2.7.3"
}
}
}
}
}