50

I downloaded a theme and it has a package-lock.json file but no package.json file. Is there a way I can generate the package.json from the package-lock.json file. How do I install the node modules with just the package-lock.json file. Is there a way to do that?

Sandeep kurien
  • 603
  • 1
  • 5
  • 8

4 Answers4

41
Warning: Do not attempt before reading comments below & backup package-lock.json.

Install the latest npm with npm install -g npm

Run npm init and respond to the questions.

The above command will generate a package.json and include the existing packages listed in package-lock.json

Simon_Weaver
  • 140,023
  • 84
  • 646
  • 689
VeeeneX
  • 1,556
  • 18
  • 26
27

I think I figured it out.

I don't think npm init can draw from package-lock.json. However it does seem to pull from what is already in your /node_modules. I believe this is why @Harry B's solution works for some and not at all for others.

For example, if you have just cloned your project which contains package-lock.json, no package.json, and empty/non-existence node_modules, npm init won't create any dependencies. However, if you run npm install pkg1 pkg2 pkg3 ... then run npm init it will create the dependencies in package.json.

Paul
  • 552
  • 5
  • 11
  • 1
    This is a perfect explanation. I cloned a project to local that included node_modules but not package.json, so I couldn't rebuild and deploy. This was the perfect solution to my issue. – billoverton Feb 28 '20 at 20:22
  • 3
    This is perfect comment on situation, but it has nothing to do with answering to the question: `How do I install the node modules with just the package-lock.json file` – Kos Apr 11 '20 at 21:34
19

https://pravnyadv.github.io/unpackage/ seems to work. Copy your package lock file text in, hit the button, copy out the text into a new package.json file.

Erhannis
  • 4,256
  • 4
  • 34
  • 48
6

package-lock.json file relies on the presence of a package.json file, So it's not possible to retrieve package.json (happy to be proved wrong).

So a possible solution left is to use a module like auto-install which is capable of generating package.json from the project file dependencies.

First, you need to install the module globally npm install -g auto-install. Then run npm init and answer the basic requirements.

Then, run auto-install in your project root directory. All the dependencies should reflect in package.json file.

**

Or Install node modules directly from package-lock.json

**

Run npm ci which bypasses a package’s package.json to install modules from a package’s lockfile.

More Information

Anand
  • 77
  • 1
  • 2
  • 3
    `npm ci` always tells me "added 0 packages" and `auto-install` **rewrote my _package-lock.json_**, installed 2 random packages and stopped at "Watchers initialized"... _node_modules_ folder was created but only with these 2 packages... Glad I had a lock backup :( – CPHPython Apr 12 '19 at 13:24
  • 4
    `npm ci` **depends** on `package.json` so it cannot be used with only `package-lock.json` present – Kos Apr 11 '20 at 21:36