node.js - librerias - package.json que es
¿Cómo anulo las versiones anidadas de dependencia de NPM? (2)
Para aquellos a partir 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, quiere que el paquete deglob
use el paquete glob
versión 3.2.11
lugar de su paquete actual. package-lock.json
y ves:
"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"
}
},
Quite "glob": "7.1.2",
desde "requires"
, agregue "dependencies"
con la versión correcta:
"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"
.
Me gustaría usar el paquete de NPM grunt-contrib-jasmine
. Tiene varias dependencias. Parte del gráfico de dependencia se ve así:
─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
Desafortunadamente, hay un error en esta versión de phantomjs
que impide que se instale correctamente en Mac OS X. Esto se soluciona en la última versión.
¿Cómo puedo hacer que grunt-lib-phantomjs
use una versión más nueva de phantomjs
?
Un poco de 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 ningún efecto; Ambas versiones están instaladas ygrunt-contrib-jasmine
aún usa las versiones anteriores (ver: ¿ Al instalar un paquete con NPM, puede decirle que use una versión diferente de una de sus dependencias? ).
Probablemente ya hayas encontrado una solución para esto.
De todos modos, puede usar la funcionalidad npm shrinkwrap , para anular cualquier dependencia o subdependencia .
Acabo de hacer esto en un proyecto gruñón nuestro. Necesitamos una versión más nueva de connect, desde 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 debe recogerlo automáticamente mientras realiza la instalación del proyecto.
(Ver: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ )