จะติดตั้งโมดูล NPM ส่วนตัวโดยไม่ต้องลงทะเบียนเองได้อย่างไร


329

ฉันได้รับรหัสที่ใช้ร่วมกันและวางไว้ในโมดูล NPM หนึ่งที่ฉันไม่ต้องการอัปโหลดไปยังรีจิสทรีกลาง คำถามคือฉันจะติดตั้งจากโครงการอื่นได้อย่างไร

วิธีที่ชัดเจนน่าจะตั้งค่ารีจิสทรี NPM ของฉันเอง แต่ตามเอกสารประกอบที่เกี่ยวข้องกับความยุ่งยากมากมาย

ฉันสามารถติดตั้งโมดูล NPM ที่อยู่ในระบบไฟล์ในเครื่องหรือแม้แต่จาก git ได้หรือไม่

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

คำตอบ:


263
cd somedir
npm install .

หรือ

npm install path/to/somedir

somedirจะต้องมีส่วนpackage.jsonใน

มันรู้เกี่ยวกับคอมไพล์ด้วย:

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

4
วิธีการแก้ปัญหาเส้นทาง / สู่ / somedir แต่แล้วมันก็น่ากลัวเพราะคำสั่งทั้งหมดที่ต้องการนั้นจะต้องมีเส้นทางญาติหรือแน่นอน โปรดแก้ไขให้ฉันด้วยถ้าฉันทำสิ่งผิดปกติ ...
ลุคเบย์

3
@ ลุคใช่คุณคิดผิด หลังจากnpm installไฟล์ทั้งหมดจะถูกคัดลอกไปยังไดเรกทอรีโครงการของคุณ ดังนั้นเส้นทางในrequireคำสั่งจะสัมพันธ์กับไดเรกทอรีโครงการของคุณเท่านั้น
mihai

4
ฉันสับสนโดยส่วนบนและเหตุผลเดียวที่ฉันยังไม่ได้ทดสอบสิ่งนี้เองคือฉันยังคงเรียนรู้และไม่มีโมดูลส่วนตัวสำหรับใช้งาน อย่างไรก็ตามโดยการเปลี่ยนไดเรกทอรีของคุณไปยังโมดูลที่เป็นแล้วเรียกว่าinstallจะไม่เพียงแค่ติดตั้งที่นั่นและไม่ได้สำหรับโครงการที่คุณต้องการใช้หรือไม่
Adam Beck

11
หมายเหตุด้านข้าง: (a) เมื่อใช้ repos git คุณสามารถระบุ branch / commit / tag โดยการเพิ่ม a #<ref>ไปที่ส่วนท้ายของ git url เช่นgit://github.com/visionmedia/express.git#v0.0.1; (b) เพื่อเพิ่มความปลอดภัย"private": trueให้กับ package.json ของ repos ส่วนตัวของคุณ สิ่งนี้จะทำให้แน่ใจว่า npm จะไม่ยอมให้คุณเผยแพร่ซอสลับของคุณไปยังรีจิสทรี npm อย่างเป็นทางการ (ตามdebuggable.com/posts/ ...... )
Rafael Xavier

9
FYI ถ้าคุณจะให้บริการคอมไพล์ของคุณผ่านทาง http คุณจะต้องnpm i git+http://all/the/things.gitถึงแม้ว่าgit clone http://all/the/things.gitผลงานได้ดี
SLF

527

ในโมดูลส่วนตัว NPMของคุณเพิ่ม

"private": true 

ถึง package.json ของคุณ

จากนั้นเพื่ออ้างอิงโมดูลส่วนตัวในโมดูลอื่นให้ใช้สิ่งนี้ใน package.json ของคุณ

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

59
นี่คือคำตอบที่ถูกต้องจริงถ้าคุณต้องการให้ package.json รักษารายชื่อ repo ส่วนตัวซึ่งเป็น Good Thing (tm) ที่คุณควรทำ

6
ในตัวอย่างจะอ้างอิงแท็กเฉพาะ แต่ถ้าคุณไม่มีแท็กจะเริ่มต้นเป็นหลัก (ดูgit-scm.com/book/en/Git-Basics-Tagging )
250R

