Copié package.json
de otro proyecto y ahora quiero cambiar 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 es ejecutar npm info express version
luego actualizar cada dependencia en package.json
manualmente. Tiene que 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" } }
Para soluciones específicas de Yarn , consulte este hilo de desbordamiento de pila .
Esta función se introdujo en npm v5
. actualice a npm usando npm install -g npm@latest
y
para actualizar package.json
elimine /node_modules
y package-lock.json (if you have any)
ejecutar npm update
. esto actualizará las dependencias package.json a la última versión, según semver .
para actualizar a la última versión. puedes ir con npm-check-updates
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 Yarn sobre npm
. je.
Intente seguir el comando si usa npm 5 y el nodo 8
actualización npm --guardar
Me gusta mucho cómo funciona npm-upgrade . Es una utilidad de línea de comando simple que revisa 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 optar por 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 funcione el comando. 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
Uso npm-check
para lograr 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
Si está utilizando Visual Studio Code como su IDE, esta es una pequeña y divertida extensión para hacer que la actualización de package.json
sea un proceso de un solo clic.
Greenkeeper si está usando Github. https://greenkeeper.io/
Es una integración de Github e increíblemente fácil de configurar. Cuando está instalado, crea automáticamente solicitudes de incorporación de cambios 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 PR deben desencadenar una compilación en un servicio de CI y, dependiendo de una verificación exitosa o fallida, puede seguir averiguando qué está desencadenando el problema o, cuando CI pasa, simplemente fusionar 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, por lo que finalmente pude fusionar el PR. Viene con una gran cantidad de emoji, también.
Otra alternativa sería https://dependencyci.com/ , sin embargo, no la probé intensamente. Después de un primer vistazo, Greenkeeper se ve mejor en general en mi opinión y tiene una mejor integración.
Debería obtener las últimas versiones deseadas compatibles con su aplicación. Pero no las últimas versiones.
Solución sin paquetes adicionales
Cambie la versión de cada dependencia a *
:
"dependencies": { "react": "*", "react-google-maps": "*" }
Luego ejecute npm update --save
.
¿Algunos de sus paquetes se actualizaron, pero otros no?
"dependencies": { "react": "^15.0.1", "react-google-maps": "*" }
Esta es la parte complicada, significa que su versión local de "reaccionar" era más baja que la más nueva. En este caso, npm descargó y actualizó el paquete "reaccionar". 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 carpeta node_modules
.
por ejemplo, elimine node_modules/react-google-maps
.
Finalmente ejecute 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.
Updtr!
Basado en npm obsoleto, 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.
Aquí hay una expresión regular básica para hacer coincidir los números de versión semántica para que pueda reemplazarlos rápidamente con un asterisco.
([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
Seleccione las versiones del paquete que desea reemplazar en el archivo JSON.
Ingrese la expresión regular anterior y verifique que coincida con el texto correcto.
Reemplace todas las coincidencias con un asterisco.
Ejecute npm update --save
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 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:
"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 sin filo de la actualización de 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, probablemente 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á las dependencias instaladas que tienen versiones más recientes disponibles.
Para una solución específica de Yarn , consulte esta respuesta de StackOverflow .
npm-check-updates
es una utilidad que ajusta automáticamente un paquete.json con la última versión de todas las dependencias
consulte 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 tiene una versión moderna de npm
es:
$ npx npm-check-updates -u $ npm install
Esto funciona a partir de npm 1.3.15.
"dependencies": { "foo": "latest" }
npm outdated npm update git commit package-lock.json
npm install -g npm-check-updates npm-check-updates npm shrinkwrap git commit package-lock.json
Asegúrese de reducir sus deps, o puede terminar con un proyecto muerto. Saqué un proyecto el otro día y no funcionaba porque mis departamentos estaban desactualizados/actualizados/un desastre. Si lo hubiera envuelto, npm habría instalado exactamente lo que necesitaba.
Para los curiosos que llegan tan lejos, esto es lo que recomiendo:
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 haga una instalación limpia (sin el rm, recibí algunas advertencias de dependencia)
$ rm -rf node_modules $ npm install
npm-shrinkwrap.json
con npm shrinkwrap
$ rm npm-shrinkwrap.json $ npm shrinkwrap
npm install
ahora usará versiones exactas en npm-shrinkwrap.json
Si 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).
*
como la versión para las últimas versiones, incluida la inestablelatest
para la última versión estableLatestStablePackages
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" },
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ó de manera efectiva al instalar las actualizaciones estables.
Como Etienne dijo anteriormente: instale y ejecute con esto:
$ npm install -g npm-check-updates $ npm-check-updates -u $ npm install
Para actualizar una dependencia a su última versión sin tener que abrir manualmente el package.json
y cambiarlo, puede ejecutar
npm install {package-name}@* {save flags?}
es decir
npm install express@* --save
Como referencia, npm-install
Actualización : las versiones recientes pueden necesitar la última bandera en su lugar, es decir, npm install express@latest
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 aporta una sola línea para el caparazón basada en npm outdated
. Vea la edición para el código y la explicación.
PD: También odio tener que editar manualmente package.json
para cosas como esa;)
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í: canalizar la salida npm outdated
como json, a jq
(jq es una herramienta de consulta / analizador de línea de comando json)
(Observe el uso del argumento --depth
para npm outdated
)
jq reducirá la salida solo al nombre del paquete de nivel superior.
finalmente, xargs coloca cada LIBRARYNAME uno a la vez en un npm install LIBRARYNAME --save-dev
Lo anterior es lo que me funcionó en una máquina en ejecución: 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 las devDependancies
de la clave json usando --save-dev
, ese fue un requisito de mis proyectos, muy posiblemente no el tuyo.
Después compruebo que todo esté en salsa con un simple
npm outdated --depth=0
Además, puede verificar las versiones actuales de la biblioteca instalada de nivel superior con
npm list --depth=0
alternativa es
"dependencies":{ "foo" : ">=1.4.5" }
cada vez que usa 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
Los comandos anteriores no son seguros porque puede romper su módulo al cambiar de versión. En cambio, recomiendo lo siguiente
npm shrinkwrap
.npm install -g próxima actualización // de tu paquete próxima actualización
Si está buscando una solución más fácil que no implique la instalación de paquetes npm, verifique updatepackagejson.com
Actualización segura
Use 'npm obsoleto' para descubrir dependencias que están desactualizadas.
Use 'npm update' para realizar actualizaciones de dependencia seguras.
Use 'npm install @latest' para actualizar a la última versión principal de un paquete.
Actualización de última hora
Use 'npx npm-check-updates -u'.
'npm install' para actualizar todas las dependencias a sus últimas versiones principales.
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()))"
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:
npm-check-updates -u
Todo en package.json ahora está actualizado a la última versión.
La forma más fácil de hacer esto a partir de hoy es usar pnpm en lugar de npm y simplemente escribir:
pnpm update --latest
A partir de la versión 5.2.0 de npm, 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 utilidad npx
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
Si desea utilizar un enfoque suave a través de una hermosa (para terminal) interfaz de informes interactivos, le sugiero que use npm-check .
Es menos complicado y le brinda un mayor conocimiento y control de las actualizaciones de dependencia.
Para darle una idea de lo que le espera, aquí hay una captura de pantalla (extraída de la página de git para npm-check):
Es posible una actualización automática con NPM-script:
{ "_cmd-update-modules": "npm run devops-update-modules", "scripts": { "create-global-node-modules-folder": "if not exist \"%appdata%\\npm\\node_modules\" mkdir %appdata%\\npm\\node_modules", "npm-ig": "npm i npm@latest -g", "npm-check-ig": "npm i npm-check@latest -g", "eslint-ig": "npm i eslint@latest -g", "npm-check-ul": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y", "npm-check-ug": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -g", "npm-deep-update-l": "npm update --depth 9999 --dev", "npm-deep-update-g": "npm update --depth 9999 --dev -g", "npm-cache-clear": "npm cache clear --force", "devops-update-modules": "npm run create-global-node-modules-folder && npm run npm-ig && npm run npm-check-ig && npm run eslint-ig && npm run npm-check-ul && npm run npm-check-ug && npm run npm-deep-update-l && npm run npm-deep-update-g && npm run npm-cache-clear" } }
Para más detalles y manual paso a paso: https://stackoverflow.com/a/34295664
Si usa yarn, el siguiente comando actualiza todos los paquetes a su última versión:
yarn upgrade --latest
De sus documentos :
El comando
upgrade --latest
actualiza los paquetes de la misma manera 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 etiqueta más reciente (potencialmente actualizando los paquetes en las versiones principales).
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
El siguiente código (que fue aceptado) me escribió algo así como "se tarda demasiado, bla, bla" y no hizo nada. Probablemente usar la bandera global fue el problema, no sé.
npm i -g npm-check-updates ncu -u npm install
Decidí usar mi editor de texto y seguir un enfoque semimanual en su lugar.
Copié una lista como esta (mucho más larga) de las dependencias de desarrollo 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 reemplacé con npm uninstall \1 --save-dev \nnpm install \1 --save-dev
. Hice 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 solo tiene que hacerlo de vez en cuando, pero puede escribir fácilmente un script que analice el package.json
y actualice 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 biblioteca.
Para ver qué paquetes tienen versiones más recientes disponibles, utilice el siguiente comando:
npm outdated
para actualizar solo una dependencia solo use el siguiente comando:
npm install yourPackage@latest
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
¿Qué significa --save-dev
?
npm install @progress/kendo-angular-dateinputs@latest --save-dev
Como dice la documentación de instalación de npm:
-D, --save-dev: el paquete aparecerá en sus dependencias de desarrollo.
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 la descripción al ejecutar npm-check-updates -u
:
La siguiente dependencia está satisfecha por su rango de versión declarado, pero la versión instalada está detrás. Puede instalar la última versión sin modificar el archivo del paquete mediante la actualización de 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: sobrescribir el archivo del paquete
-a, --upgradeAll: incluye incluso aquellas dependencias cuya última versión satisface la dependencia de 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