¿Cómo actualizo cada dependencia en package.json a la última versión?


2013

Copié package.json de otro proyecto y ahora quiero agregar todas las dependencias a sus últimas versiones, ya que este es un proyecto nuevo y no me importa arreglar algo si se rompe.

¿Cuál es la forma más fácil de hacer esto?

La mejor manera que conozco ahora es ejecutar npm info express versiony actualizar package.json manualmente para cada uno. Debe haber una mejor manera.

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}

ACTUALIZACIÓN 01/05/19 : Seis años después y todavía mantengo npm-check-updates como una solución integral a este problema. ¡Disfrutar!


2
Genial ver otro enfoque para este problema. Realmente me gusta la producción de Salita. Algunas características interesantes a las que contribuyo ahora, github.com/tjunnone/npm-check-updates, son la preservación de la semántica de versiones (como 1.xo> 2.1.0) y el filtrado por nombre / regex / devDeps-only.
Raine Revere

1
NECESITA tener algunas mejores respuestas aquí. Obviamente, con la resolución de dependencia, no siempre se puede tener la última versión de todo. Maximizar la mayor cantidad de últimas versiones de módulos es solo eso, algún tipo de problema de optimización. Pero NPM no sabe qué módulos desea que sean más recientes que otros. Sería genial si hubiera algo como esto: npm update --latest xyz, donde xyz son los módulos que desea que sean lo más recientes posible y todos los demás módulos seguirán con su versión compatible más reciente.
Alexander Mills

2
npm manejará correctamente los conflictos de versión entre dependencias compartidas descargando la correcta para cada uno. Por lo tanto, si Dep A depende de Dep C v1.0.0 y Dep B depende de Dep C v2.0.0, cada uno se instalará y usará de manera adecuada. Por lo tanto, puede instalar la última versión de los paquetes que desee.
Raine Revere

Pruebe esto para forzar la actualización:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
miorey

Siempre estoy revisando esta respuesta. Pero veo que se ha deslizado en los resultados de Google. ¡Esperemos que este comentario ayude a impulsar su relevancia nuevamente!
Zach Smith

Respuestas:


2394

Parece que npm-check-updates es la única forma de hacer que esto suceda ahora.

npm i -g npm-check-updates
ncu -u
npm install

En npm <3.11:

Simplemente cambie la versión de cada dependencia *y luego ejecútela npm update --save. ( Nota: roto en versiones recientes (3.11) de npm ).

Antes de:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

Después:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

Por supuesto, este es el martillo contundente de actualizar las dependencias. Está bien si, como dijiste, el proyecto está vacío y nada puede romperse.

Por otro lado, si está trabajando en un proyecto más maduro, es probable que desee verificar que no haya cambios importantes en sus dependencias antes de actualizar.

Para ver qué módulos están desactualizados, simplemente ejecute npm outdated. Enumerará todas las dependencias instaladas que tengan versiones más nuevas disponibles.


13
@thefourtheye: Por lo general, no debe salir * en package.json, ya que podría terminar instalando automáticamente una nueva versión del módulo con cambios importantes que rompen su aplicación. Como estamos usando --saveaquí, *se reemplaza con la versión actual de cada paquete.
josh3736

50
No puedo hacer que esto funcione. ¿Ha cambiado algo con npm desde que se publicó esta respuesta? Cuando uso el comodín y luego npm install --saveel comodín se deja en mi package.json.
davidtheclark

15
Desafortunadamente, el uso updatetampoco funciona, para mí. Todavía me quedan los comodines. ¿Hay alguna documentación sobre esto que conozca o algún otro recurso que pueda consultar?
davidtheclark

120
Un poco viejo pero eso podría ayudar a otras personas: github.com/tjunnone/npm-check-updates | Use npm install -g npm-check-updatespara instalar, luego npm-check-updatespara verificar si sus dependencias tienen actualizaciones y npm-check-updates -upara actualizar sus versiones de package.json. Entonces es justo npm instally descargará nuevas versiones.
RaphaelDDL

55
Su problema probablemente se deba al hecho de que intenta actualizar los paquetes de desarrollo escribiendo en npm update --savelugar de hacerlo npm update --save-dev.
adriendenat

1035

npm-check-updates es una utilidad que ajusta automáticamente un package.json con la última versión de todas las dependencias

ver https://www.npmjs.org/package/npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 

[EDITAR] Una forma un poco menos intrusiva (evita una instalación global) de hacer esto si tienes una versión moderna de npmes:

$ npx npm-check-updates -u
$ npm install 

135
Esto debería estar disponible de forma nativa a través del comando npm, la mejor solución hasta ahora para actualizar las dependencias.
Mohammad Arif

77
Debe ser parte de npm de forma nativa, totalmente de acuerdo. Sin embargo, no lo es y esta solución viene como una brisa. Gracias.
Stefan

2
¿Supongo que ustedes están presionando [DURO] para llevar esto al núcleo npm?
enorl76

3
@ Batman Sí, si no lo instaló antes. De lo contrario, use la actualización npm. ncu solo actualiza package.json. No instala ni actualiza 'node_modules'.
Muzaffer

1
paquete inútil, actualizando solo parte de paquetes con ncu -a, no actualizando package.json también.
Alexander Kim

385

Actualizado para la última NPM

npm 2+ (Nodo 0.12+):


npm outdated
npm update
git commit package-lock.json

Ancient npm (circa 2014):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

Asegúrate de encoger tus deps, o podrías terminar con un proyecto muerto. El otro día saqué un proyecto y no se ejecutó porque mis departamentos estaban desactualizados / actualizados / un desastre. Si me hubiera encogido, npm habría instalado exactamente lo que necesitaba.


Detalles

Para los curiosos que llegan hasta aquí, esto es lo que recomiendo:

Use npm-check-updateso npm outdatedpara sugerir las últimas versiones.

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

Luego haga una instalación limpia (sin el rm recibí algunas advertencias de dependencia)

$ rm -rf node_modules
$ npm install 

Por último, guarde versiones exactas npm-shrinkwrap.jsonconnpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Ahora, npm installahora usaré versiones exactas ennpm-shrinkwrap.json

Si se registra npm-shrinkwrap.jsonen git, todas las instalaciones utilizarán las mismas versiones exactas.

Esta es una forma de pasar del desarrollo (todas las actualizaciones, todo el tiempo) a la producción (nadie toca nada).

ps Yarn está enviando su lista de paquetes a Facebook .


13
Esta es la respuesta correcta real. con docenas de departamentos instalados, esta es definitivamente una mejor manera
Angel S. Moreno

66
Por experiencia, el consejo de actualizar siempre todos los paquetes a la vez puede ser peligroso.
alphadogg

1
Sin lugar a duda. Si crea y npm-shrinkwrap.jsoningresa a la fuente, y se compromete cada vez que actualiza, siempre puede "volver a donde estaba". Pasé por alto la característica de envoltura retráctil cuando comencé.
Michael Cole

21
Esto no responde a la pregunta. La pregunta es cómo actualizar la última versión. npm updatesolo se actualiza a la versión semver, no la última.
Gman

1
¿Puedes responder si hay una alternativa a yarn upgrade package@version?
Ben Sinclair

201

Para actualizar una dependencia a su última versión sin tener que abrirla manualmente package.jsony cambiarla, puede ejecutar

npm install {package-name}@* {save flags?}

es decir

npm install express@* --save

Como referencia, npm-install


Como señaló el usuario Vespakoen en una edición rechazada, también es posible actualizar varios paquetes a la vez de esta manera:

npm install --save package-nave@* other-package@* whatever-thing@*

También admite una línea para el shell basado en npm outdated. Vea la edición para el código y la explicación.


PD: también odio tener que editar manualmente package.jsonpara cosas así;)


8
Esta solución es genial. Forma rápida y fácil de actualizar explícitamente un paquete único a la última versión sin instalar ningún módulo nuevo. Me gusta npm-check-updates, pero afaik intenta mantener todos los paquetes actualizados, que no siempre es lo que quieres.
Chev

esto no funciona para mínpm install react-native-image-picker@* --save
Harry Moreno

1
@Chev: ncu puede apuntar fácilmente a uno o varios paquetes con ncu express mocha chai. También puede excluir paquetes con ncu -x mocha. Estoy de acuerdo en que lo anterior es la solución más simple para actualizar un solo paquete.
Raine Revere

2
Acabo de usar algo similar que funcionó, posiblemente de documentos más recientes ... usa "último" en lugar de "*"npm install {package-name}@latest {save flags}
Drew Thomas

1
Muchas gracias, esta solución es excelente y es exactamente lo que estoy buscando. ¡Le permite actualizar un paquete en particular sin la necesidad de actualizar cualquier otra dependencia que pueda conducir a problemas imprevistos!
Dany Wehbe

90

