Cómo actualizo cada dependencia en el paquete.json a la última versión?
Copié el paquete.json de otro proyecto y ahora quieren bump todas las dependencias a sus últimas versiones ya que este es un proyecto fresco 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 version
y luego actualizar el paquete.json manualmente para cada uno. Debe haber una manera mejor.
{
"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"
}
}
Ahora soy un colaborador en npm-check-updates, que es una gran solución para esto problema.
30 answers
Parece que npm-check-updates es la única manera de hacer que esto suceda ahora.
npm i -g npm-check-updates
ncu -u
npm install
On npm
Simplemente cambie la versión de cada dependencia a *
, luego ejecute npm update --save
. (Nota: roto en versiones recientes (3.11) de npm ).
Antes:
"dependencies": {
"express": "*",
"mongodb": "*",
"underscore": "*",
"rjs": "*",
"jade": "*",
"async": "*"
}
Después de:
"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 dependencias. Está bien si-como dijiste-el proyecto está vacío y nada puede romperse.
Sobre el por otro lado, si está trabajando en un proyecto más maduro, probablemente desee verificar que no haya cambios de interrupción en sus dependencias antes de actualizar.
Para ver qué módulos están desactualizados, simplemente ejecute npm outdated
. Enumerará cualquier dependencia instalada que tenga versiones más recientes disponibles.
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-02-05 07:21:10
npm-check-updates
es una utilidad que ajusta automáticamente un paquete.json con el
última versión de todas las dependencias
Véase https://www.npmjs.org/package/npm-check-updates
$ npm install -g npm-check-updates
$ ncu -u
$ npm install
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-02-05 07:20:54
TLDR; (actualizado para nuevas versiones de NPM)
Las cosas han cambiado un poco desde que estas respuestas fueron escritas originalmente.
Mnp 2+: npm outdated
+npm update
+npm shrinkwrap
Npm anterior: npm-check-updates
paquete + npm shrinkwrap
Asegúrese de encoger sus deps, o puede terminar con un proyecto muerto. Saqué un proyecto el otro día y no se ejecutó porque mis deps estaban todos fuera de fecha / actualizado / un desastre. Si me hubiera encogido, npm habría instalado exactamente lo que necesario.
Detalles
Para los curiosos que llegan hasta aquí, esto es lo que recomiendo: {[18]]}
Use npm-check-updates
o npm outdated
para 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 hacer una instalación limpia (sin el rm tengo algunas advertencias de dependencia)
$ rm -rf node_modules
$ npm install
Por último, guarde las versiones exactas en npm-shrinkwrap.json
con npm shrinkwrap
$ rm npm-shrinkwrap.json
$ npm shrinkwrap
Ahora, npm install
ahora usará versiones exactas en npm-shrinkwrap.json
Si marca npm-shrinkwrap.json
en git, todas las instalaciones usarán exactamente las mismas versiones.
Esta es una forma de pasar del desarrollo (todas las actualizaciones, todo el tiempo) a la producción (nadie toca nada).
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-16 21:06:01
Para actualizar una dependencia a su última versión sin tener que abrir manualmente la package.json
y cambiarla, puede ejecutar
npm install {package-name}@* {save flags?}
Es decir,
npm install express@* --save
Para 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 incluye una línea única para el shell basado en npm outdated
. Ver la edición para el código y explicacion.
PD: También odio tener que editar manualmente package.json
para cosas como esa;)
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
2017-05-23 12:18:27
Si está utilizando Visual Studio Code como su IDE, esta es una pequeña extensión divertida para hacer que la actualización package.json
sea un proceso de un solo clic.
Version Lense
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
2017-03-27 20:00:30
Esto funciona a partir de npm 1.3.15.
"dependencies": {
"foo": "latest"
}
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
2014-01-21 22:35:57
- Utilice
*
como la versión para las últimas versiones, incluyendo inestable - Use
latest
como definición de versión para la última versión estable - Modifique el paquete.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"
},
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-02-08 15:53:05
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 compilación alfa inestable.
Usaría esa utilidad npm-check-updates. Mi grupo utilizó esta herramienta y funcionó eficazmente mediante la instalación de las actualizaciones estables.
Como Etienne dijo anteriormente: instale y ejecute con esto:
$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install
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
2015-02-11 23:37:53
Para ver qué paquetes tienen versiones más recientes disponibles, use el siguiente comando:
npm outdated
Para actualizar solo una dependencia simplemente use el siguiente comando:
npm install yourPackage@latest --save
Por ejemplo:
Mi archivo package.json
tiene dependencia:
"@progress/kendo-angular-dateinputs": "^1.3.1",
Entonces debo escribir:
npm install @progress/kendo-angular-dateinputs@latest --save
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
2017-12-07 07:01:18
Me gusta mucho cómo funciona npm-upgrade. Es una sencilla utilidad de línea de comandos que recorre todas sus dependencias y le permite ver la versión actual en comparación con la última versión y actualizar si lo desea.
Aquí hay una captura de pantalla de lo que sucede después de ejecutar npm-upgrade
en la raíz de su proyecto (junto al archivo package.json
):
Para cada dependencia puede elegir actualizar, ignorar, ver el registro de cambios o finalizar el proceso. Ha funcionado para mí hasta ahora.
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-05-24 21:49:37
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 usar
Seleccione las versiones de paquete que desea reemplazar en el archivo JSON.
Ingrese la expresión regular anterior y verifique que coincida con el texto correcto.
Reemplaza todas las coincidencias con un asterisco.
Corre npm update --save
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-03-04 15:21:20
Recientemente tuve que actualizar varios proyectos que usaban npm y package.json para su archivo gruntfile.js magic. 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 salida npm outdated
como json, a jq
(jq es un analizador de línea de comandos json/herramienta de consulta)
(observe el uso del argumento --depth
para npm outdated
)
jq eliminará la salida solo al nombre del paquete de nivel superior.
finalmente xargs pone cada LIBRARYNAME uno a la vez en un comando npm install LIBRARYNAME --save-dev
Lo anterior es lo que funcionó para mí en un funcionamiento de máquina: node = v0. 11. 10 osx=10.9.2 npm=1.3.24
Esto requiere:
xargs http://en.wikipedia.org/wiki/Xargs (nativo de mi máquina creo)
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 devDependancies
usando --save-dev
, eso era un requisito de mis proyectos, bastante posible no el tuyo.
Después compruebo que todo es salsa con un simple{[12]]}
npm outdated --depth=0
Además, puede comprobar las versiones actuales de la biblioteca instalada en el nivel superior con
npm list --depth=0
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
2014-05-20 17:37:18
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 paquete.json. Sin embargo, si la prueba falla, updtr revierte sus cambios.
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-05-27 22:24:01
Utilizo npm-check
para archivar esto.
npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals
Otra lista de comandos útil que mantendrá los 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
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
2017-04-17 14:58:16
Comandos que tuve que usar para actualizar package.json
para 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.json
no se actualizó. Luego noté el texto de descripción cuando ejecuté npm-check-updates -u
:
La siguiente dependencia está satisfecha por su rango de versiones declarado, pero la versión instalada está detrás. Puede instalar la última versión sin modificar el archivo de paquete mediante npm update. Si desea actualizar la dependencia en su archivo de paquete de todos modos, ejecutar ncu - a.
Leyendo la documentación de npm-check-updates se puede ver la diferencia:
Https://www.npmjs.com/package/npm-check-updates
- u, upgrade upgrade: sobrescribir el archivo del paquete
- a, upgra upgradeAll: incluye incluso aquellas dependencias cuya última versión satisface la dependencia semver declarada
Ncu es un alias para npm-check-updates
como se ve en el mensaje al escribir npm-check-updates -u
:
[INFO]: You can also use ncu as an alias
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
2017-11-01 13:02:35
Una respuesta muy tardía. pero puede ayudar a alguien.
Esta característica se ha introducido en npm v5
. update to npm using npm install -g npm@latest
and
Para actualizar package.json
Borrar
/node_modules
ypackage-lock.json (if you have any)
Ejecutar
npm update
. esto actualizará el paquete.json a la última versión con dependencias instaladas.
Para actualizar a la última versión. puedes ir con npm-check-updates
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-03-14 06:43:19
Ncu es un nuevo alias para buscar actualizaciones. Al hacerlo, no tiene que actualizar manualmente los números de versión de ur en el paquete.json ncu lo hace por ti . Siga el método a continuación si está en una máquina Linux
sudo npm i -g npm-check-updates // decide between -u or -a ncu -u, --upgrade and overwrite package file ncu -a, --upgradeAll include even those dependencies whose latest version satisfies the declared server dependency sudo npm install
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-04-26 21:22:35
Los comandos anteriores no son seguros porque podría romper su módulo al cambiar versiones. En su lugar recomiendo lo siguiente
- Establezca la versión actual de los módulos de nodo en el paquete.json usando el comando
npm shrinkwrap
. - Actualice cada dependencia a la última versión SI NO ROMPE SUS PRUEBAS usando https://github.com/bahmutov/next-update herramienta de línea de comandos
npm install -g next-update // from your package next-update
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
2014-11-02 16:43:23
Si está utilizando yarn
, yarn upgrade-interactive
es una herramienta realmente elegante que puede permitirle ver sus dependencias obsoletas y luego seleccionar cuáles desea actualizar.
Más razones para usar hilo sobre npm
. Je.
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
2017-06-13 10:09:14
Un paso fácil:
$ npm install -g npm-check-updates && ncu -a && npm i
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
2017-07-10 22:14:31
Intente seguir el comando si usa npm 5 y node 8
Actualización de Npm save guardar
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
2017-08-04 11:48:43
La alternativa es
"dependencies":{
"foo" : ">=1.4.5"
}
Cada vez que utiliza npm update , se actualiza automáticamente a la última versión. Para obtener más sintaxis de versión, puede consultar aquí: https://www.npmjs.org/doc/misc/semver.html
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
2014-04-18 12:52:06
Npm-check-updates
Https://www.npmjs.com/package/npm-check-updates
Npm-check-updates le permite actualizar su paquete.json dependencias a las versiones más recientes, independientemente de las restricciones de versión existentes.
$ npm install -g npm-check-updates
$ ncu -u
Dependencias actualizadas! eso es todo!
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-08-30 09:29:44
Solución sin paquetes adicionales
Cambie la versión de cada dependencia a *
:
"dependencies": {
"react": "*",
"react-google-maps": "*"
}
Luego ejecuta 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 "react" era más baja que 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 reciente.
Si todavía quieres para" actualizar " sin cambios *
, debe eliminar estos módulos de la carpeta node_modules
.
Por ejemplo, suprímase node_modules/react-google-maps
.
Finalmente ejecutar de nuevo npm update --save
.
"dependencies": {
"react": "^15.0.1",
"react-google-maps": "^4.10.1"
}
No olvide ejecutar npm update --save-dev
si desea actualizar las dependencias de desarrollo.
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-04-27 14:29:49
- mnp obsoleto
- actualización del mnp
Debe obtener las últimas versiones deseadas compatibles para su aplicación. Pero no las últimas versiones.
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
2017-01-15 21:27:38
Esto es lo que hice para actualizar todas las dependencias en package.json
a latest:
npm install -g npm-check-updates
ncu -u --packageFile package.json
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
2017-07-05 09:12:26
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 se desea) y mantiene su código siempre actualizado, sin obligarlo a hacer nada manualmente. PRs debe entonces activar una compilación en un servicio de CI y, dependiendo de una comprobación exitosa o fallida, puede seguir averiguando qué está desencadenando el problema o cuándo CI los pases simplemente fusionan el PR.
En la parte inferior, puede ver que la primera compilación falló al principio y después de una confirmación ("actualizar al nodo v6.9") las pruebas pasan para que finalmente pueda fusionar el PR. Viene con un montón de emoji, también.
Otra alternativa sería https://dependencyci.com / , sin embargo no lo probé intensivamente. Después de un primer vistazo Greenkeeper se ve mejor en general IMO y tiene una mejor integración.
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
2017-01-08 23:22:08
El siguiente código (que fue aceptado) me escribió algo así como "toma demasiado tiempo bla-bla" y no hizo nada. Probablemente usar la bandera 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 (mucho más larga) de las dependencias dev de mi package.json
al 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 patrón ^\s*"([^"]+)".*$
para obtener el nombre del paquete y lo sustituyó por npm uninstall \1 --save-dev \nnpm install \1 --save-dev
. Haga clic en "reemplazar todo". La salida era la siguiente:
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 tiene que hacerlo solo de vez en cuando, pero puede escribir fácilmente un script, que analiza el package.json
y actualiza sus paquetes. Creo que es mejor de esta manera, porque puede editar su lista si necesita algo especial, por ejemplo, mantener la actual versión de una lib.
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-02-25 23:15:54
Si utiliza yarn, el siguiente comando actualiza todos los paquetes a su última versión:
yarn upgrade --latest
De sus docs:
El comando
upgrade --latest
actualiza los paquetes igual que el comando upgrade, pero ignora el rango de versiones especificado en package.json. En su lugar, se utilizará la versión especificada por la última etiqueta (potencialmente actualizando los paquetes a través de versiones principales).
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-04-17 13:14:24
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
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-05-22 14:17:11