จะติดตั้งแพ็คเกจ npm จาก GitHub โดยตรงได้อย่างไร


870

พยายามติดตั้งโมดูลจากผลลัพธ์ Github ใน:

ข้อผิดพลาด ENOENT บน package.json

ทำซ้ำได้อย่างง่ายดายโดยใช้ express:

npm install https://github.com/visionmedia/express พ่นผิดพลาด

npm install express โรงงาน

ทำไมฉันถึงติดตั้งจาก github ไม่ได้?

นี่คือเอาต์พุตคอนโซล:

npm http GET https://github.com/visionmedia/express.git
npm http 200 https://github.com/visionmedia/express.git
npm ERR! not a package /home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/tmp.tgz
npm ERR! Error: ENOENT, open '/home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/package/package.json'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.8.0-23-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "https://github.com/visionmedia/express.git"
npm ERR! cwd /home/guym/dev_env/projects_GIT/proj/somename
npm ERR! node -v v0.10.10
npm ERR! npm -v 1.2.25
npm ERR! path /home/guym/tmp/npm-32312/1373176518024-0.6586997057311237/package/package.json
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/guym/dev_env/projects_GIT/proj/somename/npm-debug.log
npm ERR! not ok code 0

1
ใครสามารถให้รูปแบบ package.json devDependencies ได้บ้าง
อดัม

1
@ อดัมคุณสามารถเพิ่ม"express": "github:visionmedia/express"ใน"dependencies"ส่วนของpackage.json fileจากนั้นเรียกใช้: npm install(ตามที่ระบุไว้ด้านล่าง)
แดนนี

@ แดนนี่มันไม่ได้ผลสำหรับฉัน ฉันสงสัยว่ามีโฟลเดอร์ dist ใน repo Express ที่เปิดใช้งานหรือไม่
ml242

คำตอบ:


1158

เพราะhttps://github.com/visionmedia/expressเป็น URL ของหน้าเว็บและไม่ใช่โมดูล npm ใช้รสชาตินี้:

git+https://git@github.com/visionmedia/express.git

หรือรสชาตินี้ถ้าคุณต้องการ SSH:

git+ssh://git@github.com/visionmedia/express.git

86
นอกจากนี้คุณยังสามารถใช้git+https://github.com/visionmedia/express.gitเพื่อใช้ https แทน ssh
Steve Willcock

43
หมายเหตุพื้นที่เก็บข้อมูลที่คุณต้องการในการติดตั้งจะต้องเป็นโมดูล NPMก็ต้องมีpackage.jsonไฟล์หรืออื่น ๆ Error: ENOENT, open 'tmp.tgz-unpack/package.json'ที่คุณจะได้รับข้อผิดพลาดนี้:
GabLeRoux

20
จะเป็นอย่างไรถ้าฉันต้องการสาขาเฉพาะ
kilianc

3
ทางออกเดียวที่ฉันคิดว่าในตอนนี้คือการระบุการกระทำด้วย ... / express.git # commit
Gaston Sanchez

39
เวิบอกว่าคุณอาจจำเป็นต้องหลบหนี#ที่จะใช้เฉพาะสาขาจากเปลือกเช่น:npm install git+https://github.com/user/repo.git\#branch
หมอ

655

คุณสามารถทำการnpm install visionmedia/expressติดตั้งจาก Github ได้เช่นกัน

หรือ

npm install visionmedia/express#branch

นอกจากนี้ยังรองรับการติดตั้งโดยตรงจาก Gist, Bitbucket, Gitlab และรูปแบบพิเศษอื่น ๆ อีกมากมาย ดูnpm install เอกสารสำหรับพวกเขาทั้งหมด


19
อะไรโดยไม่ระบุ URL npm รู้ได้อย่างไรว่าบริการโฮสติ้งรสชาติใดที่คุณใช้อยู่?
Jake Rayson