Si está utilizando Visual Studio Code como su IDE, esta es una pequeña extensión divertida para actualizar package.jsonun proceso de un solo clic.

Lente de versión

ingrese la descripción de la imagen aquí


2
Aquí hay una versión sublime de texto 3: github.com/yavorsky/Bump , aunque un poco lento.
Alexander Kim

44
Funcionó maravillosamente, en caso de que no esté claro para nadie, esto simplemente compara las versiones en su package.json con las últimas versiones del repositorio npm, y le permite hacer clic en una versión para actualizar el contenido de texto en su package.json. Luego debe ejecutar "npm update" para indicarle a npm que instale las nuevas versiones.
MattG

2
Tenga en cuenta que ya es posible ver la última versión de las dependencias del paquete con una breve descripción en Visual Studio Code incorporado al pasar el mouse sobre la entrada del paquete: Sugerencia de versión del paquete
incorporado

1
Tenga en cuenta que no instala automáticamente paquetes al hacer clic en un enlace de lente de código. Simplemente actualiza el texto de la versión package.json.
RA.

59

Esto funciona a partir de npm 1.3.15.

"dependencies": {
  "foo": "latest"
}

10
Bueno saber. Supongo que esto generalmente sería una mala práctica en cualquier sitio de producción porque se actualizará automáticamente a versiones potencialmente incompatibles con versiones anteriores. La sintaxis '~ 2' lo encierra en un número de versión principal dado, que después de semver será compatible con versiones anteriores.
Raine Revere

1
Siempre puedes congelar los departamentos con productos. Hay un comando para eso. -2 suena bien.
Tobiasz Cudnik

55
Me gusta usar esto junto con npm shrinkwrapcongelar los deps.
daniellmb

Si hacemos esto, ¿cómo sabemos la versión real de ese paquete? Digamos que tuve una entrada llamada "react": "16.9.0"y luego agregué la última y ejecuté npm i, después de esto, ¿cómo puedo encontrar qué versión de reaccionar está ahora en mi proyecto? ya que "react":"latest"es lo que queda en mi package.json, no un número incluso después de que lo hicenpm i
theprogrammer

52
  1. Úselo *como la versión para los últimos lanzamientos, incluidos los inestables
  2. Usar latestcomo definición de versión para la última versión estable
  3. Modifique el package.json con exactamente el último número de versión estable usando LatestStablePackages

Aquí hay un ejemplo:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},

2
Esta es la mejor respuesta.
Peza

1
esta debería haber sido la respuesta aceptada
EigenFool

sigue siendo el enfoque más seguro para tomar. Buena respuesta.
klewis

43

La única advertencia que he encontrado con la mejor respuesta anterior es que actualiza los módulos a la última versión. Esto significa que podría actualizarse a una versión alfa inestable.

Usaría esa utilidad npm-check-updates. Mi grupo usó esta herramienta y funcionó efectivamente al instalar las actualizaciones estables.

Como Etienne declaró anteriormente: instalar y ejecutar con esto:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 

3
rm -rf node_modulesantes de npm installdeshacerme de algunas advertencias de dependencia para mí.
Michael Cole

1
En caso de que tenga "*" en package.json, simplemente cámbielo a "0" o "0.0" o "0.0.0" antes de ejecutar npm-check-updates.
igorpavlov

Esta es la forma más fácil de hacerlo. Sin problemas, sin problemas. Funciona de maravilla. Todos sus departamentos se actualizan e instalan correctamente. Thx
Yoraco Gonzales

38

Para ver qué paquetes tienen versiones más nuevas disponibles, utilice el siguiente comando:

npm outdated

para actualizar solo una dependencia solo use el siguiente comando:

npm install yourPackage@latest --save

Por ejemplo:

Mi package.jsonarchivo tiene dependencia:

"@progress/kendo-angular-dateinputs": "^1.3.1",

entonces debería escribir:

npm install @progress/kendo-angular-dateinputs@latest --save

Agradable, pero parece que --save (o --save-dev) no es obligatorio para la actualización.
Burrich

35

Realmente me gusta cómo funciona npm-upgrade . Es una sencilla utilidad de línea de comandos que pasa por todas sus dependencias y le permite ver la versión actual en comparación con la última versión y actualizarla si lo desea.

Aquí hay una captura de pantalla de lo que sucede después de ejecutar npm-upgradeen la raíz de su proyecto (al lado del package.jsonarchivo):

Ejemplo de actualización de npm

