GitHub से सीधे npm पैकेज कैसे स्थापित करें?


870

जीथब परिणाम से मॉड्यूल स्थापित करने की कोशिश कर रहा है:

Package.json पर पर्याप्त त्रुटि।

आसानी से व्यक्त एक्सप्रेस का उपयोग कर:

npm install https://github.com/visionmedia/express त्रुटि फेंकता है।

npm install express काम करता है।

मैं जीथब से क्यों नहीं स्थापित कर सकता हूं?

यहाँ कंसोल आउटपुट है:

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
किसी को भी दे सकते हैं पैकेज। Json निर्भरता प्रारूप?
एडम

1
@ अदम आप "express": "github:visionmedia/express"के "dependencies"अनुभाग में जोड़ सकते हैं package.json file, फिर चला सकते हैं: npm install(जैसा कि नीचे उल्लेख किया गया है)
डैनी

@ डैनी, जो मेरे लिए काम नहीं करता है। मुझे आश्चर्य है कि अगर वहाँ है कि इसे सक्षम करने के लिए उस रेपो में एक दूर फ़ोल्डर था।
ml242

जवाबों:


1157

क्योंकि 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.gitssh के बजाय https का उपयोग करने के लिए भी उपयोग कर सकते हैं ।
स्टीव विलकॉक

43
ध्यान दें कि आप जिस रिपॉजिटरी को स्थापित करना चाहते हैं वह एक npm मॉड्यूल होना चाहिए, इसमें एक package.jsonफ़ाइल होनी चाहिए अन्यथा आपको यह त्रुटि मिलेगी Error: ENOENT, open 'tmp.tgz-unpack/package.json':।
गैबलीरॉक्स

20
क्या होगा अगर मैं एक विशिष्ट शाखा चाहता हूं
किलोवाट

3
केवल समाधान के लिए मुझे लगता है कि अब के साथ एक प्रतिबद्ध निर्दिष्ट करने के लिए है ... / express.git # प्रतिबद्ध
गैस्टन सांचेज़

39
वर्थ ने कहा कि आपको #शेल से एक विशिष्ट शाखा का उपयोग करने के लिए भागने की आवश्यकता हो सकती है , अर्थात:npm install git+https://github.com/user/repo.git\#branch
mor

655

तुम भी npm install visionmedia/expressGithub से स्थापित करने के लिए कर सकते हैं

या

npm install visionmedia/express#branch

इसमें सीधे एक Gist, Bitbucket, Gitlab, और कई अन्य विशिष्ट स्वरूपों को स्थापित करने के लिए समर्थन है। को देखो npm install प्रलेखन उन सब के लिए।


19
URL निर्दिष्ट किए बिना क्या? Npm को कैसे पता चलता है कि आप किस फ्लेवर की होस्टिंग सेवा का उपयोग कर रहे हैं?
जेक रेज़सन

22
@ जेक रेसन: यह संस्करण 1.1.65 के बाद से संभव है और github.comकेवल काम करता है ।
13

5
विंडोज पर मेरे लिए काम नहीं किया - यह सिर्फ मेरे वर्तमान निर्देशिका के एक सबफ़ोल्डर से स्थापित करने की कोशिश की।
जारोद मेसन

7
ध्यान दें कि यह वैश्विक इंस्टॉल पर काम नहीं करता है (यानी npm i repo / pkg -g) npm 1.4.28 के रूप में
user3751385

1
@ user3751385 ग्लोबल इंस्टॉलेशन npm 3.3.8 में काम कर रहे हैं।
XåpplI'-I0llwlg'I -

170

यदि गिट स्थापित नहीं है, तो हम कोशिश कर सकते हैं

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

10
बहुत बढ़िया जवाब! इसने मेरे लिए काम किया जबकि अन्य कमांड (अन्य उत्तरों से) कुछ गिट लॉजिक लॉजिक में फंस गए थे।
डैनियल Kmak

2
के स्थान पर आप टैग नामों का भी उपयोग कर सकते हैं master। शायद इस तरह से करना सुरक्षित है।
19

4
जब आप शाखाओं के साथ काम कर रहे होते हैं, तो आपको सामान्य प्रारूप के उत्तर को शामिल करने के लिए अपने उत्तर को संशोधित करना चाहिए, मुझे /tarball/पहली बार ध्यान नहीं आया
लू रोमन

2
यह एकमात्र उत्तर है जो डॉकटर कंटेनर के भीतर से निर्भरता स्थापित करते समय मेरे लिए काम करता है।
फेला मैस्लेन

1
यह संपूर्ण रेपो को डाउनलोड करने की आवश्यकता नहीं है। धन्यवाद!
सोम

58

अपडेट सितंबर 2016

अब वेनिला https github URL से इंस्टॉल करना काम करता है:

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

