npm 更新:从 github 存储库中拉取,未进行最新提交

pau*_*l23 7 git node.js npm

项目中的包之一基于内部 npm 存储库。

{
  "dependencies": {
    "my-library": "git+ssh://<gitrepo>#dist"
  }
}
Run Code Online (Sandbox Code Playgroud)

其中 dist 是要克隆的分支。这“有效”,因为它安装了正确的版本。但是,每当此分支发生更新时,我都无法使用 npm 进行更新?- 我尝试过npm update My-Library,但这只是下载旧的提交,它不会转移到同一分支中的较新的提交。

我发现的唯一“解决方案”是手动从 node_modules 文件夹中删除库,并删除其中的库条目package-lock.json(或将其中的引用更新为正确的提交)。

让库遵循另一个 git 存储库的最新版本的正确方法是什么?

编辑:如果这只是一个明确的“不支持”,那对我来说也足够了。

hac*_*ape 8

从我的理解和实验来看,问题似乎与如何package-lock.json工作有关。我设置了一个库,其中一个依赖项设置为

\n
"fn-with-hooks": "git+ssh://git@github.com/hackape/fn-with-hooks.git#master"\n
Run Code Online (Sandbox Code Playgroud)\n

和初始npm install会生成一个package-lock.json包含

\n
"fn-with-hooks": "git+ssh://git@github.com/hackape/fn-with-hooks.git#master"\n
Run Code Online (Sandbox Code Playgroud)\n

正如您所看到的,该version字段被锁定到特定的提交哈希,并且后续调用npm install不会更改此版本字段,从而阻止“跟踪”分支到最新的提交。这就是锁文件应该如何工作的。

\n

删除package-lock.json,(无需删除node_module/lib)即可npm install解决此问题。

\n

我的直接想法是尝试从package-lock.json. 但 npm 锁定文件是一个整体销售解决方案,不提供这种细粒度的控制。

\n

因此,这条路径上唯一的选择是禁用package-lock.json.

\n

如果您仍然打算使用package-lock.json,一种解决方法是手动运行npm update lib-name命令以强制将该库更新到最新版本。这也将version相应地更新锁定文件中的字段。

\n
\n

更新

\n

我\xe2\x80\x99m 不知道为什么npm update\xe2\x80\x99 在你这边不起作用。它适用于我的。也许您想仔细检查它\xe2\x80\x99是否确实是事实,或者是您的误解。虽然我严重怀疑这一点,但这也可能是 npm 版本的差异。I\xe2\x80\x99m 使用 v12.14。

\n

我有另一种解决方法,我尝试过并且有效。您不必删除整个package-lock.json文件,您可以重写它以仅排除该 git-base lib 的记录。这样 npm 就缺少锁定信息,因此它\xe2\x80\x99 会强制重新获取你的库。锁定文件中的其他库记录保持不变,因此限制了影响范围。

\n


Tro*_*ott 0

您描述的行为不是我所看到的行为(尽管请参阅最后一段以了解可能发生的情况)。console.log()我创建了一个打印 a并将其推送到存储库分支的模块git。我的package.json看起来像这样:

{
  "name": "temp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "MIT",
  "dependencies": {
    "slug": "git+ssh://git@github.com/trott/slug.git#temp"
  }
}
Run Code Online (Sandbox Code Playgroud)

我的index.js:

require('slug');
Run Code Online (Sandbox Code Playgroud)

我跑npm install过去node index.js,看到了预期的消息。

然后我更新了消息,提交并推送到分支。我跑npm update过去收到了新消息。

我第二次更新了消息,再次提交并推送到分支。这次我跑了,npm update slug它仍然更新了包。

我的npm版本是6.14.8。

我做的导致它无法更新的一件事是如果我使用了不同的大小写,我注意到你在上面做了。你的package.json条目说my-library但你的命令是npm update My-Library。大小写不同。我这样做了npm update Slug,但没有更新模块。这会是你麻烦的根源吗?如果没有,您的做法可能与我上面的做法有所不同?如果您没有想到,也许您可​​以尝试我上面描述的方法,看看它对您来说有什么问题?(或者你的测试用例已经那么简化了吗?)