Para cada dependencia, puede elegir actualizar, ignorar, ver el registro de cambios o finalizar el proceso. Me ha funcionado muy bien hasta ahora.

EDITAR: Para que quede claro, este es un paquete de terceros que debe instalarse antes de que el comando funcione. No viene con npm en sí:

npm install -g npm-upgrade

Luego, desde la raíz de un proyecto que tiene un archivo package.json:

npm-upgrade

Mirando los documentos, parece que solo fue construido para trabajar con dependencias locales
manncito

2
Sí, acabo de mencionar a los demás. Ninguna queja contra la respuesta :)
Martin Schneider

2
Hmm, npm-upgradeno funcionó para mí, pero lo npm upgradehizo y actualizó mi archivo package.json, que era exactamente lo que estaba buscando.
Grandizer

Hmm interesante, ¿hubo algún error? La idea detrás del uso npm-upgradees que puedes ver exactamente qué se está actualizando y elegir cuáles se actualizan. npm upgradepuede funcionar bien para la mayoría de las personas, pero a veces necesita tener un poco más de control al actualizar.
manncito

1
También puedes usar esto con npx: npx npm-upgrade- ¡genial! :)
rayos X

22

Aquí hay una expresión regular básica para que coincida con los números de versión semántica para que pueda reemplazarlos rápidamente con un asterisco.

Versión Semántica Regex

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

Cómo utilizar

Seleccione las versiones de paquete que desea reemplazar en el archivo JSON.

captura de pantalla: seleccione el texto que desea reemplazar

Ingrese la expresión regular anterior y verifique que coincida con el texto correcto.

captura de pantalla: ingrese la expresión regular semver arriba

Reemplace todas las cerillas con un asterisco.

captura de pantalla: reemplace las versiones del paquete con un asterisco

correr npm update --save