4
ฉันไม่เข้าใจว่าบรรทัดคำสั่งนี้สามารถดาวน์โหลดรหัสจาก repo GitHub ส่วนตัวได้อย่างไรหากฉันไม่ได้เพิ่มความน่าเชื่อถือของข้อมูลประจำตัวของฉัน! ดังนั้นฉันจะส่งหนังสือรับรอง GitHub ได้อย่างไร
Renato Gama

28
โปรดทราบว่า"private": trueไม่จำเป็นต้องใช้ชิ้นส่วน แต่จะช่วยป้องกันไม่ให้ repo ส่วนตัวของคุณถูกเผยแพร่ไปยังรีจิสทรี npm สาธารณะโดยไม่ตั้งใจ
evanrmurphy

2
npm มองหาตัวแปรสภาพแวดล้อมหลายอย่างเช่นกัน จากคู่มือในnpm install <git remote url>ส่วนมีตัวเลือกเช่นGIT_ASKPASSและGIT_SSH. ตัวอย่างการใช้งานเพื่อเลือกกุญแจอื่นนอกเหนือจาก id_rsa เริ่มต้น:GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git
Jasmine Hegman

62

ฉันสามารถติดตั้งแพคเกจ NPM ที่อยู่ในระบบไฟล์ในเครื่องหรือแม้แต่จาก git ได้หรือไม่

ใช่คุณสามารถ! จากเอกสารhttps://docs.npmjs.com/cli/install

แพคเกจคือ:

  • ก) โฟลเดอร์ที่มีโปรแกรมที่อธิบายโดยไฟล์ package.json
  • b) tarball gzipped ที่มี (a)
  • c) URL ที่เปลี่ยนเป็น (b)
  • d) a <name>@<version>ที่มีการเผยแพร่ในรีจิสทรีด้วย (c)
  • e) a <name>@<tag>ที่ชี้ไปที่ (d)
  • ฉ) <name>ที่มีแท็ก "ล่าสุด" เป็นที่พอใจ (e)
  • g) a <git remote url>ที่แก้ไขเป็น (b)

ไม่ฉลาดเลยเหรอ?


2
โปรดทราบว่าหากคุณไปที่ตัวเลือก b) จริง ๆ แล้วมันจะต้องเป็นtarball gzippedการเก็บไฟล์ zip เพียงอย่างเดียวจะไม่ทำ คือถ้าคุณสร้างแพ็คเกจด้วยtar -czf my-package.tar.gz dist(สมมติว่าdistโฟลเดอร์ของคุณมีpackage.jsonไฟล์ที่เหมาะสมอยู่ด้วย) จากนั้นคุณสามารถnpm install ../my-lib/my-package.tar.gzทำโครงการอื่น ๆ ของคุณได้
Dániel Kis-Nagy

48

อัปเดตมกราคม 2559

นอกจากคำตอบอื่น ๆบางครั้งก็มีสถานการณ์ที่คุณต้องการให้มีโมดูลส่วนตัวในบริบทของทีม

ทั้งสองGithubและBitbucketสนับสนุนแนวคิดในการสร้างทีมงานคีย์ API คีย์ API นี้สามารถใช้เป็นรหัสผ่านเพื่อดำเนินการตามคำขอ API เป็นทีมนี้

ในโมดูลส่วนตัว NPMของคุณเพิ่ม

"private": true 

ถึงpackage.jsonของคุณ

จากนั้นเพื่ออ้างอิงโมดูลส่วนตัวในโมดูลอื่นให้ใช้สิ่งนี้ใน package.json ของคุณ

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

โดยที่ชื่อทีม = myteamnameและคีย์ API = aQqtcplwFzlumj0mIDdRGCbsAq5d6Xg4

ที่นี่ฉันอ้างอิง bitbucket repo แต่มันก็เกือบจะเหมือนกันโดยใช้ github เช่นกัน

สุดท้ายเป็นทางเลือกถ้าคุณไม่รังเกียจที่จะจ่าย$ 7 ต่อเดือน (จากการเขียน) คุณสามารถมีโมดูล NPM ส่วนตัวนอกกรอบได้


