Phụ thuộc vào chi nhánh hoặc thẻ bằng URL git trong gói.json?


399

Giả sử tôi đã rẽ nhánh một mô-đun nút có lỗi và tôi muốn sử dụng phiên bản cố định của mình, trên nhánh tính năng, cho đến khi lỗi được hợp nhất và phát hành.

Làm thế nào tôi có thể tham khảo phiên bản cố định của tôi trong dependenciescủa tôi package.json?

Câu trả lời:


569

Từ các tài liệu npm :

git://github.com/<user>/<project>.git#<branch>

git://github.com/<user>/<project>.git#feature\/<branch>

Kể từ phiên bản NPM 1.1,65, bạn có thể làm điều này:

<user>/<project>#<branch>

130
Kể từ npm 1.1,65, URL Github có thể ngắn gọn hơn user/project. npmjs.org/doc/files/package.json.html Bạn có thể đính kèm chi nhánh nhưuser/project#branch
dantheta

2
git://github.com/<user>/<project>.git#feature/blahđã làm việc nhưng <user>/<project>.git#feature/blahkhông ... có lẽ regex của họ cần phải được nâng cao hơn để tính feature/blahđến. Đây là v1.4.28
npm

5
Làm thế nào để bạn bao gồm số phiên bản?
Richard

1
@hurrymaplelad Tôi có thể làm tương tự cho yêu cầu kéo không? Nếu vậy, lệnh như thế nào?
roundrobin

3
Tài liệu NPM được cập nhật liên kết docs.npmjs.com/files/package.json#github-urls
kellen

136

bình luận của mỗi @ dantheta:

Kể từ npm 1.1,65, URL Github có thể ngắn gọn hơn cho người dùng / dự án. npmjs.org/doc/files/package.json.html Bạn có thể đính kèm chi nhánh như user / project # Branch

Vì thế

"babel-eslint": "babel/babel-eslint",

Hoặc cho thẻ v1.12.0 trên jscs:

"jscs": "jscs-dev/node-jscs#v1.12.0",

Lưu ý, nếu bạn sử dụng npm --save, bạn sẽ nhận được git lâu hơn

Từ https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git URL là phụ thuộc

Các url Git có thể có dạng:

git: //github.com/user/project.git#commit-ish git + ssh: // user @ hostname: project.git # commit-ish git + ssh: //user@hostname/project.git#commit- ish git + http: //user@hostname/project/blah.git#commit-ish git + https: //user@hostname/project/blah.git#commit-ish

Cam kết có thể là bất kỳ thẻ, sha hoặc nhánh nào có thể được cung cấp làm đối số để kiểm tra git. Mặc định là chủ.

URL GitHub

Kể từ phiên bản 1.1,65, bạn có thể tham khảo các url GitHub chỉ là "foo": "user / foo-project". Cũng giống như với URL git, hậu tố cam kết có thể được bao gồm. Ví dụ:

{"name": "foo",
"phiên bản": "0.0.0",
"phụ thuộc": {"express": "Visionmedia / express", "mocha": "Visionmedia / mocha # 4727d357ea"}}


2
Tùy thuộc vào một cam kết sha1 nên là tùy chọn ưa thích, đặc biệt nếu bạn phụ thuộc vào một repo không thuộc quyền kiểm soát của bạn. Các nhánh và thẻ Git không phải là bất biến (có thể bị xóa / thay đổi, độc hại / do tai nạn), trong khi (gần như) không thể tạo ra xung đột sha1.
jakub.g

1
Tôi có thể có một chi nhánh VÀ một cam kết cho cam kết không?
munchschair

45

Nếu bạn muốn sử dụng develhoặc phân featurenhánh hoặc bạn chưa xuất bản một gói nhất định đến sổ đăng ký NPM hoặc bạn không thể vì đó là mô-đun riêng tư, thì bạn có thể trỏ đến git://URI thay vì số phiên bản trong package.json:

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://git@github.com:user/repo.git#ref"
}

Các #refphần là không bắt buộc, và nó có thể là một chi nhánh (như master), thẻ (như 0.0.1) hoặc một phần hoặc toàn bộ cam kết id.


26

Trên phiên bản NPM mới nhất, bạn có thể thực hiện:

npm install gitAuthor/gitRepo#tag

Nếu repo là gói NPM hợp lệ, nó sẽ được tự động đặt bí danh trong pack.json là:

{ "NPMPackageName": "gitAuthor/gitRepo#tag" }

Nếu bạn có thể thêm câu này vào câu trả lời của @justingordon thì không cần phải khử răng cưa thủ công ngay bây giờ!


4
không, không phải vậy. Nó cài đặt không chính xác. Bằng cách nào đó, nó không bao gồm toàn bộ cấu trúc thư mục từ kho lưu trữ, chỉ một số tệp như pack.json, Sợi.lock, readme và giấy phép. Không có thư mục src hoặc dist.
StalkAlex

@StalkAlex docs.npmjs.com/cli/publish và sau đó kiểm tra repo bạn đang cài đặt cho các tập lệnh xây dựng. Có thể chúng được gắn thẻ hoặc cài đặt sau không hoạt động với bạn, đó là vấn đề đối với gói cụ thể đó dù sao cũng hy vọng điều này có ích!
cơn lốc

@vortex cảm ơn, ý của bạn chính xác là gì khi gắn thẻ? Làm thế nào điều này làm cho vấn đề như vậy?
StalkAlex

0

Nếu nó giúp được bất cứ ai, tôi đã thử mọi thứ ở trên (chế độ https w / token) - và vẫn không có gì hoạt động. Tôi không có lỗi, nhưng không có gì sẽ được cài đặt trong node_modules hoặc pack_lock.json. Nếu tôi thay đổi mã thông báo hoặc bất kỳ chữ cái nào trong tên repo hoặc tên người dùng, v.v. - Tôi sẽ gặp lỗi. Vì vậy, tôi biết tôi có mã thông báo và tên repo đúng.

Cuối cùng tôi đã nhận ra nó bởi vì tên của sự phụ thuộc mà tôi có trong gói.json của tôi không khớp với tên trong gói.json của repo mà tôi đang cố gắng kéo. Ngay cả cài đặt npm --verbose cũng không cho biết có vấn đề gì. Nó chỉ có vẻ bỏ qua lỗi phụ thuộc w / o.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.