no cuando hay un número en el nombre de un paquete. es decir: babel-preset-es2015, babel-preset-stage-0, hex2rgba. Tal vez busque una cita / cita doble al principio:('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
rofrol

1
en cualquier editor que admita múltiples carets (ej Sublime Text), puede seleccionar el primero :y presionar ctrl+dvarias veces hasta seleccionarlos todos, luego ir al número de versión (presionar la flecha derecha 2 veces) y presionar Ctrl espacio, luego escribir"*"
Ivan Castellanos

15

Recientemente tuve que actualizar varios proyectos que usaban npm y package.json para su magia gruntfile.js. El siguiente comando bash (comando multilínea) funcionó bien para mí:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

La idea aquí: para canalizar la npm outdatedsalida como json, a jq
(jq es una herramienta de análisis / consulta de línea de comando json)
(observe el uso del --depthargumento para npm outdated)
jq quitará la salida solo al nombre del paquete de nivel superior.
finalmente xargs pone cada NOMBRE DE BIBLIOTECA uno a la vez en unnpm install LIBRARYNAME --save-dev comando

Lo anterior es lo que funcionó para mí en una máquina en funcionamiento: nodo = v0.11.10 osx = 10.9.2 npm = 1.3.24

esto requiere:
xargs http://en.wikipedia.org/wiki/Xargs (creo que es nativo de mi máquina)
y
jq http://stedolan.github.io/jq/ (lo instalé con brew install jq)

Nota: Solo guardo las bibliotecas actualizadas en package.json dentro de la clave json devDependanciesusando --save-dev, eso era un requisito de mis proyectos, muy posiblemente no el suyo.

Luego verifico que todo esté en salsa con un simple

npm outdated --depth=0

Además, puede verificar las versiones actuales de la biblioteca de nivel superior instaladas con

npm list --depth=0

Me encanta jq y lo uso casi todos los días, pero para este propósito utilizo simple en su awklugar:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
Qorbani

1
He estado usandocat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Richard Ayotte

15

Si desea utilizar un enfoque suave a través de una hermosa interfaz de informes interactiva (para terminal), sugeriría usar npm-check .

Es menos martillo y le brinda más conocimiento consecuente y control sobre sus actualizaciones de dependencia.

Para darle una idea de lo que le espera aquí hay una captura de pantalla (raspada de la página de git para npm-check):

ingrese la descripción de la imagen aquí


14

Esta característica se ha introducido en npm v5. actualizar a npm usando npm install -g npm@latesty

actualizar package.json

  1. eliminar /node_modulesypackage-lock.json (if you have any)

  2. ejecutar npm update. esto actualizará las dependencias package.json a la última, basada en semver .

para actualizar a la última versión. puedes ir connpm-check-updates


13

Si usa hilo, el siguiente comando actualiza todos los paquetes a su última versión:

yarn upgrade --latest

De sus documentos :

El upgrade --latestcomando actualiza los paquetes igual que el comando de actualización, pero ignora el rango de versiones especificado en package.json. En su lugar, se utilizará la versión especificada por la última etiqueta (posiblemente actualizando los paquetes en las versiones principales).


1
No actualiza las dependencias en package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh

13

A partir de npm versión 5.2.0, hay una manera de ejecutar esto en una sola línea sin instalar ningún paquete adicional en su registro global de npm ni localmente en su aplicación. Esto se puede hacer aprovechando la nueva npxutilidad que se incluye con npm. ( Haga clic aquí para obtener más información ) .

Ejecute el siguiente comando en la raíz de su proyecto:

npx npm-check-updates -u && npm i

Acabo de probar esto y funciona ... excepto que tuve que ejecutar npm installpara descargar realmente las nuevas dependencias. Así que supongo que esto sólo actualiza la package.json menos que me falta algo
owsega

@owsega, tienes toda la razón, ¡gracias! Modifiqué mi respuesta para que también se ejecute npm installdespués de que se hayan actualizado las dependencias.
ilyakam

13

Yo uso npm-checkpara lograr esto.

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals

ingrese la descripción de la imagen aquí

Otra lista de comandos útil que mantendrá números de versión exactos en package.json

npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -ua #update locals
npm i

Está ncu -uy no ncu -uaen la segunda última línea. No puedo editar porque no se permite un cambio de caracteres. Muy útil por cierto.
Sohail Ahmed

10

Updtr!

Basado en npm desactualizado, updtr instala la última versión y ejecuta la prueba npm para cada dependencia. Si la prueba tiene éxito, updtr guarda el nuevo número de versión en su package.json. Si la prueba falla, sin embargo, updtr revierte sus cambios.

https://github.com/peerigon/updtr


9

Comandos que tuve que usar para actualizar package.jsonpara NPM 3.10.10:

npm install -g npm-check-updates
ncu -a
npm install

Antecedentes:

Estaba usando el último comando de @ josh3736 pero mi package.jsonno fue actualizado. Luego noté el texto descriptivo cuando ejecuté npm-check-updates -u:

La siguiente dependencia es satisfecha por su rango de versión declarada, pero la versión instalada está detrás. Puede instalar la última versión sin modificar su archivo de paquete utilizando la actualización npm. Si desea actualizar la dependencia en su archivo de paquete de todos modos, ejecute ncu -a.

Al leer la documentación de npm-check-updates puede ver la diferencia:

https://www.npmjs.com/package/npm-check-updates

-u, --upgrade: sobrescribe el archivo del paquete

-a, --upgradeAll: incluye incluso aquellas dependencias cuya última versión satisface la dependencia semver declarada

ncu es un alias para npm-check-updatescomo se ve en el mensaje al escribir npm-check-updates -u:

[INFO]: You can also use ncu as an alias

En npm-check-updates v3, -aes el comportamiento predeterminado, y sobrescribir el paquete.json se deja únicamente a la -uopción.
Raine Revere


5

Los comandos anteriores no son seguros porque podría romper su módulo al cambiar de versión. En cambio, recomiendo lo siguiente

  • Establezca la versión actual de los módulos de nodo actuales en package.json usando npm shrinkwrap comando.
  • Actualice cada dependencia a la última versión SI NO ROMPE SUS PRUEBAS usando la herramienta de línea de comandos https://github.com/bahmutov/next-update
npm install -g next-update
// de tu paquete
próxima actualización

1
Los cambios incompatibles con versiones anteriores deben protegerse para los proyectos activos. El OP está más preocupado por comenzar un nuevo proyecto en el que desea romper las cosas ahora en lugar de más tarde y tener las últimas versiones para trabajar.
Raine Revere

3

Intente seguir el comando si usa npm 5 y el nodo 8

npm update --save


2
El updatecomando no parece aumentar las dependencias más allá de la definición original. Si package.jsondeclara "1.2.3"exactamente no obtendrá 1.2.4. Eso puede ser bueno o malo :)
Álvaro González

3

El siguiente código (que fue aceptado) me escribió algo así como "lleva demasiado tiempo, bla, bla" y no hizo nada. Probablemente usar el indicador global fue el problema, idk.

