npm cài đặt kho github riêng theo sự phụ thuộc trong gói.json


210

Tôi đang cố gắng cài đặt kho lưu trữ riêng của github trước npm bao gồm các kho github riêng khác làm phụ thuộc.

Đã thử rất nhiều cách và bài viết nhưng không có cách nào làm việc. Đây là những gì tôi đang làm:

npm install git+https://github.com/myusername/mygitrepository.git

trong gói.json giống như:

"dependencies": {
    "repository1name": "git+https://github.com/myusername/repository1.git",
    "repository2name": "git+https://github.com/myusername/repository2.git"
}

Cách đúng đắn để làm điều đó là gì?


4
git + https: // <token-from-github>: x-oauth-basic@github.com/ <user> / <GitRepo> .git Nó hỗ trợ xác thực và hoạt động tốt trong mọi trường hợp.
vashishatashu

Câu trả lời:


147

Thử cái này:

"dependencies" : {
  "name1" : "git://github.com/user/project.git#commit-ish",
  "name2" : "git://github.com/user/project.git#commit-ish"
}

Bạn cũng có thể thử điều này, trong đó Visionmedia / express là tên / repo:

"dependencies" : {
   "express" : "visionmedia/express"
}

Hoặc (nếu mô-đun gói npm tồn tại):

"dependencies" : {
  "name": "*"
}

Lấy từ tài liệu NPM


1
npm ERR! Không thể giải quyết git HEAD ( github.com/user/reponame.git ) gây tử vong: đối số mơ hồ 'commit-ish': sửa đổi không xác định hoặc đường dẫn không có trong cây làm việc.
vashishatashu

Không hoạt động. #xxxx không bắt buộc như thể không được coi là chủ và tất cả công việc của tôi là chính. Còn ý tưởng nào khác không?
vashishatashu

