Mise à jour 3 : Comme d'autres réponses le soulignent également, le npm ci
a été introduite dans npm 5.7.0 comme un moyen supplémentaire de réaliser des constructions rapides et reproductibles dans le contexte CI. Voir le documentation y le blog npm pour de plus amples informations.
Mise à jour 2 : La question de la mise à jour et de la clarification de la documentation est Problème GitHub #18103 .
Mise à jour 1 : Le comportement décrit ci-dessous a été corrigé dans npm 5.4.2 : le comportement actuellement prévu est décrit dans Problème GitHub #17979 .
Réponse originale : Le comportement de package-lock.json
a été modifié en npm 5.1.0 tel que discuté dans numéro 16866 . Le comportement que vous observez est apparemment prévu par npm à partir de la version 5.1.0.
Cela signifie que package.json
peut passer outre package-lock.json
chaque fois qu'une version plus récente est trouvée pour une dépendance dans package.json
. Si vous voulez épingler vos dépendances de manière efficace, vous devez maintenant spécifier les versions sans préfixe, par exemple, vous devez les écrire comme suit 1.2.0
au lieu de ~1.2.0
ou ^1.2.0
. Alors la combinaison de package.json
y package-lock.json
permettra d'obtenir des constructions reproductibles. Pour être clair : package-lock.json
seul ne verrouille plus les dépendances du niveau Root !
Que cette décision de conception soit bonne ou non est discutable, il y a une discussion en cours résultant de cette confusion sur GitHub en numéro 17979 . (A mes yeux, c'est une décision discutable ; au moins le nom lock
n'est plus valable aujourd'hui).
Autre remarque : il existe également une restriction pour les registres qui ne prennent pas en charge les paquets immuables, par exemple lorsque vous tirez des paquets directement de GitHub au lieu de npmjs.org. Voir cette documentation sur les verrous de paquets pour plus d'explications.
8 votes
Cela ne répond pas à votre question, alors j'espère qu'un commentaire est acceptable, mais jetez un coup d'œil à Yarn. Le changement a pris moins d'une heure pour nous.
9 votes
Le même problème mais en utilisant du fil github.com/yarnpkg/yarn/issues/570 (très instructif)
5 votes
J'ai le même problème. Mon
package-lock.json
se régénère lorsque je lancenpm install
. Cela sent le bug de NPM. Utilisez-vous votre propre registre ?3 votes
Voir aussi npm5 est l'équivalent du drapeau --pure-lockfile de yarn ?
2 votes
@YvesM.
--no-save
empêche la modification du fichier de verrouillage, mais n'affecte pas la mise à niveau de la dépendance de premier niveau que le PO mentionne.0 votes
Cela semble également se produire avec npm6 - j'ai exécuté
npm i
sans rien changer, et monpackage-lock.json
a été modifié (les versions sous tous les paquets de la sectionrequires
changé). Cela semble être prévu et ne pas casser quoi que ce soit ? Plus d'informations ici0 votes
Puisque les versions ont changé, cela devrait être reflété dans le verrouillage des paquets également.