22
@ Jake Rayson: เป็นไปได้ตั้งแต่รุ่น 1.1.65และใช้งานได้github.comเท่านั้น
ezze

5
ไม่ได้ผลสำหรับฉันบน Windows - เพียงแค่พยายามติดตั้งจากโฟลเดอร์ย่อยของไดเรกทอรีปัจจุบันของฉัน
Jarrod Mosen

7
โปรดทราบว่าวิธีนี้ใช้ไม่ได้กับการติดตั้งทั่วโลก (เช่น npm i repo / pkg -g) ณ npm 1.4.28
user3751385

1
@ user3751385 การติดตั้งทั่วโลกดูเหมือนจะใช้งานได้ใน npm 3.3.8
XåpplI'-I0llwlg'I -

170

หากไม่ได้ติดตั้ง git เราสามารถลอง

npm install --save https://github.com/Amitesh/gulp-rev-all/tarball/master

10
คำตอบที่ดี! มันทำงานได้สำหรับฉันในขณะที่คำสั่งอื่น ๆ (จากคำตอบอื่น ๆ ) ติดอยู่ที่ตรรกะเรียก git
Daniel Kmak

2
masterนอกจากนี้คุณยังสามารถใช้ชื่อแท็กในสถานที่ของ อาจเป็นวิธีที่ปลอดภัยกว่า
mpen

4
ดีสำหรับเมื่อคุณทำงานกับสาขาคุณควรแก้ไขคำตอบของคุณเพื่อรวมคำตอบรูปแบบทั่วไปฉันไม่ได้สังเกตใน/tarball/ตอนแรก
Lu Roman

2
นี่เป็นคำตอบเดียวที่ทำงานสำหรับฉันเมื่อติดตั้งการพึ่งพาจากภายในคอนเทนเนอร์ Docker
Fela Maslen

1
นอกจากนี้ยังเหมาะสำหรับการไม่ต้องดาวน์โหลด repo ทั้งหมด ขอบคุณ!
ส้ม

58

อัปเดตกันยายน 2559

ตอนนี้การติดตั้งจากวานิลลา https github URL ทำงานได้แล้ว:

npm install https://github.com/fergiemcdowall/search-index.git

แก้ไข 1:มีผู้ใช้สองคนแสดงความคิดเห็นว่าคุณไม่สามารถทำสิ่งนี้กับโมดูลทั้งหมดได้เนื่องจากคุณกำลังอ่านจากระบบควบคุมแหล่งที่มาซึ่งอาจมีรหัสที่ไม่ถูกต้อง / ไม่สมบูรณ์ / ไม่สมบูรณ์ / buggy ดังนั้นเพื่อความชัดเจน (แม้ว่ามันควรจะไปโดยไม่บอก): เนื่องจากรหัสใน repo นั้นอยู่ในสถานะที่สามารถใช้งานได้ในตอนนี้คุณสามารถติดตั้งได้โดยตรงจาก Github

แก้ไข 2: (21-10-2019) ตอนนี้เรากำลังอยู่ใน "peak typescript / React / Babel" ดังนั้นการรวบรวม JavaScript จึงเป็นเรื่องธรรมดา prepareหากคุณจำเป็นต้องใช้เวลารวบรวมเข้าไปดูบัญชีไป ที่กล่าวว่าโมดูล NPM ไม่จำเป็นต้องรวบรวมและก็ควรที่จะคิดว่าการรวบรวมไม่ใช่ค่าเริ่มต้นโดยเฉพาะอย่างยิ่งสำหรับโมดูลโหนดรุ่นเก่า


9
คุณไม่สามารถติดตั้งแพ็กเกจ npm ใด ๆ ที่คุณต้องการจากแหล่ง GitHub ยกเว้นว่า repo มีdistโฟลเดอร์และส่วนใหญ่ไม่ได้ ปัญหาที่ฉันเชื่อมโยงกับข้อผิดพลาด npm - prebuildขั้นตอนไม่ทำงานเมื่อติดตั้งจาก GitHub ตัวอย่างเช่นลองติดตั้งโหนดไหลเข้า / โหนดไหลบ่าเข้ามา
Dan Dascalescu

4
Repos ที่ไม่มีdistโฟลเดอร์สามารถติดตั้งได้จาก GitHub ตัวอย่างเช่นnpm install https://github.com/fergiemcdowall/search-index-adderทำงานได้อย่างสมบูรณ์
เฟอร์กี้

4
ถูกต้องเพราะคุณมีแหล่งข้อมูล usabel โดยตรงใน/lib(ราวกับว่าคุณมีโฟลเดอร์ dist) ประเด็นของฉันคือการรวม URL ของ GitHub ของ repo ใน package.jons ไม่รับประกันว่าจะทำงานเพื่อติดตั้ง repo นั้นได้ ตัวอย่างเช่นโมดูลที่เขียนด้วย TypeScript จำเป็นต้องส่งรหัส transpiled เข้าไปใน repo โดยทั่วไปแล้วพวกเขาจะไม่ทำสิ่งนี้ แต่ควรใช้สคริปต์เผยแพร่เพื่อถ่ายโอนข้อมูลรหัส. JS ลงในโฟลเดอร์ dist ซึ่งจะถูกอัปโหลดไปยัง npmjs.com
Dan Dascalescu

2
ฉันรู้ว่ามันช้าไปหน่อย แต่เคล็ดลับก็คือ npm ไม่มีการแมปแบบ 1 ต่อ 1 กับที่เก็บ Git บางโครงการสร้างไฟล์ต้นฉบับก่อนที่จะเผยแพร่มากกว่าที่จะทำก่อนหน้าหมายความว่าพวกเขาไม่ได้อยู่ใน Git repo แต่จะอยู่ในแพ็คเกจ npm - โครงการที่ทำเช่นนี้จะไม่ทำงานจาก Git อีกตัวอย่างของวิธีที่สิ่งนี้อาจล้มเหลวได้คือที่เก็บมาโคร - โครงการ GitHub ของ Babel ตัวอย่างเช่นมีแพ็คเกจ npm หลายร้อยรายการในโฟลเดอร์ย่อย สามารถเผยแพร่เป็นรายบุคคลได้เนื่องจาก npm ไม่ได้แม็พกับ Git โดยตรง NPM เผยแพร่สิ่งที่อยู่ในไดเรกทอรีของคุณ
John Chadwick

13
สำหรับใครก็ตามที่สะดุดกับเรื่องนี้ในภายหลัง ... ตั้งแต่ npm5, npm จะเรียกใช้prepareสคริปต์ใด ๆสำหรับการ "ติดตั้ง" แบบเปลือยซึ่งรวมถึง git deps ซึ่งหมายความว่าความคิดเห็นข้างต้นเกี่ยวกับการรวบรวมและโฟลเดอร์ dist ล้าสมัย แพคเกจใด ๆ ที่ตั้งค่าการคอมไพล์ให้ทำงานอย่างถูกต้องprepareจะทำงานได้ดีเหมือนการคอมไพล์โดยไม่ต้องคอมไพล์คอมไพล์ใด ๆ ให้เป็นคอมไพล์
jasonkarns

54

นอกจากนี้ยังมีnpm install https://github.com/{USER}/{REPO}/tarball/{BRANCH}การใช้สาขาที่แตกต่างกัน


ฉันพบปัญหานี้ ... github.com/yarnpkg/yarn/issues/2738 ฉันสามารถเปลี่ยนรีจิสตรีไปเป็นรีจิสตรี tarball github และมันทำงานได้ .. ขอบคุณ!
Matt Goo

สิ่งนี้ได้แก้ไขปัญหาด้านประสิทธิภาพที่สำคัญบางประการสำหรับฉัน การใช้ {USER} / {REPO} .git # {BRANCH} ช้ามาก
Erik Koopmans

