簡體   English   中英

在特定版本中從 Git 安裝 npm

[英]npm install from Git in a specific version

假設我已經為 Node.js 編寫了一個我想保密的模塊。 我知道我可以(應該)添加以下行:

"private": "true"

package.json文件,我也知道我可以使用文件系統路徑或指向 git 存儲庫(包括 GitHub)的鏈接npm install此模塊。

我也知道我可以將這樣的文件系統路徑或一個指向 git repo 的鏈接放入package.json ,這樣dependencies部分可能看起來像這樣:

"dependencies": {
  "myprivatemodule": "git@github.com:..."
}

我現在想要的不是鏈接到最新版本,而是鏈接到特定版本。 我所知道的唯一可能性是使用其 ID 鏈接到特定提交。 但這比使用諸如0.3.1類的版本號可讀性更差,可維護性更差。

所以我的問題是:是否可以指定這樣的版本號並讓 npm 在 git 存儲庫中搜索包含此版本的最新提交?

如果沒有,你如何在你的項目中解決這個問題? 您是否使用提交 ID,或者是否有更好的解決方案?

接受的答案對我不起作用。 這是我從 github 中提取包的操作:

npm install --save "git://github.com/username/package.git#commit"

或者在 package.json 上手動添加:

"dependencies": {
  "package": "git://github.com/username/package.git#commit"
}

依賴項必須從registry中可用才能通過指定version描述符來安裝。

如果您的項目不應該公開共享,您當然可以創建和使用自己的注冊表而不是registry.npmjs.org

但是,如果它不在注冊表中,則必須通過URLGit URL引用。 要使用 Git URL 指定版本,請在末尾包含適當的<commit-ish> ,例如標簽,作為URL 片段

例如,對於名為0.3.1的標簽:

"dependencies": {
  "myprivatemodule": "git@github.com:...#0.3.1"
}

注意:上面的代碼片段顯示的基本 URL 與問題中發布的相同。

剪下的部分 ( ... ) 應填寫:

 "myprivatemodule": "git@github.com:{owner}/{project}.git#0.3.1"

而且,當 SSH 訪問不可用時,將需要不同的地址格式:

 "myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"

根據您的操作系統,您還可以link到另一個文件夾中的依賴項,您可以在該文件夾中從 Github 克隆它。

如果版本是指標簽或發布,那么 github 會提供下載鏈接。 例如,如果我想安裝fetch版本 0.3.2(它在 npm 上不可用),那么我將添加到我的package.json下的dependencies

"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",

與提交散列方法相比,唯一的缺點是散列保證不代表更改的代碼,而標簽可以被替換。 幸運的是,這種情況很少發生。

更新:

這些天我使用的方法是 GitHub 服務依賴項的緊湊符號:

"dependencies": {
  "package": "github:username/package#commit"
}

提交可以是任何提交,比如標簽。 在 GitHub 的情況下,您甚至可以刪除初始github:因為它是默認的。

此命令從特定的 git commit 安裝 npm 包username/package

npm install https://github.com/username/package#3d0a21cc

這里3d0a21cc是提交哈希的前 8 個字符。

我的例子@qubyte評論上面得到切碎的,所以這里的東西是更易於閱讀...

上面描述的方法@surjikal 適用於分支提交,但它不適用於我嘗試包含的提交。


歸檔模式也適用於提交。 例如獲取@a2fbf83

納米

npm install  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

紗線

yarn add  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

格式

 https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz


這是需要/archive/模式的提交:

yarn add  https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz

對於相關的vuex 提交

我在這里描述了我在運行npm install時遇到的一個問題 - 該包沒有出現在node_modules

問題是安裝包的package.json中的name值與導入包的名稱不同(我項目的package.json的鍵)。

因此,如果您安裝的項目名稱是some-package (名稱在其package.json值),那么在您項目的package.json中寫入: "some-package": "owner/some-repo#tag"

我需要運行兩個版本的tfjs-core ,發現都需要在安裝后構建。

包.json:

"dependencies": {
  "tfjs-core-0.14.3": "git://github.com/tensorflow/tfjs-core#bb0a830b3bda1461327f083ceb3f889117209db2",
  "tfjs-core-1.1.0": "git://github.com/tensorflow/tfjs-core#220660ed8b9a252f9d0847a4f4e3c76ba5188669"
}

然后:

cd node_modules/tfjs-core-0.14.3 && yarn install && yarn build-npm && cd ../../
cd node_modules/tfjs-core-1.1.0  && yarn install && yarn build-npm && cd ../../

最后,使用庫:

import * as tf0143 from '../node_modules/tfjs-core-0.14.3/dist/tf-core.min.js';
import * as tf110 from '../node_modules/tfjs-core-1.1.0/dist/tf-core.min.js';

這很有效,但肯定是#hoodrat

如果您使用多個模塊執行此操作並希望對版本有更多控制,您應該考慮擁有自己的私有 npm 注冊表。

通過這種方式,您可以將模塊 npm 發布到您的私有 npm 注冊表,並以與公共模塊相同的方式使用 package.json 條目。

https://docs.npmjs.com/files/package.json#dependencies

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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