Kết quả tương tự nếu bạn xóa tiêu đề (# commit-ish)?
leko

Tên của kho lưu trữ của bạn là gì?
leko

28
@vashishatashu, liên quan đến fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.Khá rõ ràng đó commit-ishchỉ là một từ mẫu mà bạn nên thay thế bằng một shacam kết cụ thể mà bạn cần. (hoặc loại bỏ #commit-ishtất cả nếu bạn cần cam kết mới nhất trong chi nhánh chính của mình)
meandre

91

Sau đây chỉ hoạt động tốt trong tất cả các kịch bản tôi cần:

"dependencies": {
"GitRepo": "git+https://<token-from-github>:x-oauth-basic@github.com/<user>/<GitRepo>.git"
}

1
Bạn có một liên kết tham khảo cho giải pháp này?
Ian

3
@Ian: Tôi đọc nó ở đâu đó nhưng không có liên kết tham khảo. Tôi đang sử dụng nó trong sản xuất hơn một năm mà không có vấn đề gì. Bạn có thể nhận mã thông báo oauth từ Github dưới dạng: Cài đặt -> Ứng dụng -> Mã thông báo truy cập cá nhân -> Tạo mã thông báo mới. Mã thông báo này có thể có đọc / ghi hoặc cả hai đặc quyền theo trường hợp sử dụng của bạn.
vashishatashu

6
@lan: đối với bitbucket, bạn có thể sử dụng cú pháp sau: git clone https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> có thể được lấy từ: Nhóm -> Quản lý nhóm -> Khóa API
vashishatashu

@vashishatashu, cảm ơn vì một ý tưởng tuyệt vời. Tuy nhiên, tôi nhận được "fatal: blahblah không tìm thấy" khi thử điều này, mặc dù tôi đã cấp quyền truy cập cho người dùng được đề cập đến repo. Có ý kiến ​​gì không?
Per Lundberg

2
Đây là một bài viết hay về kỹ thuật này: rzrsharp.net/2013/07/02/ trên
cyberwombat

75

Đối với những người bạn đã đến đây cho các thư mục công cộng, từ các tài liệu npm: 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ủ.


1
"Đối với các thư mục công cộng" có nghĩa là gì?
Dan Dascalescu

1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. tài liệu tham khảo tài liệu của npmjs
Aleksandar

Giao thức git+https://có nghĩa là gì? Sử dụng gitgiao thức để nhân bản và kéo những thay đổi mới trong khi đẩy qua https?
tonix

60

Câu trả lời được chấp nhận hoạt động, nhưng tôi không thích nhiều ý tưởng để dán mã thông báo an toàn vào package.json

Tôi đã tìm thấy nó ở nơi khác, chỉ cần chạy lệnh một lần này như được ghi lại trong trang web git-config .

git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf git@github.com:

GITHUB_TOKEN có thể được thiết lập dưới dạng biến môi trường hoặc dán trực tiếp

và sau đó tôi cài đặt repos github riêng tư như: npm install user/repo --save


cũng hoạt động trong Heroku, chỉ cần thiết lập git config ...lệnh trên dưới dạng heroku-prebuildtập lệnh package.jsonvà thiết lập GITHUB_TOKENnhư biến cấu hình Heroku.


Điều này cũng hoạt động trong Chuỗi xây dựng dịch vụ nhóm Microsoft Visual Studio, nơi tôi thực hiện nó như một "lệnh" ngay trước npm installbước.
Lukx

2
Đẹp mắt! Giải pháp tuyệt vời cho môi trường CI! Tôi đã phải sửa đổi nó một chút; Tôi đã phải thay đổi kết thúc thành...insteadOf ssh://git@github.com
Scott Rippey

2
Điều này dường như không ảnh hưởng đến npm của tôi. Nó vẫn sử dụng ssh khi chạy npm install user/repo --save. Có cái gì tôi cần để cấu hình?
Marco Prins

1
Giải pháp tuyệt vời cho môi trường CI nơi thiết lập SSH là một điều khó khăn (CloudBuild)! Cảm ơn bạn rất nhiều vì điều này!
Mathieu Bour

43

Có nhiều cách để làm điều đó như mọi người chỉ ra, nhưng các phiên bản ngắn nhất là:

// from master
"depName": "user/repo",

// specific branch
"depName": "user/repo#branch",

// specific commit
"depName": "user/repo#commit",

// private repo
"depName": "git+https://[TOKEN]:x-oauth-basic@github.com/user/repo.git"

ví dụ

"dependencies" : {
  "hexo-renderer-marked": "amejiarosario/dsa.jsd#book",
  "hexo-renderer-marked": "amejiarosario/dsa.js#8ea61ce",
  "hexo-renderer-marked": "amejiarosario/dsa.js",
}

3
Đây là câu trả lời tốt nhất! <3 Đi thẳng vào vấn đề và thậm chí hiển thị các ví dụ về các trường hợp khác nhau.
Renato Carvalho

Câu trả lời ngắn gọn cho các kho lưu trữ công cộng, điều không may không phải là câu hỏi của OP. Tuy nhiên, nó đã giúp tôi và tôi đánh giá cao nó.
runderworld

Tôi đã cập nhật câu trả lời của mình để bao gồm trường hợp repo riêng
Adrian


7

Vì Git sử dụng curldưới mui xe, bạn có thể sử dụng ~/.netrctệp có thông tin đăng nhập. Đối với GitHub, nó sẽ trông giống như thế này:

machine github.com
  login <github username>
  password <password OR github access token>

Nếu bạn chọn sử dụng access tokens, nó có thể được tạo từ:

Cài đặt -> Cài đặt dành cho nhà phát triển -> Mã thông báo truy cập cá nhân

Điều này cũng sẽ hoạt động nếu bạn đang sử dụng Github Enterprise trong công ty của riêng bạn. chỉ cần đặt url github doanh nghiệp của bạn trong machinetrường.


làm việc cho tôi với machine github.com login <token>một dòng và "package": "https://github.com/acme/privaterepo.git#commit-ish"hoặc trực tiếp vớinpm install https://github.com/acme/privaterepo.git#commit-ish
abernier

4

Dưới đây là phiên bản chi tiết hơn về cách sử dụng mã thông báo Github mà không cần xuất bản trong package.jsontệp.

  1. Tạo mã thông báo truy cập github cá nhân
  2. Thiết lập lại url viết lại trong ~ / .gitconfig
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. Cài đặt kho riêng. Mức ghi nhật ký dài để gỡ lỗi lỗi truy cập.
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

Trong trường hợp truy cập vào Github không thành công, hãy thử chạy git ls-remote ...lệnhnpm install will print


0

Đối với tài liệu tham khảo kho lưu trữ riêng tư của tôi, tôi không muốn bao gồm mã thông báo an toàn và không có mã đơn giản nào khác (tức là chỉ định trong gói.json) hoạt động. Đây là những gì đã làm việc:

  1. Đã đi đến GitHub.com
  2. Điều hướng đến Kho lưu trữ cá nhân
  3. Nhấp vào "Sao chép hoặc Tải xuống" và Sao chép URL (không khớp với các ví dụ ở trên)
  4. Đã thêm # commit-sha
  5. Ran npm cài đặt

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.