37

คำตอบยอดนิยมปัจจุบันของ Peter Lyons ไม่เกี่ยวข้องกับ NPM รุ่นล่าสุด ตัวอย่างเช่นการใช้คำสั่งเดียวกับที่ถูกวิพากษ์วิจารณ์ในคำตอบนี้ก็ใช้ได้แล้ว

$ npm install https://github.com/visionmedia/express

หากคุณยังคงมีปัญหาอยู่อาจเป็นปัญหากับแพ็คเกจที่คุณใช้


นอกจากนี้ยังเปลี่ยนเส้นทางไปยังgithub.com/expressjs/expressโดยอัตโนมัติในขณะนี้เมื่อคุณใช้คำสั่งนี้ :)
โคลิน D

33

วิธีการได้รับการคุ้มครองอย่างดีในขณะนี้ในเอกสารการติดตั้งของ NPM และคำตอบอื่น ๆ อีกมากมายที่นี่

npm install git+ssh://git@github.com:<githubname>/<githubrepo.git[#<commit-ish>]
npm install git+ssh://git@github.com:<githubname>/<githubrepo.git>[#semver:^x.x]
npm install git+https://git@github.com/<githubname>/<githubrepo.git>
npm install git://github.com/<githubname>/<githubrepo.git>
npm install github:<githubname>/<githubrepo>[#<commit-ish>]

อย่างไรก็ตามสิ่งที่น่าสังเกตว่ามีการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้คือการเพิ่มprepareสคริปต์เพื่อแทนที่prepublishสคริปต์ สิ่งนี้จะแก้ไขปัญหาที่ยาวนานซึ่งโมดูลที่ติดตั้งผ่าน git ไม่ได้รันprepublishสคริปต์และดังนั้นจึงไม่ได้ทำขั้นตอนการบิลด์ที่เกิดขึ้นเมื่อโมดูลถูกเผยแพร่ไปยังรีจิสตรี npm ดูhttps://github.com/npm/npm/issues/3055 https://github.com/npm/npm/issues/3055

แน่นอนผู้เขียนโมดูลจะต้องอัปเดต package.json เพื่อใช้prepareคำสั่งใหม่นี้เพื่อเริ่มทำงาน


19

อัปเดตตอนนี้คุณสามารถทำได้: npm install git://github.com/foo/bar.git
หรือในpackage.json:

"dependencies": {
  "bar": "git://github.com/foo/bar.git"
}

19

รูปแบบทั่วไปของไวยากรณ์คือ

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]

ซึ่งหมายความว่าสำหรับกรณีของคุณมันจะเป็น

npm install git+ssh://git@github.com/visionmedia/express.git

จาก npmjs เอกสาร:

ติดตั้ง NPM:

ติดตั้งแพ็กเกจจากผู้ให้บริการ git ที่โฮสต์และทำการโคลนด้วย git สำหรับ URL ระยะไกล git แบบเต็มเฉพาะจะพยายาม URL นั้น

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish>

| #semver:] เป็นหนึ่งใน git, git + ssh, git + http, git + https หรือ git +

หากมีการระบุ # มันจะถูกใช้เพื่อโคลนการกระทำที่แน่นอน หาก commit-ish มีรูปแบบ #semver :, สามารถเป็นช่วง semver ที่ถูกต้องหรือรุ่นที่แน่นอนและ npm จะมองหาแท็กหรือการอ้างอิงที่ตรงกับช่วงนั้นในที่เก็บระยะไกลมากที่สุดเท่าที่มันจะเป็นการอ้างอิงรีจิสทรี ถ้าไม่ใช่ # หรือ

semver: ถูกระบุจากนั้นจะใช้ต้นแบบ

หากพื้นที่เก็บข้อมูลใช้ประโยชน์จาก submodules, submodules เหล่านั้นจะถูกโคลนเช่นกัน

