Me gustaría usar el grunt-contrib-jasmine
paquete 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 phantomjs
que impide que se instale correctamente en Mac OS X. Esto se solucionó en la última versión.
¿Cómo puedo grunt-lib-phantomjs
usar una versión más nueva de phantomjs
?
Algún contexto adicional:
grunt-contrib-jasmine
requiere explícitamente la versión"~0.2.0"
degrunt-lib-phantomjs
, que requiere explícitamente 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 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 clone
o tenedor requerido módulo. También puede eliminar anidadosphantomjs
manualmente.grunt-contrib-jasmine
está 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-connect
se instalan la dependencia y sus hijos. Todas mis otras dependencias en package.json no están instaladas.node_modules
directorio 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 dejardevDependencies
intacto aunque se ignoredependencies
, pero ejecutar otra instalación elimina los elementos no explícitos, por lo que por ahora es importante ejecutarnpm shrinkwrap
para obtener un archivo completo, modificar la parte en cuestión y luego corre denpm install
nuevo)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
deglob
paquete use laglob
versión del paquete en3.2.11
lugar de la actual. Abrespackage-lock.json
y ves:Eliminar
"glob": "7.1.2",
de"requires"
, agregar"dependencies"
con la versión adecuada:Ahora elimine su
node_modules
carpeta, ejecutenpm install
y agregará partes faltantes a la"dependencies"
sección.fuente
npm install
ejecute una vez. En mi caso, las ediciones son necesarias ya que el dep anidado está causando un error.npm i
lugar 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 install
nuevamente, todos los cambiospackage-lock.json
se revierten y obtengo la versión incorrecta del dep.npm ci
y esto no toca elpackage-lock.json
Para 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