Avec la sortie de npm @ 5 , il écrira désormais a package-lock.json
sauf si un npm-shrinkwrap.json
existe déjà.
J'ai installé npm @ 5 dans le monde via:
npm install npm@5 -g
Et maintenant, si un npm-shrinkwrap.json
est trouvé pendant:
npm install
un avertissement sera imprimé:
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!
Donc, mon point à retenir est que je devrais remplacer l'emballage rétractable par le package-lock.json
.
Pourtant, pourquoi y a-t-il un nouveau format pour cela? Que peuvent package-lock.json
faire les npm-shrinkwrap.json
non?
la source
package-lock.json
( ce qui est impossible), alors si vous deviez installer cette bibliothèque comme une dépendance d'un autre paquet, la bibliothèque depackage-lock.json
seraient ignorés par NPM. Cependant, si une bibliothèque publie unnpm-shrinkwrap.json
fichier et que vous installez la bibliothèque en tant que dépendance, vous installerez également en tant que dépendances secondaires les versions exactes de toutes les dépendances spécifiées dans la bibliothèquenpm-shrinkwrap.json
.npm ci
existe pour assurer l'installation dupackage-lock.json
en lecture seule. (npm install
mute lapackage-lock.json
confusion qui cause et les bogues potentiels et ne profite pas dupackage-lock.json
per se.)npm ci
gèrenpm-shrinkwrap.json
etpackage-lock.json
- quelle est sa pertinence par rapport à cette question sur la différence entre les deux fichiers? Aussi, après avoir lu: je pense que "npm install
... ne profite pas dupackage-lock.json
" a été faux depuis npm 5.4 - je croisnpm install
maintenant respecte votrepackage-lock
sauf si c'est carrément incompatible avec le vôtrepackage.json
, auquel cas ce dernier prévaudra. (Mais je suis un peu hors du monde JavaScript - est-ce que je manque quelque chose?)Explication du développeur NPM :
la source
npm-shrinkwrap
c'est pour node_modules exact .... Je suppose que lepackage-lock.json
verrouillage est moins qu'exact ? Et si tel est le cas, qu'est-ce que le verrouillage n'est pas lenpm-shrinkwrap
verrouillage?npm-shrinkwrap
. Comme je le note dans ma réponse, la conversion de apackage-lock.json
en an senpm-shrinkwrap.json
fait littéralement en renommant le fichier; ce sont "le même code".Je pense que l'idée était que --save et shrinkwrap se produisent par défaut, mais évitez tout problème potentiel avec un film rétractable là où il n'était pas voulu. Donc, ils lui ont juste donné un nouveau nom de fichier pour éviter tout conflit. Quelqu'un de npm l'a expliqué plus en détail ici:
https://www.reddit.com/r/javascript/comments/6dgnnq/npm_v500_released_save_by_default_lockfile_better/di3mjuk/
La citation pertinente:
la source