web-dev-qa-db-fra.com

Comment remplacer les versions de dépendance imbriquées NPM?

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:

242
georgebrock

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/ )

217
tuxpiper

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".

65
izogfif

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

14
Gus

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):

  • Faites un clic droit sur le fichier 'npm-shrinkwrap.json'
  • Propriétés
  • Sous Attributs, sélectionnez 'Read-Only'. Ceci empêchera npm de modifier le fichier mpn-shrinkwrap.json.

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.

1
Shlomo Sfez

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"
        }
      }
    }
  }
}
0
Murtaza Hussain