Làm cách nào để cài đặt một mô-đun NPM riêng mà không cần đăng ký của riêng tôi?


328

Tôi đã lấy một số mã được chia sẻ và đặt nó vào một mô-đun NPM, một mã tôi không muốn tải lên sổ đăng ký trung tâm. Câu hỏi là, làm thế nào để tôi cài đặt nó từ các dự án khác?

Cách rõ ràng có lẽ là thiết lập sổ đăng ký NPM của riêng tôi, nhưng theo tài liệu, điều đó liên quan đến rất nhiều rắc rối.

Tôi chỉ có thể cài đặt một mô-đun NPM nằm trên hệ thống tệp cục bộ, hoặc thậm chí từ git?

npm install --from-git git@server:project

Câu trả lời:


261
cd somedir
npm install .

hoặc là

npm install path/to/somedir

somedirphải chứa package.jsonbên trong nó.

Nó cũng biết về git:

npm install git://github.com/visionmedia/express.git

4
Loại giải pháp đường dẫn / đến / somedir hoạt động, nhưng sau đó thật tệ vì tất cả các câu lệnh yêu cầu sau đó phải bao gồm đường dẫn tương đối hoặc tuyệt đối đó. Xin hãy sửa tôi nếu tôi làm sai điều gì đó ...
Luke Bayes

3
@Luke vâng, bạn sai rồi. Sau khi npm installtất cả các tập tin được sao chép vào thư mục dự án của bạn. Vì vậy, các đường dẫn trong các requirebáo cáo sẽ chỉ liên quan đến thư mục dự án của bạn.
mihai

4
Tôi bối rối bởi phần đầu và lý do duy nhất tôi chưa tự mình kiểm tra điều này là tôi vẫn đang học và không có mô-đun riêng để làm việc. Dù sao, bằng cách thay đổi thư mục của bạn thành nơi mô-đun và sau đó gọi installsẽ không chỉ cài đặt ở đó và không cho dự án bạn muốn sử dụng nó cho?
Adam Beck

11
Lưu ý bên lề: (a) khi sử dụng git repos, bạn có thể chỉ định nhánh / cam kết / thẻ bằng cách thêm a #<ref>vào cuối url git, ví dụ git://github.com/visionmedia/express.git#v0.0.1; (b) Để an toàn, hãy thêm "private": truevào gói.json của các repos riêng của bạn. Điều này sẽ đảm bảo npm sẽ không bao giờ cho phép bạn vô tình xuất bản nước sốt bí mật của bạn lên sổ đăng ký npm chính thức. (theo debuggable.com/posts/ Kẻ )
Rafael Xavier

9
FYI nếu bạn đang phục vụ git của mình qua http, bạn sẽ cần npm i git+http://all/the/things.gitmặc dù git clone http://all/the/things.githoạt động tốt
slf

526

Trong các mô-đun npm riêng của bạn thêm

"private": true 

đến gói.json của bạn

Sau đó, để tham chiếu mô-đun riêng trong mô-đun khác, hãy sử dụng mô-đun này trong gói.json của bạn

{
    "name": "myapp",
    "dependencies": {
        "private-repo": "git+ssh://git@github.com:myaccount/myprivate.git#v1.0.0",
    }
}

59
Đây là câu trả lời đúng thực sự nếu bạn muốn gói.json của bạn duy trì danh sách phụ thuộc repo riêng, đây là một điều tốt (tm) mà bạn nên làm.

6
Trong ví dụ, nó tham chiếu một thẻ cụ thể, nhưng nếu bạn không có thẻ thì nó sẽ mặc định thành chủ. (xem git-scm.com/book/en/Git-Basics-Tagging )
250R

4
Tôi không hiểu làm thế nào dòng lệnh này có thể tải xuống mã từ một repo github riêng nếu tôi không cung cấp thông tin đăng nhập của mình! Vì vậy, làm thế nào tôi có thể vượt qua thông tin github của tôi?
Renato Gama

28
Lưu ý rằng "private": truephần đó không cần thiết, nhưng nó sẽ giúp ngăn repo riêng của bạn vô tình được xuất bản lên sổ đăng ký npm công khai.
evanrmurphy

2
npm tìm kiếm một số biến môi trường là tốt. Từ hướng dẫn trongnpm install <git remote url> phần này, có các tùy chọn như GIT_ASKPASSvà. GIT_SSHMột ví dụ sử dụng để chọn một khóa khác với id_rsa mặc định:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git
Jasmine Hegman

62

Tôi có thể chỉ cài đặt gói NPM nằm trên hệ thống tệp cục bộ hoặc thậm chí từ git không?

Có bạn có thể! Từ các tài liệu https://docs.npmjs.com/cli/install

Một gói là:

  • a) một thư mục chứa chương trình được mô tả bởi tệp pack.json
  • b) một tarball được nén có chứa (a)
  • c) một url giải quyết thành (b)
  • d) a <name>@<version>được công bố trên sổ đăng ký với (c)
  • e) a <name>@<tag>chỉ vào (d)
  • f) a <name>có thẻ "mới nhất" thỏa mãn (e)
  • g) a <git remote url>giải quyết thành (b)

