![](/img/trans.png)
[英]npm package from private github repo, install vs update (package.json)
[英]npm update: pull from github repo not taking latest commit
項目中的包之一基於內部 npm 存儲庫。
{
"dependencies": {
"my-library": "git+ssh://<gitrepo>#dist"
}
}
其中 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"
並且初始npm install
將生成一個package-lock.json
,其中包含
"fn-with-hooks": {
"version": "git+ssh://git@github.com/hackape/fn-with-hooks.git#fa1e21a8ea2fd2b0b7ec5897b954266791b56ac4",
"from": "git+ssh://git@github.com/hackape/fn-with-hooks.git#master"
},
如您所見, version
字段被鎖定到特定的提交哈希,隨后對npm install
調用不會更改此版本字段,從而防止“跟蹤”分支直到最新提交。 這就是 lockfile 應該如何工作。
刪除package-lock.json
,(不需要刪除node_module/lib
)然后npm install
可以解決這個問題。
我的直接想法是嘗試從package-lock.json
排除這個特定的庫。 但是 npm lockfile 是一種批發解決方案,不提供這種細粒度的控制。
所以這條路的唯一選擇是禁用package-lock.json
。
如果您仍然打算使用package-lock.json
,一種解決方法是手動運行npm update lib-name
命令以強制將該庫更新到最新版本。 這也將相應地更新鎖定文件中的version
字段。
更新
我不確定為什么npm update
對您不起作用。 它適用於我的。 也許您想仔細檢查一下這是否確實是事實,還是您的誤解。 雖然我嚴重懷疑它,但也可能是 npm 版本差異。 我正在使用 v12.14。
我有另一種解決方法,我嘗試過並且奏效了。 您不必刪除整個package-lock.json
文件,您可以重寫它以僅排除該 git-base 庫的記錄。 這樣 npm 缺少鎖定信息,因此必須重新獲取您的庫。 lockfile 中的其他 lib 記錄保持不變,因此限制了影響范圍。
您描述的行為不是我所看到的行為(盡管有關可能發生的事情的可能性,請參閱最后一段)。 我創建了一個打印console.log()
的模塊並將其推送到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"
}
}
我的 index.js:
require('slug');
我運行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
並且它沒有更新模塊。 那會是你麻煩的根源嗎? 如果沒有,您的做法可能與我上面的做法有何不同? 如果沒有想到,也許您可以嘗試我上面描述的內容,看看它在哪里崩潰? (或者你的測試用例已經簡化了嗎?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.