คุณสามารถใช้สิ่งนี้ได้ไหมถ้าคุณต้องการมีโมดูลทั่วโลก
PI

สิ่งนี้ไม่ได้ผลสำหรับฉันฉันกลัว ไม่พบทั้งรีโมตและที่เก็บ ความคิดใด ๆ
Thomas Bormans

@ThomasBormans - ยังมีปัญหาอยู่หรือ โปรดวาง (ช่วงชิงชื่อทีม / รหัส api ของคุณ) สิ่งที่คุณมีเหมือนสายของคุณในส่วนอ้างอิงของ package.json ของคุณ - ตามคำแนะนำข้างต้น ฉันพบว่ามันใช้งานได้ดีสำหรับ repos ส่วนตัว github และ bitbucket คุณใช้อะไร
arcseldon

@arcseldon "ชื่อ": "+ คอมไพล์สำคัญ: x-oauth-basic@bitbucket.org/user/repo.git "ผลตอบแทนEISDIR: การดำเนินการที่ผิดกฎหมายในไดเรกทอรีอ่าน และ"ชื่อ": "+ คอมไพล์ของผู้ใช้: key@bitbucket.org/repo.git "ผลตอบแทนหลายข้อผิดพลาดรวมทั้งคำพูดเหล่านี้ระยะไกล: ไม่พบร้ายแรง: พื้นที่เก็บข้อมูลคำสั่งล้มเหลว: โคลนคอมไพล์ ความคิดใด ๆ
Thomas Bormans

ลองทำตามรูปแบบ "ถูกต้อง" ที่ฉันให้ไว้ในคำตอบ: "git + https: // <myteamname>: <my_key> @ bitbucket.org / <my_repo_name> .git คุณสร้างคีย์ API ได้อย่างไรคุณได้ตรวจสอบซ้ำสองครั้งแล้วหรือยัง มันเป็นสิ่งที่ถูกต้องในการตั้งค่า bitbucket ของคุณ ... ขอโทษที่ถามอย่างเห็นได้ชัด แต่ฉันได้ใกล้ความเชื่อมั่น 100% นี้ควรจะทำงาน.
arcseldon

30

FWIW: ฉันมีปัญหากับคำตอบเหล่านี้ทั้งหมดเมื่อจัดการกับที่เก็บขององค์กรเอกชน

การทำงานต่อไปนี้สำหรับฉัน:

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

ตัวอย่างเช่น:

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

ฉันไม่แน่ใจว่าทั้งหมดว่าทำไมคำตอบอื่น ๆ ไม่ได้ทำงานสำหรับฉันในกรณีนี้หนึ่งเพราะพวกเขากำลังสิ่งที่ฉันพยายามครั้งแรกก่อนที่ฉันจะตี Google และพบคำตอบนี้ และคำตอบอื่น ๆ คือสิ่งที่ฉันเคยทำในอดีต

หวังว่านี่จะช่วยคนอื่นได้


2
คุณสามารถใช้โฟลเดอร์ย่อยของ repo git ได้หรือไม่?
Chris

