我可以从package-lock.json重新创建node_modules吗?

时间:2018-10-06 05:24:11

标签: npm npm-install package-lock.json

我从github克隆了一个仓库,仓库中有一个package-lock.json(但没有package.json)。然后在git bash终端中,我转到目录并运行npm install,但我仅收到一条消息,说没有package.json,然后package-lock.json中的所有内容都被删除,因此除项目外,它基本上是空的名称和版本。

我认为在目录中使用package-lock.json运行npm install足以重新创建node_modules,但是我是否严重误解了它的工作原理?顺便说一句,我有节点8.12.0和npm 6.4.1,并且在Windows 10上运行。另外,我认为package-lock.json是在unix系统上创建的,因此在上使用package-lock.json时可能会出现问题。不同的操作系统?

我已经尝试运行npm init只是为了获取package.json文件,然后运行npm install,但这仍然不能为我提供一个node_modules文件夹。

3 个答案:

答案 0 :(得分:1)

从2018年3月5日开始,您可以运行npm ci从package-lock.json安装软件包。

  

npm ci绕过软件包的package.json来从   软件包的锁定文件。

https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable

答案 1 :(得分:0)

AFAIK,package-lock.json文件依赖于package.json文件的存在,因此您将无法仅从node_modules文件重新创建package-lock.json文件夹(很高兴在这里被证明是错误的。)

因此,最好的选择是使用auto-install之类的模块,该模块能够根据项目中的依赖关系生成package.json文件,就像它们在文件中一样。

将其全局安装(npm install -g auto-install),然后需要生成一个空的package.json文件以使其运行(在项目根目录中使用npm init -y)。用命令auto-install开始,它应该将依赖项添加到package.json文件中。

HTH

答案 2 :(得分:0)

package-lock.json记录了需要安装的软件包的确切版本和URL,因此您可以使用npm进行相应的安装:

  • npm可以从指向tarball的URL安装
  • --no-package-lock选项,告诉npm不要触摸package-lock.json文件

例如,要将所有软件包安装在package-lock.json中:

cat package-lock.json | jq '.dependencies[].resolved' | xargs npm i --no-package-lock

jq是用于解析jq的命令行工具,您可以编写一个简单的JavaScript Shell来解析它(如果您不想安装jq或学习jq的查询语法)。