【问题标题】:Is there a way to force npm to generate package-lock.json?有没有办法强制 npm 生成 package-lock.json?
【发布时间】:2018-03-21 02:22:36
【问题描述】:

我无意中删除了它,并从那时起对package.json 进行了许多更改。 npm installnpm update 不再生成 package-lock.json。我尝试清除我的 npm 缓存和我的 nvm 缓存,但似乎没有任何效果。我在几个版本的 Node.js 上尝试过(6.10.3 Node.js - 3.10.10 npm 是我想要的),但它在任何版本上都不起作用。

有没有办法强制 npm 生成package-lock.json 文件?

【问题讨论】:

  • 我认为 package-lock.json 特定于 npm 5
  • package-lock.json从v5开始在npm中默认自动生成,在之前的版本中,锁定文件名为npm-shrinkwrap.json,它是使用npm shrinkwrap命令手动生成的。
  • @BrettMerrifield 谢谢!那是我的问题。我更新到 node 8.6.0 并使用它 npm 5.3.0 并且它有效。
  • 检查你的.gitignore 我不小心在.gitignore 中有package-lock.json,因为package-lock.json 没有出现在git status 中把我甩了。

标签: node.js npm package-lock.json


【解决方案1】:

在 npm 6.x 和 7.x 中你可以使用

npm i --package-lock-only

根据https://docs.npmjs.com/cli/install.html

--package-lock-only 参数只会更新 package-lock.json,而不是检查 node_modules 和下载依赖项。

【讨论】:

  • 现在这个是正确的答案,其他的都老了,不行了。
  • 知道如何在没有 devDependencies 的情况下生成 package-lock.json 吗?我需要这个来进行干净的生产安装。 npm i --package-lock-only --only=production 似乎不起作用。
  • 我认为不可能只为生产依赖项生成package-lock.json。但是如果你运行npm i --only=production 它应该只安装生产依赖。因此,您的构建过程可能如下所示:安装所有依赖项、构建应用程序、删除 node_modules 并仅安装生产依赖项。
  • 如果您想将旧项目从 yarn.lock 移走,这将非常有用。谢谢。
【解决方案2】:

默认情况下,package-lock.json 会在您运行 npm install 时更新。但是,可以通过在 ~/.npmrc 中设置 package-lock=false 来全局禁用此功能。

当全局 package-lock=false 设置处于活动状态时,您仍然可以通过运行强制更新项目的 package-lock.json 文件:

npm install --package-lock

此命令是强制package-lock.json 更新的唯一可靠方法。

【讨论】:

  • @RonNewcomb 你能分享更多信息吗? “它不起作用”是什么意思?您使用的是哪个 npm 版本?
  • npm 版本 3.10.10 节点 6.10.3 您列出的命令似乎是空操作?什么都没发生。没有错误,没有文件更改,什么都没有。
  • 如果您在项目中使用 npm v3,则不会有 package-lock.jsonpackage-lock.json 仅受 npm v5+ 支持。
  • npm v 6.4.1 这不会创建 package-lock.json
  • 它适用于我,在 6.4.1 中。将其设置为 false 也会阻止它创建一个。
【解决方案3】:

这在 cmets 中有答案; package-lock.jsonnpm v5 及更高版本中的一个功能。 npm shrinkwrap 是您在所有版本的npm 中创建锁定文件的方式。

【讨论】:

  • 但是请注意,package-lock.jsons 与收缩包装文件并不完全相同。
  • 在 npm 5+ 中,它们实际上完全相同,直到每个细节,除了一件事:npm-shrinkwrap.json 将被发布到注册表,package-lock.json 不会。
  • 是的。不过,这是一个非常重要的区别,这就是我留下评论的原因。
  • npm shrinkwrap 生成npm-shrinkwrap.json,但是如何生成package-lock.json
  • 在 npm 5+ 中是自动的,或者你可以在 5+ 中使用 --package-lock 强制它
【解决方案4】:

正如几个答案所解释的,你应该运行:

npm i

但是如果它确实没有解决...

检查您的 npm 可执行文件的版本。(对我来说,它是 3.x.x,它不使用 package-lock.json(完全))

npm -v

应该是至少 5.x.xintroduced package-lock.json 文件。)

要在 Linux 上更新 npm,请按照 these 的说明进行操作。

有关包文件的更多详细信息,请阅读this medium故事。

【讨论】:

    【解决方案5】:

    如果您的 npm 版本低于 版本 5 则安装更高版本以自动生成 package-lock .json.

    示例:将您当前的 npm 升级到版本 6.14.0

    npm i -g npm@6.14.0
    

    您可以通过

    查看最新的npm版本列表
    npm view npm versions
    

    【讨论】:

      【解决方案6】:

      当使用本地包时,我发现可靠地重新生成 package-lock.json 文件的唯一方法是删除它,以及在链接的模块和所有相应的 node_modules 文件夹中,然后用npm i 重新生成它

      【讨论】:

        猜你喜欢
        • 2020-05-20
        • 2019-06-07
        • 2020-05-03
        • 1970-01-01
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 2018-09-04
        相关资源
        最近更新 更多