scripts node manager last example commands node.js dependencies npm versioning dependency-management

node.js - node - package.json example



"Npm update" está instalando una versión beta del módulo sobre la versión estable que se instaló después de "npm install" (3)

Habría pensado que el enfoque más simple aquí sería utilizar la tilde ~

"dependencies": { "mongoose": "~3.8.12" }

La diferencia con "caret" ^ es que la "tilde" coincidirá con 3.8.x donde "caret" coincide con algo igual o por encima de la versión especificada.

Actualmente, el paquete npm mongoose está en la versión 3.8.12. Ejecutando npm install mongoose --save instala correctamente la versión 3.8.12 y guarda la dependencia en package.json de la siguiente manera:

"dependencies": { "mongoose": "^3.8.12" }

Si busca en node_modules/mongoose/package.json , puede ver que la versión instalada es 3.8.12. Sin embargo, si ahora npm update npm, npm seguirá adelante e instalará una versión inestable de mongoose (3.9.0). Supongo que esto se debe a la caret en la entrada de dependencia que le indica a npm que siga adelante y actualice versiones menores (es decir, 3.8 a 3.9). Eso está bien, excepto que no quiero ninguna versión preliminar. Si npm update la dependencia y npm update caret then npm update funciona como se esperaba, excepto que ahora tengo que actualizar manualmente la versión de la dependencia, incluso para actualizaciones menores y parches.

Se puede ver en la ejecución de npm info mongoose que tienen una etiqueta "más reciente" y una etiqueta "inestable".

Entonces, claramente, la npm install utiliza la última npm install menos que se especifique lo contrario, mientras que npm update está ignorando la etiqueta por completo y está capturando la última versión menor de la que tiene conocimiento.

¿Hay alguna forma de modificar la dependencia para que npm update la última versión secundaria pero ignore las versiones preliminares?

ACTUALIZAR

El mismo problema ocurre si trato de usar 3.xx como la dependencia. Esperaba que eso todavía me permitiera actualizar a través de versiones secundarias sin versiones preliminares, pero ese no es el caso: /

Tilde ( ~3.8.12 ) técnicamente funciona pero es una bandaid. La única razón por la que "funciona" es porque los cambios de ruptura que se están introduciendo están en 3.9.0-unstable y tilde no permite que npm se actualice a través de versiones secundarias. Si estos cambios "inestables" se introdujeran en 3.8.13-unstable entonces se producirá este mismo problema incluso al usar la tilde.

ACTUALIZACIÓN 2

También traté de especificar manualmente la etiqueta "más reciente": ^3.8.12-latest . Eso no cambió nada; npm update ignora la etiqueta por completo, incluso si está explícitamente en la lista de dependencias en sí misma: /


Solo para actualizar para cualquiera que haya encontrado esto como lo hice yo, hice un pequeño golpe semver y lo publiqué etiquetado como beta, pero en los 10-15 minutos posteriores a la publicación, npm instala de forma predeterminada esta versión beta, a pesar de estar claramente etiquetado .

Creo que hay un tiempo de retraso en la actualización de la tabla de semver, si le das 10-15, tus npm install <packagename> el futuro npm install <packagename> deberían darte la versión correcta.


Semver no especifica una manera de diferenciar versiones estables e inestables.

Como usted dijo, la versión anterior permitiría que npm update instale cualquier versión 3.xx , mientras que la tilde permitiría cualquier versión 3.8.x incluso si la siguiente versión se llama 3.8.13-broken .

Lamentablemente, lo mismo sucede con cualquier operador semver , por lo que no hay escape.

Como ve, es mejor que utilice la versión específica 3.8.12 .