หากแพ็กเกจที่ติดตั้งมีสคริปต์การเตรียมการการขึ้นต่อกันของมันและ devDependencies จะถูกติดตั้งและสคริปต์การเตรียมการจะถูกเรียกใช้ก่อนที่แพคเกจจะได้รับการบรรจุและติดตั้ง

ตัวแปรสภาพแวดล้อม git ต่อไปนี้ได้รับการยอมรับโดย npm และจะถูกเพิ่มไปยังสภาพแวดล้อมเมื่อใช้ git:

  • GIT_ASKPASS
  • GIT_EXEC_PATH
  • GIT_PROXY_COMMAND
  • GIT_SSH
  • GIT_SSH_COMMAND
  • GIT_SSL_CAINFO GIT_SSL_NO_VERIFY

ดูหน้า git man สำหรับรายละเอียด

ตัวอย่าง:

npm install git+ssh://git@github.com:npm/npm.git#v1.0.27
npm install git+ssh://git@github.com:npm/npm#semver:^5.0
npm install git+https://isaacs@github.com/npm/npm.git
npm install git://github.com/npm/npm.git#v1.0.27
GIT_SSH_COMMAND='ssh -i ~/.ssh/custom_ident' npm install git+ssh://git@github.com:npm/npm.git npm install

14

ติดตั้งโดยตรง:

npm install visionmedia/express

หรือคุณสามารถเพิ่ม"express": "github:visionmedia/express"ใน"dependencies"ส่วนของpackage.jsonไฟล์จากนั้นเรียกใช้:

npm install


6

คุณสามารถติดตั้ง repo github โดยตรงโดยnpm installคำสั่งเช่นนี้ npm install https://github.com/futurechallenger/npm_git_install.git --save

หมายเหตุ:ใน repo ซึ่งจะถูกติดตั้งโดยคำสั่ง npm:

  1. บางทีคุณอาจจะต้องมีโฟลเดอร์ใน repo ของคุณตามความเห็นของ @Dan Dascalescu
  2. แน่นอนคุณต้องมีpackage.jsonใน repo คุณ! ซึ่งฉันลืมเพิ่ม

1
คุณไม่จำเป็นต้องมีdistโฟลเดอร์หรือรหัสการสร้างใด ๆ ใน repo ของคุณ คุณเพียงแค่ต้องใช้สคริปต์ในprepare package.json
คาเมรอน Tacklind


0

ฉันเหนื่อย npm install git+https://github.com/visionmedia/expressแต่มันใช้เวลานานเกินไปและฉันก็ไม่แน่ใจว่าจะได้ผล

สิ่งที่ได้ทำงานสำหรับฉันเป็น yarn add git+https://github.com/visionmedia/express-


-3

ลองคำสั่งนี้

 npm install github:[Organisation]/[Repository]#[master/BranchName] -g

คำสั่งนี้ใช้ได้สำหรับฉัน

 npm install github:BlessCSS/bless#3.x -g

12
อย่าใช้ SUDO ด้วย NPM ติดตั้ง! ค่อนข้างใช้ chown เพื่อเปลี่ยนเจ้าของ
Marek Fajkus

เวอร์ชันเป็นชื่อแท็ก / สาขาหรือเวอร์ชัน package.json
mfrachet

@MarekFajkus หากคุณติดตั้งบน Linux ผ่านตัวจัดการแพคเกจโดยใช้ sudo ... คุณจะต้องใช้รูทหากคุณต้องการติดตั้งแพ็กเกจทั่วโลก
Ray Foss

1
@RayFoss ปลายปี แต่ ... เฉพาะในกรณีที่คุณต้องการให้ผู้ใช้ทุกคนสามารถติดตั้งแพคเกจที่ติดตั้งไว้ทั่วโลก เพียงกำหนดค่า npm เพื่อติดตั้งแพ็กเกจโกลบอล~/node_modulesคุณก็ไม่จำเป็นต้องใช้ sudo
Mr5o1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.