项目中的包之一基于内部 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 存储库的最新版本的正确方法是什么?
编辑:如果这只是一个明确的“不支持”,那对我来说也足够了。
从我的理解和实验来看,问题似乎与如何package-lock.json工作有关。我设置了一个库,其中一个依赖项设置为
"fn-with-hooks": "git+ssh://git@github.com/hackape/fn-with-hooks.git#master"\nRun Code Online (Sandbox Code Playgroud)\n和初始npm install会生成一个package-lock.json包含
"fn-with-hooks": "git+ssh://git@github.com/hackape/fn-with-hooks.git#master"\nRun Code Online (Sandbox Code Playgroud)\n正如您所看到的,该version字段被锁定到特定的提交哈希,并且后续调用npm install不会更改此版本字段,从而阻止“跟踪”分支到最新的提交。这就是锁文件应该如何工作的。
删除package-lock.json,(无需删除node_module/lib)即可npm install解决此问题。
我的直接想法是尝试从package-lock.json. 但 npm 锁定文件是一个整体销售解决方案,不提供这种细粒度的控制。
因此,这条路径上唯一的选择是禁用package-lock.json.
如果您仍然打算使用package-lock.json,一种解决方法是手动运行npm update lib-name命令以强制将该库更新到最新版本。这也将version相应地更新锁定文件中的字段。
更新
\n我\xe2\x80\x99m 不知道为什么npm update\xe2\x80\x99 在你这边不起作用。它适用于我的。也许您想仔细检查它\xe2\x80\x99是否确实是事实,或者是您的误解。虽然我严重怀疑这一点,但这也可能是 npm 版本的差异。I\xe2\x80\x99m 使用 v12.14。
我有另一种解决方法,我尝试过并且有效。您不必删除整个package-lock.json文件,您可以重写它以仅排除该 git-base lib 的记录。这样 npm 就缺少锁定信息,因此它\xe2\x80\x99 会强制重新获取你的库。锁定文件中的其他库记录保持不变,因此限制了影响范围。
您描述的行为不是我所看到的行为(尽管请参阅最后一段以了解可能发生的情况)。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,但没有更新模块。这会是你麻烦的根源吗?如果没有,您的做法可能与我上面的做法有所不同?如果您没有想到,也许您可以尝试我上面描述的方法,看看它对您来说有什么问题?(或者你的测试用例已经那么简化了吗?)
| 归档时间: |
|
| 查看次数: |
3950 次 |
| 最近记录: |