[英]Can't install git repository through `npm install` with NPM version 3
[英]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
。
但是,如果它不在注冊表中,則必須通過URL或Git 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 條目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.