¿Cómo sobrescribo las versiones anidadas de dependencias de NPM?


Me gustaría usar el paquete NPM grunt-contrib-jasmine. Tiene varias dependencias. Parte del gráfico de dependencias se ve así:

─┬ [email protected]
 │ ├─┬ [email protected]
 │ │ ├─┬ [email protected]

Desafortunadamente, hay un error en esta versión phantomjs que impide que se instale correctamente en Mac OS X. Esto se corrige en la última versión.

¿Cómo puedo hacer que grunt-lib-phantomjs use una versión más reciente de phantomjs?

Algún contexto adicional:

 175
Author: Community, 2013-04-04

3 answers

Probablemente ya hayas encontrado una solución para esto.

De todos modos, puede usar la funcionalidad npm shrinkwrap, para anular cualquier dependencia o sub-dependencia.

Acabo de hacer esto en un proyecto nuestro. Necesitábamos una versión más nueva de connect, desde la 2.7.3. nos estaba causando problemas. Así que creé un archivo llamado 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 debería recogerlo automáticamente mientras realiza la instalación para el proyecto.

(Véase: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/)

 183
Author: tuxpiper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-09 17:20:56

Para aquellos de 2018 y más allá, usando npm versión 5 o posterior: edite su package-lock.json: elimine la biblioteca de la sección "requires" y agréguela en "dependencias".

Por ejemplo, desea que el paquete deglob use glob la versión del paquete 3.2.11 en lugar de su versión actual. Abre package-lock.json y ve:

"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"
  }
},

Eliminar "glob": "7.1.2", de "requires", añadir "dependencies" con la versión apropiada:

"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"
    }
  }
},

Ahora elimine su carpeta node_modules, ejecute npm install y agregará las partes faltantes a la sección "dependencies".

 29
Author: izogfif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-30 15:03:22

El mínimo más simple es agregar solo la dependencia json inicial shrinkwrapped al paquete.json. El "de" y "para" necesario

"grunt-contrib-connect": {
  "version": "0.3.0",
  "from": "[email protected]",
  "dependencies": {
    "connect": {
      "version": "2.8.1",
      "from": "connect@~2.7.3"
    }
  }
}
 0
Author: halfbeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-21 00:02:48