ทำงานให้ฉันในปี 2019! แต่ฉันต้องแน่ใจว่าคอมไพล์มีข้อมูลประจำตัวในการเข้าถึงบัญชีนั้น (เช่นทดสอบ git clone สองครั้งด้วยhttps://และให้แน่ใจว่าไม่จำเป็นต้องใช้รหัสผ่านในการรันครั้งที่สองจากนั้นคุณก็พร้อมที่จะไป!)
joeytwiddle

9

ฉันมีปัญหาเดียวกันนี้และหลังจากการค้นหาไปรอบ ๆ ฉันพบ Reggie ( https://github.com/mbrevoort/node-reggie ) มันดูค่อนข้างแข็ง จะช่วยให้การเผยแพร่โมดูล NPM เบาไปยังเซิร์ฟเวอร์ส่วนตัว ไม่สมบูรณ์ (ไม่มีการตรวจสอบสิทธิ์เมื่อทำการติดตั้ง) และมันยังเด็กอยู่ แต่ฉันทดสอบในเครื่องและดูเหมือนว่าจะทำในสิ่งที่ควรจะทำ

นั่นคือ ... (และนี่เป็นเพียงเอกสารของพวกเขา)

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

จากนั้น cd ลงในไดเรกทอรีโมดูลของคุณและ ...

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

ในที่สุดคุณสามารถติดตั้งแพ็กเกจจาก reggie เพียงแค่ใช้ url นั้นในคำสั่ง npm install โดยตรงหรือจากใน package.json ... เช่นนั้น

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

หรือ..

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

7

โครงสร้างรหัสของคุณในแบบที่สามารถเข้าถึงได้ดังต่อไปนี้ หากเป็นไปได้สำหรับคุณ

  • NodeProjs \ Apps \ MainApp \ package.json

  • NodeProjs \ โมดูล \ DataModule \ package.json

ภายใน MainApp @ NodProjs \ Apps \ MainApp \

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

คุณอาจต้องอัปเดต package.json เป็น:

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

สิ่งนี้ใช้ได้กับสถานการณ์ของฉัน


5

ขณะนี้ Npm มีโมดูลโฮสต์ส่วนตัวที่ไม่ จำกัดสำหรับ $ 7 / ผู้ใช้ / เดือนที่ใช้เช่นนี้

cd private-project
npm login

ในแพ็คเกจ json ของคุณ "name": " @username/private-project"

npm publish

จากนั้นต้องใช้โครงการของคุณ:

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

1
สิ่งนี้ต้องการขั้นตอนการเข้าสู่ระบบฝั่งไคลเอ็นต์หรือไม่
Aidan Hoolachan

ทางเลือกของสิ่งนี้คืออะไร? ตัวอย่างเช่นหากคุณต้องการโฮสต์ "แพ็คเกจ" ของคุณบน S3 และดึงจากที่นั่น
Con Antonakos

4

เริ่มจากคำตอบของ arcseldonฉันพบว่าจำเป็นต้องใช้ชื่อทีมใน URL ดังนี้:

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

และโปรดทราบว่าคีย์ API นั้นมีให้สำหรับทีมเท่านั้นไม่ใช่ผู้ใช้รายบุคคล


2

กำหนดค่าให้ติดตั้งจากที่เก็บสาธารณะ Github แม้ว่าเครื่องจะอยู่ภายใต้ไฟร์วอลล์:

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


2

นี่คือสิ่งที่ฉันกำลังมองหา :

# 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

คุณสามารถใช้Verdaccioเพื่อจุดประสงค์นี้ซึ่งเป็นรีจิสทรีพร็อกซี npm ส่วนตัวแบบ Lightweight ที่สร้างขึ้นใน Node.js นอกจากนี้ยังเป็นฟรีและโอเพ่นซอร์ส โดยการใช้ Verdaccio มันไม่ได้เกี่ยวข้องกับความยุ่งยากมากเท่าที่รีจิสทรีส่วนตัว NPM ธรรมดาจะ

คุณสามารถค้นหาข้อมูลโดยละเอียดเกี่ยวกับวิธีการติดตั้งและเรียกใช้บนเว็บไซต์ของพวกเขาแต่นี่คือขั้นตอน:

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

นอกจากนี้ยังมีนักเทียบท่าเพื่อให้คุณสามารถเผยแพร่ไปยังนักเทียบท่าสาธารณะของคุณได้อย่างง่ายดายและ voila คุณมีที่เก็บส่วนตัว npm ที่สามารถแจกจ่ายให้ผู้อื่นได้ในแบบที่คุณกำหนดค่า!


0

ง่ายมาก -

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

มันตั้งค่าregistry = "https://path-to-your-registry"บรรทัดนี้เป็นจริง/Users/<ur-machine-user-name>/.npmrc

ค่าทั้งหมดที่คุณตั้งไว้อย่างชัดเจนหรือได้รับการตั้งค่าตามค่าเริ่มต้นสามารถมองเห็นได้โดย - npm config list

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.