簡體   English   中英

npm 更新:從 github 存儲庫中拉取而不進行最新提交

[英]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 installnode 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM