¿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:
-
grunt-contrib-jasmine
requiere explícitamente la versión"~0.2.0"
degrunt-lib-phantomjs
, que explícitamente requiere la versión"~1.8.1"
dephantomjs
. - Agregar
phantomjs
a las dependencias de mi paquete primero no tiene efecto; ambas versiones están instaladas ygrunt-contrib-jasmine
todavía usa las versiones anteriores (ver: Al instalar un paquete con NPM, ¿puede indicarle que use una versión diferente de una de sus dependencias?).
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/)
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"
.
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"
}
}
}
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