ขึ้นอยู่กับสาขาหรือแท็กโดยใช้ URL git ใน package.json?


399

สมมติว่าฉันได้รวบรวมโมดูลโหนดพร้อมกับตัวแก้ไขข้อบกพร่องและฉันต้องการใช้เวอร์ชันคงที่ของฉันในสาขาฟีเจอร์แน่นอนจนกว่าจะมีการรวมและแก้ไขข้อผิดพลาด

ฉันจะอ้างอิงรุ่นที่แก้ไขในส่วนdependenciesของฉันได้package.jsonอย่างไร

คำตอบ:


569

จากเอกสาร npm :

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

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

ในฐานะของ NPM เวอร์ชั่น 1.1.65 คุณสามารถทำได้:

<user>/<project>#<branch>

130
ในฐานะของ NPM 1.1.65, Github URL user/projectที่สามารถจะกระชับมากขึ้น npmjs.org/doc/files/package.json.htmlคุณสามารถแนบสาขาเช่นuser/project#branch
dantheta

2
git://github.com/<user>/<project>.git#feature/blahทำงานได้ แต่<user>/<project>.git#feature/blahไม่ได้ ... บางที regex ของพวกเขาจะต้องสูงกว่านี้เพื่อfeature/blahพิจารณา นี่คือน.v1.4.28
pulkitsinghal

5
คุณจะรวมหมายเลขรุ่นได้อย่างไร
ริชาร์ด

1
@hurrymaplelad ฉันสามารถทำเช่นเดียวกันสำหรับคำขอดึงได้หรือไม่ ถ้าเป็นเช่นนั้นคำสั่งเป็นอย่างไร
roundrobin

3
อัปเดตลิงก์ NPM docs docs.npmjs.com/files/package.json#github-urls
kellen

136

ต่อความคิดเห็นของ @ dantheta:

ตั้งแต่ npm 1.1.65 URL Github สามารถเป็นผู้ใช้ / โครงการที่กระชับยิ่งขึ้น npmjs.org/doc/files/package.json.html คุณสามารถแนบสาขาเช่น user / project # branch

ดังนั้น

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

หรือสำหรับแท็ก v1.12.0 บน jscs:

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

หมายเหตุถ้าคุณใช้ npm - บันทึกคุณจะได้รับคอมไพล์ที่ยาวขึ้น

จากhttps://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git URLs เป็น Dependencies

URL ของ Git สามารถอยู่ในรูปแบบ:

git: //github.com/user/project.git#commit-ish git + ssh: // ชื่อผู้ใช้ @ 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

การกระทำ - ish สามารถแท็กใด ๆ , sha, หรือสาขาซึ่งสามารถจัดเป็นอาร์กิวเมนต์ในการชำระเงินคอมไพล์ ค่าเริ่มต้นคือต้นแบบ

URL ของ GitHub

ในเวอร์ชัน 1.1.65 คุณสามารถอ้างถึง URL ของ GitHub เป็นเพียง "foo": "user / foo-project" เช่นเดียวกับ URL git สามารถรวมคำต่อท้าย commit-ish ได้ ตัวอย่างเช่น:

{"name": "foo",
"version": "0.0.0",
"dependencies": {"express": "visionmedia / express", "mocha": "visionmedia / mocha # 4727d357ea"}}


2
ทั้งนี้ขึ้นอยู่กับการกระทำ sha1 ควรเป็นตัวเลือกที่ต้องการโดยเฉพาะอย่างยิ่งถ้าคุณขึ้นอยู่กับ repo ที่ไม่ได้อยู่ภายใต้การควบคุมของคุณ กิ่งก้านและแท็กของ Git นั้นไม่สามารถเปลี่ยนแปลงได้ (สามารถลบ / เปลี่ยนแปลง, เป็นอันตราย / โดยไม่ได้ตั้งใจ) ได้ในขณะที่มันเป็นไปไม่ได้ที่จะสร้างการชน sha1
jakub.g

1
ฉันจะมีสาขาและกระทำการกระทำได้ไหม?
munchschair

45

หากคุณต้องการที่จะใช้develหรือfeatureสาขาหรือคุณยังไม่ได้เผยแพร่แพคเกจบางอย่างเพื่อรีจิสทรี NPM หรือคุณไม่สามารถเพราะมันเป็นโมดูลส่วนตัวแล้วคุณสามารถชี้ไปที่git://URI แทนหมายเลขรุ่นในpackage.json:

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

#refส่วนจะเป็นตัวเลือกและมันอาจจะเป็นสาขา (ชอบmaster) แท็ก (ชอบ0.0.1) หรือบางส่วนหรือทั้งหมดกระทำ ID


26

ในรุ่นล่าสุดของ NPM คุณสามารถทำได้:

npm install gitAuthor/gitRepo#tag

หาก repo เป็นแพคเกจ NPM ที่ถูกต้องจะมีการใช้นามแฝงอัตโนมัติใน package.json ดังนี้:

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

หากคุณสามารถเพิ่มสิ่งนี้ในคำตอบของ @justingordon ไม่จำเป็นต้องใช้นามแฝงด้วยตนเองในตอนนี้!


4
ไม่มันไม่ใช่ ติดตั้งไม่ถูกต้อง อย่างใดมันไม่รวมโครงสร้างไดเรกทอรีทั้งหมดจากพื้นที่เก็บข้อมูลเพียงบางไฟล์เช่น package.json, yarn.lock, readme และใบอนุญาต ไม่มีโฟลเดอร์ src หรือ dist
StalkAlex

@StalkAlex docs.npmjs.com/cli/publishจากนั้นตรวจสอบ repo ที่คุณติดตั้งสำหรับสคริปต์บิลด์ บางทีพวกเขาอาจถูกแท็กหรือการติดตั้งหลังไม่ได้ผลสำหรับคุณมันเป็นปัญหาสำหรับแพ็คเกจเฉพาะนั้นอย่างไรก็ตามหวังว่านี่จะช่วยได้!
กระแสน้ำวน

@ vortex ขอบคุณคุณหมายถึงอะไรโดยการติดแท็ก สิ่งนี้ทำให้เกิดปัญหาดังกล่าวได้อย่างไร
StalkAlex

0

ถ้ามันช่วยทุกคนฉันลองทุกอย่างด้านบน (https กับโหมดโทเค็น) - และก็ยังไม่มีอะไรทำงาน ฉันไม่มีข้อผิดพลาด แต่จะไม่มีสิ่งใดติดตั้งใน node_modules หรือ package_lock.json ถ้าฉันเปลี่ยนโทเค็นหรือตัวอักษรใด ๆ ในชื่อ repo หรือชื่อผู้ใช้ ฯลฯ - ฉันได้รับข้อผิดพลาด ดังนั้นฉันรู้ว่าฉันมีโทเค็นที่ถูกต้องและชื่อ repo

ในที่สุดฉันก็รู้ว่าเป็นเพราะชื่อของการพึ่งพาที่ฉันมีใน package.json ไม่ตรงกับชื่อใน package.json ของ repo ที่ฉันพยายามดึง แม้การติดตั้ง npm --verbose ไม่ได้บอกว่ามีปัญหาใด ๆ ดูเหมือนว่าจะไม่สนใจข้อผิดพลาดในการขึ้นต่อกันที่ไม่มี

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