Me gustaría usar el grunt-contrib-jasminepaquete NPM. Tiene varias dependencias. Parte del gráfico de dependencia se ve así:
─┬ grunt-contrib-jasmine@0.4.1
│ ├─┬ grunt-lib-phantomjs@0.2.0
│ │ ├─┬ phantomjs@1.8.2-2
Desafortunadamente, hay un error en esta versión phantomjsque impide que se instale correctamente en Mac OS X. Esto se solucionó en la última versión.
¿Cómo puedo grunt-lib-phantomjsusar una versión más nueva de phantomjs?
Algún contexto adicional:
grunt-contrib-jasminerequiere explícitamente la versión"~0.2.0"degrunt-lib-phantomjs, que requiere explícitamente la versión"~1.8.1"dephantomjs.- Agregar
phantomjsa las dependencias de mi paquete primero no tiene ningún efecto; ambas versiones están instaladas ygrunt-contrib-jasmineaún usan las versiones anteriores (consulte: Al instalar un paquete con NPM, ¿puede decirle que use una versión diferente de una de sus dependencias? ).

git cloneo tenedor requerido módulo. También puede eliminar anidadosphantomjsmanualmente.grunt-contrib-jasmineestá en 0.5.1, que usa[email protected], que usa[email protected]:)Respuestas:
Puede usar la funcionalidad npm shrinkwrap para anular cualquier dependencia o subdependencia .
Acabo de hacer esto en un proyecto nuestro. Necesitábamos una versión más nueva de connect, desde 2.7.3. nos estaba causando problemas. Entonces creé un archivo llamado npm-shrinkwrap.json:
npm debería recogerlo automáticamente mientras realiza la instalación del proyecto.
(Ver: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ )
fuente
grunt-contrib-connectse instalan la dependencia y sus hijos. Todas mis otras dependencias en package.json no están instaladas.node_modulesdirectorio para que el volcado de dependencia de envoltura retráctil completa fuera exactamente lo que quería, no solo anulaciones. Pero sigue siendo una especie de solución dolorosa.node_modules, ejecutar una instalación con un encogimiento mínimo parece dejardevDependenciesintacto aunque se ignoredependencies, pero ejecutar otra instalación elimina los elementos no explícitos, por lo que por ahora es importante ejecutarnpm shrinkwrappara obtener un archivo completo, modificar la parte en cuestión y luego corre denpm installnuevo)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"requires"sección y agréguela en "dependencias".Por ejemplo, desea que el
deglobpaquete use laglobversión del paquete en3.2.11lugar de la actual. Abrespackage-lock.jsony ves:Eliminar
"glob": "7.1.2",de"requires", agregar"dependencies"con la versión adecuada:Ahora elimine su
node_modulescarpeta, ejecutenpm instally agregará partes faltantes a la"dependencies"sección.fuente
npm installejecute una vez. En mi caso, las ediciones son necesarias ya que el dep anidado está causando un error.npm ilugar de editar su package-lock.json y agregar la dependencia secundaria a las "dependencias", agregue la dependencia secundaria a la sección "dependencias" de package.jsonnpm installnuevamente, todos los cambiospackage-lock.jsonse revierten y obtengo la versión incorrecta del dep.npm ciy esto no toca elpackage-lock.jsonPara aquellos que usan hilo.
Intenté usar npm shrinkwrap hasta que descubrí que el hilo cli ignoró mi archivo npm-shrinkwrap.json.
Yarn tiene https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ para esto. Ordenado.
Mira esta respuesta también: https://stackoverflow.com/a/41082766/3051080
fuente
Tuve un problema en el que una de las dependencias anidadas tenía una vulnerabilidad de auditoría npm, pero aún quería mantener la versión de dependencia principal. la solución npm shrinkwrap no funcionó para mí, así que lo que hice para anular la versión de dependencia anidada:
fuente
NPM shrinkwrap ofrece una buena solución a este problema. Nos permite anular esa versión de una dependencia particular de un submódulo particular.
Esencialmente, cuando ejecuta npm install, npm primero buscará en su directorio raíz para ver si existe un archivo npm-shrinkwrap.json. Si lo hace, usará esto primero para determinar las dependencias del paquete y luego volverá al proceso normal de trabajar a través de los archivos package.json.
Para crear un npm-shrinkwrap.json, todo lo que necesitas hacer es
código:
fuente
Encontré una solución que funcionó para mí.
Entonces. Primero edite su archivo npm-shrinkwrap.json como recomienda todas las demás soluciones.
Entonces, (en Windows):
Las otras soluciones propuestas son lo suficientemente buenas si realiza la operación 'npm install' solo una vez. Pero después de la primera 'instalación de npm', el archivo 'npm-shrinkwrap.json' se modifica nuevamente como antes de su modificación.
fuente