EDIT 1: उपयोगकर्ताओं की एक टिप्पणी है कि आप सभी मॉड्यूल के लिए ऐसा नहीं कर सकते क्योंकि आप एक स्रोत नियंत्रण प्रणाली से पढ़ रहे हैं, जिसमें अच्छी तरह से अमान्य / असूचीबद्ध / छोटी गाड़ी कोड हो सकता है। तो स्पष्ट होने के लिए (हालांकि यह बिना कहे जाना चाहिए): यह देखते हुए कि रेपो में कोड एक एनपीएम-प्रयोग करने योग्य स्थिति में है , अब आप बहुत खुशी से सीधे जीथब से इंस्टॉल कर सकते हैं

EDIT 2: (21-10-2019) अब हम "पीक टाइपस्क्रिप्ट / रिएक्ट / बैबेल" के माध्यम से रह रहे हैं, और इसलिए जावास्क्रिप्ट संकलन काफी आम हो गया है। यदि आपको संकलन को ध्यान में रखना चाहिए prepare। उस ने कहा, एनपीएम मॉड्यूल को संकलित करने की आवश्यकता नहीं है , और यह मान लेना बुद्धिमानी है कि संकलन डिफ़ॉल्ट नहीं है, विशेष रूप से पुराने नोड मॉड्यूल के लिए (और संभवतः बहुत नए, रक्तस्रावी-किनारे "ESNext" -y वाले)।


9
आप अपने GitHub स्रोत से कोई भी npm पैकेज नहीं स्थापित कर सकते, जब तक कि रेपो में एक distफ़ोल्डर शामिल न हो, और अधिकांश नहीं। समस्या जो मैंने npm बग से जुड़ी है - prebuildGitHub से इंस्टॉल करते समय कदम नहीं चलाया गया है। एक उदाहरण के रूप में, नोड-इनफ़्लो / नोड-इनफ़्लो स्थापित करने का प्रयास करें ।
डैन डस्केल्सस्कु

4
distफ़ोल्डरों के बिना पुन: उपयोग GitHub से स्थापित किया जा सकता है, उदाहरण के लिए: npm install https://github.com/fergiemcdowall/search-index-adderपूरी तरह से काम करता है।
फर्जी

4
सही है, क्योंकि आपके पास सीधे usabel स्रोत है /lib(जैसे कि आपके पास एक दूर फ़ोल्डर था)। मेरा कहना यह है कि सिर्फ पैकेज में एक रेपो के GitHub URL को शामिल करना। उस रेपो को स्थापित करने के लिए काम करने की गारंटी नहीं है। टाइपस्क्रिप्ट में लिखे गए मॉड्यूल, उदाहरण के लिए, उनके ट्रांसपोल्ड कोड को रेपो में धकेलने की आवश्यकता होती है। वे आम तौर पर ऐसा नहीं करते हैं, बल्कि एक। फ़ोल्डर में एक। फ़ोल्डर में डंप करने के लिए एक पूर्व-स्क्रिप्ट स्क्रिप्ट का उपयोग करते हैं, जो npmjs.com पर अपलोड हो जाता है।
डैन डेस्केल्सस्कु

2
मुझे पता है कि यह थोड़ा देर हो चुका है, लेकिन चाल वास्तव में npm है जिसमें Git रिपॉजिटरी में 1-टू -1 मैपिंग नहीं है। कुछ प्रोजेक्ट्स कमिट करने से पहले पब्लिश करने से पहले अपने सोर्स फाइल्स बनाते हैं, मतलब वे Git repo में नहीं हैं, लेकिन npm पैकेज में होंगे - ऐसा करने वाले प्रोजेक्ट Git से सही काम नहीं करेंगे। यह कैसे विफल हो सकता है इसका एक और उदाहरण मैक्रो रिपॉजिटरी है - बाबेल का गिटहब प्रोजेक्ट, उदाहरण के लिए, सबफ़ोल्डर्स में सैकड़ों व्यक्तिगत एनपीएम पैकेज शामिल हैं। इन्हें व्यक्तिगत रूप से प्रकाशित किया जा सकता है क्योंकि npm सीधे Git पर मैप नहीं करता है। npm आपकी निर्देशिका में जो कुछ भी है उसे प्रकाशित करता है।
जॉन चाडविक

13
जो भी बाद में इस पर ठोकर खाता है, उसके लिए ... npm5 के अनुसार, npm prepareनंगे "इंस्टॉल" के लिए कोई स्क्रिप्ट चलाएगा , जिसमें गिट डिप्स शामिल हैं। जिसका अर्थ है कि संकलन और डिस्टर्ब फोल्डर के चारों ओर उपरोक्त टिप्पणियां पुरानी हैं। कोई भी पैकेज जो ठीक से चलाने के लिए उनके संकलन को सेट करता है, वह prepareकिसी भी संकलित संपत्ति को गिट में किए बिना एक git dep के रूप में ठीक काम करेगा।
जसोनकरन्स

