Con el lanzamiento de npm @ 5 , ahora escribirá un mensaje a package-lock.json
menos que npm-shrinkwrap.json
ya exista.
Instalé npm @ 5 a nivel mundial a través de:
npm install npm@5 -g
Y ahora, si npm-shrinkwrap.json
se encuentra un durante:
npm install
se imprimirá una advertencia:
npm WARN read-shrinkwrap This version of npm
is compatible with lockfileVersion@1,
but npm-shrinkwrap.json was generated for lockfileVersion@0.
I'll try to do my best with it!
Así que mi conclusión es que debería reemplazar la envoltura retráctil con el package-lock.json
.
Sin embargo, ¿por qué hay un nuevo formato para ello? ¿Qué puede package-lock.json
hacer el que npm-shrinkwrap.json
no puede?
fuente
package-lock.json
(lo que no es posible), entonces, si se va a instalar la biblioteca como una dependencia de algún otro paquete, de las bibliotecaspackage-lock.json
serían ignorados por la NGP. Sin embargo, si una biblioteca publica un archivonpm-shrinkwrap.json
e instala la biblioteca como dependencia, también instalará como dependencias secundarias las versiones exactas de todas las dependencias especificadas en la bibliotecanpm-shrinkwrap.json
.npm ci
existe para asegurar la instalación depackage-lock.json
como de solo lectura? (npm install
muta lapackage-lock.json
confusión causante y los posibles errores y no aprovecha elpackage-lock.json
per se.)npm ci
manejanpm-shrinkwrap.json
ypackage-lock.json
, ¿cuál es su relevancia para esta pregunta sobre la diferencia entre los dos archivos? Además, después de leer: creo que "npm install
... no aprovecha elpackage-lock.json
" ha sido falso desde npm 5.4 - Creo quenpm install
ahora respeta su apackage-lock
menos que sea totalmente incompatible con supackage.json
, en cuyo caso este último tendrá prioridad. (Pero he estado fuera del mundo de JavaScript por un tiempo, ¿me estoy perdiendo algo?)Explicación del desarrollador de NPM :
fuente
npm-shrinkwrap
es para node_modules exactos ... ¿Supongopackage-lock.json
que el bloqueo es menos que exacto? Y si es así, ¿qué no es bloqueo quenpm-shrinkwrap
es bloqueo?npm-shrinkwrap
. Como noto en mi respuesta, la conversión de apackage-lock.json
anpm-shrinkwrap.json
literalmente se realiza simplemente renombrando el archivo; que son "el mismo código".Creo que la idea era hacer que --save y shrinkwrap ocurrieran por defecto, pero evite cualquier problema potencial con un shrinkwrap que ocurra donde no se quería. Entonces, simplemente le dieron un nuevo nombre de archivo para evitar conflictos. Alguien de npm lo explicó más a fondo aquí:
https://www.reddit.com/r/javascript/comments/6dgnnq/npm_v500_released_save_by_default_lockfile_better/di3mjuk/
La cita relevante:
fuente