Reputation: 2470
What is the exact use of package.lock.json
file? I have read about it but it's confusing.
Let's say I do npm install
so that it will create a package.lock.json
file, and the next time when I do npm install
, will it retain installation of the same packages as it was mentioned in the package.lock.json
file?
Let's say I have a package version defined as "^1.0.0"
in my package.json
file and a new version becomes available in the npm registry. Will it update the package when I do npm install
, or will it keep the same as what was there in the package.json
?
Is there any easy way to update the package.json
file with the exact no of package version without manually updating it one by one? I want to keep maintain the version of the package the same so that next time anybody does npm install, they should get exactly the same package. It's need for a release branch
Actually I need what was the original definition of package.lock.json
file but I found inconsistency in its behavior.
I tried using NPM CI but it fails with error node_gyp needs python https://github.com/nodejs/node-gyp/issues/1977
Upvotes: 3
Views: 3112
Reputation: 1200
What is the exact use of package.lock.json file?
Ans: The file is used to describe the exact tree that was generated initially, that is the version of the dependency that was used initially to install (NOTE: It will always be modified if package.json or node_modules are modified by npm)
source: https://docs.npmjs.com/configuring-npm/package-lock-json.html
Now coming to your specific questions :
Let's say I do npm install
so that it will create a package.lock.json
file, and the next time when I do npm install, will it retain installation of the same packages as it was mentioned in the package.lock.json
file?
The simple answer here is: Yes
When you do npm install
initially, you specify the package name. npm will create node_modules
folder and package-lock.json
file and the entry of the package with the version that was used to install will be added. next time when you do npm install, without specifying the package it will not update any of your package even with the caret (^)
symbol because this time npm will look at the package-lock.json
file (as it is present there) and it will install the same version that is specified in the (package-lock.json
) file.
Let's say I have a package version defined as "^1.0.0"
in my package.json
file and a new version becomes available in the npm registry. Will it update the package when I do npm install, or will it keep the same as what was there in the package.json
?
As explained in first question, it will not, if the package-lock.json
is present in the directory. Updating of the package will only happen if package-lock.json
file and node_modules
folder are not present in the directory.
Is there any easy way to update the package.json
file with the exact no of package version without manually updating it one by one? I want to keep maintain the version of the package the same so that next time anybody does npm install
, they should get exactly the same package. It's need for a release branch
It is a good practice to use npm ci
, but you can also use npm update
, this will update the dependencies to its latest minor version, and your package.json
as well as package-lock.json
file will also be updated
For the production, its preferred way to use the same version of dependencies that was used initially. In this case it is better to have package-lock.json
file, so in case of dockerizing
application when you do npm install
it will install the dependencies with versions that are used in package-lock.json
Upvotes: 6