npm i -g npm-check-updates
ncu -u
npm install

Decidí usar mi editor de texto y seguir un enfoque semi-manual en su lugar.

Copié una lista como esta (solo mucho más) de las dependencias de desarrollo de mi package.jsonal editor de texto notepad ++:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

Establecí el modo de búsqueda en expresión regular, usé el ^\s*"([^"]+)".*$patrón para obtener el nombre del paquete y lo reemplacé por npm uninstall \1 --save-dev \nnpm install \1 --save-dev. Haga clic en "reemplazar todo". El resultado fue este:

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

Lo copié de nuevo a bash y presioné enter. Todo fue actualizado y funcionando bien. Eso es todo.

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

No creo que sea un gran problema, ya que debe hacerlo solo de vez en cuando, pero puede escribir fácilmente un script, que analiza package.jsony actualiza sus paquetes. Creo que es mejor así, porque puedes editar tu lista si necesitas algo especial, por ejemplo, mantener la versión actual de una lib.


1
Con npm-check-updates, el terminal colgante es un problema conocido en Windows. Intente agregar de --packageFile package.jsonmodo que sepa que no debe esperar el stdin.
Raine Revere

@ RaineRevere ¡Gracias!
inf3rno

3

Resolví esto viendo las instrucciones de https://github.com/tjunnone/npm-check-updates

$ npm install -g npm-check-updates
$ ncu
$ ncu -u # to update all the dependencies to latest
$ ncu -u "specific module name"  #in case you want to update specific dependencies to latest

3

Encontré otra solución para la versión reciente de NPM. Lo que quiero hacer es reemplazar todas las dependencias "*" con el último número de versión explícito. Ninguno de los métodos discutidos me ha funcionado.

Lo que hice:

  1. Reemplace todo "*" con "^ 0.0.0"
  2. correr npm-check-updates -u

Todo en package.json ahora se actualiza a la última versión.


3

Si no desea instalar npm-check-updates globales, simplemente puede ejecutar eso:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"

2

La alternativa es

"dependencies":{
    "foo" : ">=1.4.5"
}

Cada vez que utiliza la actualización npm, se actualiza automáticamente a la última versión. Para obtener más información sobre la sintaxis, puede consultar aquí: https://www.npmjs.org/doc/misc/semver.html


Una razón para el control de versiones es evitar cambios incompatibles con versiones anteriores de versiones principales más recientes. Recomendaría contra esto o los números de versión '*'. El OP está relacionado con facilitar el proceso mientras se mantiene el control sobre cuándo ocurre.
Raine Revere

2

Solución sin paquetes adicionales.

Cambie la versión de cada dependencia a *:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

Entonces corre npm update --save.

Algunos de sus paquetes fueron actualizados, pero otros no.

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

Esta es la parte difícil, significa que su versión local de "reaccionar" fue inferior a la más reciente. En este caso, npm descargó y actualizó el paquete "react". Sin embargo, su versión local de "react-google-maps" es la misma que la más nueva.

Si aún desea "actualizar" sin cambios *, debe eliminar estos módulos de la node_modulescarpeta.

Por ejemplo, eliminar node_modules/react-google-maps.

Finalmente corre de nuevo npm update --save.

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

No olvide ejecutar npm update --save-devsi desea actualizar las dependencias de desarrollo.


1

Greenkeeper si estás usando Github. https://greenkeeper.io/

Es una integración de Github e increíblemente fácil de configurar. Cuando se instala, crea automáticamente solicitudes de extracción en los repositorios que especifique (o todos si lo desea) y mantiene su código siempre actualizado, sin obligarlo a hacer nada manualmente. Luego, los RP deben activar una compilación en un servicio de CI y, dependiendo de una verificación exitosa o fallida, puede seguir descubriendo qué está provocando el problema o cuando CI pasa, simplemente combine el RP.

greenkeeper PR 1 greenkeeper PR 2

En la parte inferior, puede ver que la primera compilación falló al principio y después de una confirmación ("actualizar a nodo v6.9") las pruebas pasan para que finalmente pueda fusionar el PR. También viene con muchos emoji.

Otra alternativa sería https://dependencyci.com/ , sin embargo, no lo probé intensamente. Después de un primer vistazo, Greenkeeper se ve mejor en general en la OMI y tiene una mejor integración.


1
  • npm desactualizado
  • actualización npm

Debería conseguirte las últimas versiones deseadas compatibles con tu aplicación. Pero no las últimas versiones.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.