5

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

我认为npm install在目录中使用 package-lock.json 运行足以重新创建 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 文件夹。

4

3 回答 3

5

从 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

于 2019-02-16T18:25:02.863 回答
3

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

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

于 2019-12-15T12:41:16.433 回答
1

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文件中。

高温高压

于 2018-10-09T20:01:30.647 回答