375 votes

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

Je l'ai supprimé par accident et j'ai fait de nombreux changements à package.json depuis. Un site npm install o npm update ne génèrent pas package-lock.json plus. J'ai essayé de vider mon cache npm et mon cache nvm, mais rien ne semble fonctionner. J'ai essayé sur plusieurs versions de Node.js (6.10.3 Node.js - 3.10.10 npm est ce sur quoi je voudrais que ça fonctionne), et ça ne fonctionne sur aucune.

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

3 votes

Je pense que package-lock.json est spécifique à npm 5

7 votes

package-lock.json est généré 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.json et il a été généré manuellement en utilisant npm shrinkwrap commandement.

1 votes

@BrettMerrifield Merci ! C'était mon problème. J'ai mis à jour vers node 8.6.0 et avec elle npm 5.3.0 et ça a marché.

544voto

Janusz Przybylski Points 261

Dans npm 6.x et 7.x, vous pouvez utiliser

npm i --package-lock-only

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

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

37 votes

C'est la bonne réponse maintenant, les autres sont anciennes et ne fonctionnent pas.

0 votes

Une idée de 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=production ne semble pas fonctionner.

0 votes

Je ne pense pas qu'il soit possible de générer package-lock.json uniquement pour les dépendances de production. Mais si vous exécutez npm i --only=production il ne doit installer que les dépendances de production. Ainsi, votre processus de construction pourrait ressembler à ceci : installer toutes les dépendances, construire l'application, supprimer les dépendances de production. node_modules et n'installer que les dépendances de production.

238voto

Mathias Bynens Points 41065

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

Lorsque l'indice global package-lock=false est actif, vous pouvez toujours forcer la mise en place d'un projet. package-lock.json à mettre à jour en cours d'exécution :

npm install --package-lock

Cette commande est le seul moyen sûr de forcer une package-lock.json mettre à jour.

0 votes

@RonNewcomb Pouvez-vous nous donner plus d'informations ? Que voulez-vous dire par "ça ne marche pas" ? Quelle version de npm utilisez-vous ?

0 votes

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. Pas d'erreur, pas de changement de fichier, rien.

2 votes

Si vous utilisez npm v3 pour votre projet, vous n'auriez pas de package-lock.json . package-lock.json n'est pris en charge que par npm v5+.

18voto

LJHarb Points 1700

La réponse à cette question se trouve dans les commentaires ; package-lock.json est une fonctionnalité de npm v5 et plus. npm shrinkwrap est la façon dont vous créez un fichier de verrouillage dans toutes les versions de npm .

1 votes

Notez, cependant, que package-lock.json ne sont pas exactement la même chose que les fichiers shrinkwrap.

7 votes

Dans npm 5+, ils sont, en fait, exactement les mêmes, dans les moindres détails, à l'exception d'une chose : npm-shrinkwrap.json sera publié dans le registre, et package-lock.json ne le fera pas.

6 votes

Yep. C'est une différence assez importante cependant, c'est pourquoi j'ai laissé mon commentaire.

2voto

user2506522 Points 38

Comme plusieurs réponses l'ont expliqué, vous devriez courir :

npm i

MAIS si c'est le cas no résoudre...

Vérifiez la version de votre npm exécutable. (Pour moi, il s'agissait de la version 3.x.x qui n'utilise pas la fonction package-lock.json (du tout))

npm -v

Il devrait être au moins 5.x.x (qui introduit le fichier package-lock.json).

Pour mettre à jour npm sous Linux, suivez estos des instructions.

Pour plus de détails sur les fichiers de paquets, veuillez lire ce moyen histoire.

-2voto

Mcanic Points 408

Package-lock.json est re-généré à chaque fois que vous exécutez le programme npm i .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X