Existe-t-il un moyen de forcer npm à générer package-lock.json?


132

Je l'ai supprimé par accident et j'ai apporté de nombreuses modifications package.jsondepuis. Un npm installou npm updatene génère package-lock.jsonplus. J'ai essayé de vider mon cache npm et mon cache nvm, mais rien ne semble fonctionner. Je l'ai essayé sur plusieurs versions de Node.js (6.10.3 Node.js - 3.10.10 npm est ce sur quoi je voudrais qu'il fonctionne), et cela ne fonctionne sur aucune.

Existe-t-il un moyen de forcer npm à générer le package-lock.jsonfichier?


2
Je pense que package-lock.json est spécifique à npm 5
— Brett Merrifield

3
package-lock.jsongénère automatiquement par défaut dans npm à partir de la v5, dans les versions précédentes, le nom du fichier de verrouillage était npm-shrinkwrap.jsonet il a été généré manuellement à l'aide de la npm shrinkwrapcommande.
— alexmac

@BrettMerrifield Merci! C'était mon problème. J'ai mis à jour node 8.6.0et avec npm 5.3.0et cela a fonctionné.
— Big Money

Vérifiez votre .gitignore. J'avais accidentellement package-lock.jsondans le d'une .gitignoremanière ou d'une autre et parce que je package-lock.jsonne me présentais pas, git statuscela me dérangeait.
— Joshua Pinter

Réponses:


156

Par défaut, package-lock.jsonest mis à jour chaque fois que vous exécutez npm install. Cependant, cela peut être désactivé globalement en définissant package-lock=falsedans ~/.npmrc.

Lorsque le package-lock=falseparamètre global est actif, vous pouvez toujours forcer la mise package-lock.jsonà jour du fichier d' un projet en exécutant:

npm install --package-lock

Cette commande est le seul moyen infaillible de forcer une package-lock.jsonmise à jour.


@RonNewcomb Pouvez-vous partager plus d'informations? Qu'entendez-vous par «ça ne marche pas»? Quelle version de npm utilisez-vous?
— Mathias Bynens

npm version 3.10.10 Node 6.10.3 La commande que vous avez listée semble être un no-op? Rien ne se passe. Aucune erreur, aucun changement de fichier, rien.
— Ron Newcomb

2
Si vous utilisez npm v3 pour votre projet, vous n'auriez pas de fichier package-lock.json. package-lock.jsonest uniquement pris en charge par npm v5 +.
— Mathias Bynens

8
npm v 6.4.1 et cela ne crée pas de package-lock.json
— mjuopperi

1
Cela fonctionne pour moi, en 6.4.1. Le définir sur false l'empêche également d'en créer un.
— Kevin B

94

Dans npm 6.x, vous pouvez utiliser

npm i --package-lock-only

Selon https://docs.npmjs.com/cli/install.html

L'argument --package-lock-only mettra à jour uniquement le package-lock.json, au lieu de vérifier node_modules et de télécharger les dépendances.


12
C'est la bonne réponse maintenant, d'autres sont vieux et ne fonctionneront pas.
— Vaibhav Singh

Un indice comment générer un package-lock.json sans devDependencies? J'en ai besoin pour des installations de production propres. npm i --package-lock-only --only=productionne semble pas fonctionner.
— Robert

Je ne pense pas qu'il soit possible de générer package-lock.jsonuniquement pour les dépendances de production. Mais si vous l'exécutez, npm i --only=productionil ne devrait installer que les dépendances de production. Ainsi, votre processus de construction pourrait ressembler à ceci: installer toutes les dépendances, créer une application, supprimer node_moduleset installer uniquement les dépendances de production.
— Janusz Przybylski

14

Ceci est répondu dans les commentaires; package-lock.jsonest une fonctionnalité de la version 5 npmet supérieure. npm shrinkwrapest la façon dont vous créez un fichier de verrouillage dans toutes les versions de npm.


1
notez cependant que les package-lock.jsons ne sont pas exactement la même chose que les fichiers d'emballage rétractable.
— strugee

7
dans npm 5+, ils sont, en fait, exactement les mêmes, jusque dans les moindres détails, sauf pour une chose: npm-shrinkwrap.jsonseront publiés dans le registre, et package-lock.jsonne le seront pas.
— LJHarb

6
Oui. C'est une différence assez importante, c'est pourquoi j'ai laissé mon commentaire.
— strugee

1
npm shrinkwrapgénère npm-shrinkwrap.json, mais comment générez-vous package-lock.json?
— Vic

5
C'est automatique dans npm 5+, ou vous pouvez le forcer dans 5+ avec--package-lock
— LJHarb

1

Comme plusieurs réponses l'ont expliqué, vous devez exécuter:

npm i

MAIS si ça ne résout pas ...

Vérifiez la version de votre npmexécutable. (Pour moi, c'était 3.xx qui n'utilise pas le package-lock.json(du tout))

npm -v

Il doit être au moins 5.xx (qui a introduit le fichier package-lock.json.)

Pour mettre à jour npm sur Lunix, suivez ces instructions.

Pour plus de détails sur les fichiers de package de, veuillez lire cette histoire moyenne .


0

Si votre version de npm est inférieure à la version 5, installez la version supérieure pour obtenir la génération automatique de package-lock.json .

Exemple: mettez à niveau votre npm actuel vers la version 6.14.0

npm i -g npm@6.14.0

Vous pouvez afficher la dernière liste des versions de npm par

npm view npm versions

-3

package-lock.json est regénéré à chaque exécution npm i.


13
Cela n'est vrai que pour certaines versions de nodeet npm. Je pense que c'est npm> = 5.0et node> = 7.0, mais je ne suis pas sûr à 100% à ce sujet. Cela ne fonctionne pas avec node 6.11.3moi.
— Thor84no

2
N'est pas non plus vrai si le package-lock est défini sur false dans la configuration npm. Utilisez 'npm config list' pour vérifier
— Damo

package-lock.json est généré automatiquement pour toutes les opérations où npm modifie l'arborescence node_modules ou package.json. Acorrding à docs.npmjs.com/files/package-lock.json . Mais la version npm n'est pas spécifiée.
— NanoNova
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.