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?

Beaucoup d'argent
la source
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.

Mathias Bynens
la source
@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.

Janusz Przybylski
la source
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.

LJHarb
la source
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 .

betontalpfa
la source
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
SridharKritha
la source
-3

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

Mcanic
la source
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