Không phải là npm rực rỡ sao?


2
Lưu ý rằng nếu bạn chọn tùy chọn b), nó thực sự phải là một tarball được nén , một kho lưu trữ zip đơn thuần sẽ không làm điều đó. Tức là nếu bạn tạo gói của bạn với tar -czf my-package.tar.gz dist(giả sử distthư mục của bạn cũng có một package.jsontệp thích hợp trong đó), thì bạn có thể npm install ../my-lib/my-package.tar.gztừ dự án khác của mình.
Dániel Kis-Nagy

48

Cập nhật tháng 1 năm 2016

Ngoài các câu trả lời khác , đôi khi có kịch bản mà bạn muốn có các mô-đun riêng có sẵn trong ngữ cảnh nhóm.

Cả GithubBitbucket đều hỗ trợ khái niệm tạo Khóa API nhóm . Khóa API này có thể được sử dụng làm mật khẩu để thực hiện các yêu cầu API như nhóm này.

Trong các mô-đun npm riêng của bạn thêm

"private": true 

đến gói.json của bạn

Sau đó, để tham chiếu mô-đun riêng trong mô-đun khác, hãy sử dụng mô-đun này trong gói.json của bạn

    {
        "name": "myapp",
        "dependencies": {
            "private-repo":
"git+https://myteamname:aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myprivate.git",
        }
    }

trong đó tên nhóm = myteamnameAPI Key = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

Ở đây tôi tham khảo một repo bitbucket, nhưng nó cũng gần như giống hệt với github.

Cuối cùng, như một cách thay thế, nếu bạn thực sự không phải trả 7 đô la mỗi tháng (bằng văn bản) thì giờ đây bạn có thể có các mô-đun NPM riêng tư ra khỏi hộp.


Bạn có thể sử dụng điều này nếu bạn muốn có một mô-đun toàn cầu?
PI.

Điều này không làm việc cho tôi, tôi sợ. Cả hai điều khiển từ xa và kho lưu trữ không được tìm thấy. Có ý kiến ​​gì không?
Thomas Bormans

@ThomasBormans - vẫn gặp sự cố? Vui lòng dán (xáo trộn tên nhóm / khóa api của bạn) những gì bạn có dưới dạng dòng của bạn trong phần phụ thuộc của gói.json - theo hướng dẫn ở trên. Tôi đã tìm thấy điều này hoạt động tốt cho cả repos riêng của github và bitbucket. Bạn đang sử dụng cái gì
arcseldon

@arcseldon "name": "git + key: x-oauth-basic@bitbucket.org/user/repo.git " trả về EISDIR: hoạt động bất hợp pháp trên một thư mục, đọc . Và "name": "git + user: key@bitbucket.org/repo.git " trả về một số lỗi bao gồm các từ này từ xa: Không tìm thấy, gây tử vong: kho lưu trữ, Lệnh không thành công: git clone . Có ý kiến ​​gì không?
Thomas Bormans

Hãy thử làm theo định dạng "chính xác" mà tôi đã đưa ra trong câu trả lời: "git + https: // <myteamname>: <my_key> @ bitbucket.org / <my_Vpo_name> .git Bạn đã tạo khóa API như thế nào? đó là chính xác trong cài đặt bitbucket của bạn ... xin lỗi để hỏi điều hiển nhiên, nhưng tôi có độ tin cậy gần 100% nên hoạt động.
arcseldon

30

FWIW: Tôi gặp vấn đề với tất cả các câu trả lời này khi giao dịch với kho lưu trữ của tổ chức tư nhân.

Sau đây làm việc cho tôi:

npm install -S "git+https://username@github.com/orgname/repositoryname.git"

Ví dụ:

npm install -S "git+https://blesh@github.com/netflix/private-repository.git"

Tôi không hoàn toàn chắc chắn tại sao câu trả lời còn lại thì không làm việc cho tôi trong một trường hợp này, bởi vì họ đang cố gắng những gì tôi đầu tiên trước khi tôi nhấn Google và tìm thấy câu trả lời này. Và những câu trả lời khác là những gì tôi đã làm trong quá khứ.

Hy vọng điều này sẽ giúp người khác.


2
Bạn có thể sử dụng một thư mục con của repo git không?
Chris