54

npm install https://github.com/{USER}/{REPO}/tarball/{BRANCH}एक अलग शाखा का उपयोग करने के लिए भी है।


मैं इस मुद्दे में भाग गया ... github.com/yarnpkg/yarn/issues/2738 मैं रजिस्ट्री को गितुब टार्बल रजिस्ट्री में बदलने में सक्षम था और इसने काम किया .. धन्यवाद!
मैट गू गो

इसने मेरे लिए कुछ प्रमुख प्रदर्शन मुद्दों को हल किया। {USER} / {REPO} .गित # {BRANCH} का उपयोग बहुत धीमा था।
एरिक कोपामंस

37

पीटर लियोन द्वारा वर्तमान शीर्ष उत्तर हाल के एनपीएम संस्करणों के साथ प्रासंगिक नहीं है। उदाहरण के लिए, इस जवाब में आलोचना की गई उसी कमांड का उपयोग करना अब ठीक है।

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

यदि आपने समस्याएँ जारी रखी हैं, तो यह आपके द्वारा उपयोग किए जा रहे पैकेज के साथ समस्या हो सकती है।


जब आप इस आदेश का उपयोग करते हैं तो यह स्वचालित रूप से अब github.com/expressjs/express पर पुनर्निर्देशित करता है :)
कॉलिन डी

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 देखें ।

बेशक, मॉड्यूल लेखकों को अपने पैकेज को अपडेट करने की आवश्यकता होगी 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 दूरस्थ url के लिए, केवल उस URL का प्रयास किया जाएगा।

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

| # सेवर:] git, git + ssh, git + http, git + https, या git + फ़ाइल में से एक है।

अगर # प्रदान किया जाता है, तो इसका उपयोग उस कमिट को क्लोन करने के लिए किया जाएगा। अगर कम-ईश के पास #semver का प्रारूप है :, कोई भी मान्य सेमी रेंज या सटीक संस्करण हो सकता है, और npm किसी भी टैग या refs को दूरस्थ रिपॉजिटरी में उस श्रेणी से मेल खाते हुए खोजेगा, जितना कि यह एक रजिस्ट्री निर्भरता के लिए होगा। यदि न तो # या

सेमर: निर्दिष्ट है, फिर मास्टर का उपयोग किया जाता है।

यदि रिपॉजिटरी सबमॉड्यूल्स का उपयोग करता है, तो उन सबमॉड्यूल्स को क्लोन किया जाएगा।

यदि स्थापित किए जा रहे पैकेज में एक तैयार स्क्रिप्ट है, तो इसकी निर्भरताएं और अवमूल्यन स्थापित किए जाएंगे, और पैकेज तैयार होने और स्थापित होने से पहले तैयार स्क्रिप्ट को चलाया जाएगा।

निम्नलिखित git पर्यावरण चर npm द्वारा पहचाने जाते हैं और git चलाते समय पर्यावरण में जोड़े जाएंगे:

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

विवरण के लिए git मैन पेज देखें।

उदाहरण:

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

आप सीधे npm installइस तरह से एक github रेपो स्थापित कर सकते हैं : npm install https://github.com/futurechallenger/npm_git_install.git --save

नोट: रेपो में जो npm कमांड द्वारा इंस्टॉल किया जाएगा:

  1. हो सकता है आप एक करना होगा जिले @Dan Dascalescu की टिप्पणी के अनुसार, वह फ़ोल्डर जिसमें आप रेपो।
  2. आप निश्चित रूप से एक पैकेज है । आप में रेपो! जो मैं जोड़ना भूल गया।

1
आपको distअपने रेपो में फ़ोल्डर या किसी बिल्ड कोड की आवश्यकता नहीं है । आपको बस एक prepareस्क्रिप्ट का उपयोग करने की आवश्यकता है package.json
कैमरन टैकलिंड


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
NPM INSTALL के साथ SUDO का उपयोग न करें! बल्कि मालिक बदलने के लिए chown का उपयोग करें।
मारेक फजकस

संस्करण टैग / शाखा का नाम या package.json संस्करण है?
mfrachet 13

@MarekFajkus यदि आप sudo का उपयोग कर एक पैकेज मैनेजर के माध्यम से लिनक्स पर स्थापित करते हैं ... यदि आप विश्व स्तर पर संकुल स्थापित करना चाहते हैं तो आपको रूट का उपयोग करना होगा
Ray Foss

1
@RayFoss एक वर्ष देर से लेकिन ... यह केवल तभी है जब आप चाहते हैं कि विश्व स्तर पर स्थापित पैकेज सभी उपयोगकर्ताओं के लिए उपलब्ध हो, जो शायद ही कभी मामला हो। में वैश्विक पैकेज स्थापित करने के लिए बस npm कॉन्फ़िगर करें ~/node_modules, फिर आपको sudo की आवश्यकता नहीं है।
Mr5o1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.