Làm việc cho tôi vào năm 2019! Nhưng tôi phải đảm bảo git có thông tin đăng nhập để truy cập tài khoản đó. (Ví dụ: kiểm tra git clone hai lần với https://và đảm bảo mật khẩu không cần thiết trong lần chạy thứ hai. Sau đó, bạn nên đi!)
joeytwiddle

9

Tôi cũng gặp vấn đề tương tự và sau khi tìm kiếm xung quanh, tôi đã tìm thấy Reggie ( https://github.com/moustvoort/node-reggie ). Nó trông khá chắc chắn. Nó cho phép xuất bản nhẹ các mô-đun NPM lên các máy chủ riêng. Không hoàn hảo (không có xác thực khi cài đặt) và nó vẫn còn rất trẻ, nhưng tôi đã thử nghiệm nó tại địa phương và dường như nó làm những gì nó nói nó nên làm.

Đó là ... (và điều này chỉ từ tài liệu của họ)

npm install -g reggie
reggie-server -d ~/.reggie

sau đó cd vào thư mục mô-đun của bạn và ...

reggie -u http://<host:port> publish 
reggie -u http://127.0.0.1:8080 publish 

cuối cùng, bạn có thể cài đặt các gói từ reggie chỉ bằng cách sử dụng url đó trong lệnh cài đặt npm trực tiếp hoặc từ bên trong gói.json ... như vậy

npm install http://<host:port>/package/<name>/<version>
npm install http://<host:port>/package/foo/1.0.0

hoặc là..

dependencies: {
    "foo": "http://<host:port>/package/foo/1.0.0"
}

7

Cấu trúc mã của bạn theo cách dễ tiếp cận như dưới đây. Nếu điều này là có thể cho bạn.

  • NodeProjs \ Apps \ MainApp \ pack.json

  • NodeProjs \ Modules \ DataModule \ pack.json

Trong MainApp @ NodProjs \ Apps \ MainApp \

npm install --S ../../Modules/DataModule

Bạn có thể cần cập nhật gói.json như:

 "dependencies": {
       "datamodule": "../../Modules/DataModule"
}

Điều này làm việc cho tình huống của tôi.


5

Npm hiện cung cấp các mô-đun lưu trữ riêng tư không giới hạn với giá $ 7 / người dùng / tháng được sử dụng như vậy

cd private-project
npm login

trong gói json của bạn "name": " @username/private-project"

npm publish

sau đó để yêu cầu dự án của bạn:

cd ../new-project
npm install --save @username/private-project

1
Điều này có yêu cầu một bước đăng nhập phía khách hàng không?
Aidan Hoolachan

Cái gì thay thế cho cái này? Ví dụ: nếu bạn muốn lưu trữ "gói" của mình trên S3 và kéo từ đó.
Con Antonakos

4

Bắt đầu với câu trả lời của arcseldon , tôi thấy rằng tên nhóm là cần thiết trong URL như vậy:

npm install --save "git+https://myteamname@aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4@bitbucket.org/myteamname/myprivate.git"

Và lưu ý rằng khóa API chỉ khả dụng cho nhóm, không dành cho người dùng cá nhân.


2

Cấu hình để cài đặt từ kho lưu trữ Github công cộng, ngay cả khi máy nằm trong tường lửa:

dependencies: {
   "foo": "https://github.com/package/foo/tarball/master"
}

2

Tôi sử dụng như sau với một kho lưu trữ github riêng tư:

npm install github:mygithubuser/myproject

2

Đây là những gì tôi đang tìm kiếm :

# Get the latest from GitHub, public repo:
$ npm install username/my-new-project --save-dev
# Bitbucket, private repo:
$ npm install git+https://token:x-oauth-basic@github.com/username/my-new-project.git#master
$ npm install git+ssh://git@github.com/username/my-new-project.git#master

#  or from Bitbucket, public repo:
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master --save-dev
# Bitbucket, private repo:
$ npm install git+https://username:password@bitbucket.org/username/my-new-project.git#master
$ npm install git+ssh://git@bitbucket.org/username/my-new-project.git#master
# Or, if you published as npm package:
$ npm install my-new-project --save-dev

2

Bạn có thể sử dụng Verdaccio cho mục đích này, đó là một sổ đăng ký proxy npm riêng nhẹ được xây dựng trong Node.js. Ngoài ra nó là miễn phí và nguồn mở. Bằng cách sử dụng Verdaccio, nó không liên quan đến nhiều rắc rối như đăng ký npm riêng tư đơn giản.

Bạn có thể tìm thấy thông tin chi tiết về cách cài đặt và chạy nó trên trang web của họ nhưng đây là các bước:

Nó đòi hỏi node >=8.x.

    // Install it from npm globally
    npm install -g verdaccio

    // Simply run with the default configuration that will host the registry which you can reach at http://localhost:4873/
    verdaccio

    // Set the registry for your project and every package will be downloaded from your private registry
    npm set registry http://localhost:4873/

    // OR use the registry upon individual package install
    npm install --registry http://localhost:4873

Nó cũng có một docker để bạn có thể dễ dàng xuất bản nó lên docker và voila có sẵn công khai của bạn, bạn có một kho lưu trữ npm riêng có thể được phân phối cho người khác theo cách bạn định cấu hình nó!


0

Rất đơn giản -

npm config set registry https://path-to-your-registry/

Nó thực sự đặt registry = "https://path-to-your-registry"dòng này thành/Users/<ur-machine-user-name>/.npmrc

Tất cả giá trị bạn đã đặt rõ ràng hoặc đã được đặt theo mặc định có thể được nhìn thấy bởi - npm config list

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.