npm एक विशिष्ट संस्करण में Git से इंस्टॉल करें


181

मान लिया कि मैंने Node.js के लिए एक मॉड्यूल लिखा है, जिसे मैं निजी रखना चाहूंगा। मुझे पता है कि मैं (को) लाइन जोड़ सकता हूं:

"private": "true"

करने के लिए package.jsonफ़ाइल, और मुझे यह भी पता है कि मैं यह कर सकते हैं npm installइस मॉड्यूल एक फ़ाइल सिस्टम पथ या GitHub सहित एक Git भंडार, के लिए एक लिंक का उपयोग कर।

मुझे यह भी पता है कि मैं इस तरह की फाइल सिस्टम पाथ या लिंक को git repo में डाल सकता हूं package.json, ताकि वह dependenciesहिस्सा इस तरह दिख सके:

"dependencies": {
  "myprivatemodule": "git@github.com:..."
}

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

तो मेरा सवाल यह है कि क्या इस तरह के संस्करण संख्या को निर्दिष्ट करना संभव है और npm को नवीनतम संस्करण के लिए गिट रिपॉजिटरी की खोज करना है जिसमें यह संस्करण शामिल है?

यदि नहीं, तो आप अपनी परियोजनाओं में इस मुद्दे को कैसे हल करेंगे? क्या आप कमिटेड आईडी के साथ रहते हैं या इसका कोई बेहतर उपाय है?

जवाबों:


193

केवल एक डिस्क्रिप्टर को निर्दिष्ट करके स्थापित करने के लिए एक निर्भरता उपलब्ध registryहोनी चाहिए ।version

यदि आपकी परियोजनाएँ सार्वजनिक रूप से साझा नहीं की जानी चाहिए , तो आप निश्चित रूप से अपनी स्वयं की रजिस्ट्री बना सकते हैं औरregistry.npmjs.org उसका उपयोग कर सकते हैं ।

लेकिन, यदि यह रजिस्ट्री में नहीं है, तो इसे URL या Git URL द्वारा संदर्भित करना होगा । Git URL वाले संस्करण को निर्दिष्ट करने के <commit-ish>लिए, URL के टुकड़े के रूप में एक उपयुक्त , जैसे टैग, अंत में शामिल करें

उदाहरण के लिए, एक टैग नाम के लिए 0.3.1:

"dependencies": {
  "myprivatemodule": "git@github.com:...#0.3.1"
}

नोट : उपरोक्त स्निपेट आधार URL को उसी तरह दिखाता है जैसे यह प्रश्न में पोस्ट किया गया था।

स्निप किए गए भाग ( ...) को भरा जाना चाहिए:

"myprivatemodule": "git@github.com:{owner}/{project}.git#0.3.1"

और, SSH पहुँच उपलब्ध नहीं होने पर एक अलग पते के प्रारूप की आवश्यकता होगी:

"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"

आपके OS के आधार पर, आप linkएक अन्य फ़ोल्डर में निर्भरता के लिए भी सक्षम हो सकते हैं, जहाँ आपने इसे Github से क्लोन किया है।


1
इस पोस्ट के कुछ लिंक पुराने हैं, क्योंकि वे 404 पृष्ठों की जगह ले जाते हैं। जो एक अफ़सोस की बात है, क्योंकि इस जानकारी में से कुछ मैं काफी समय से देख रहा हूँ।
एमवीजी

5
मैंने एक विशिष्ट संस्करण के साथ टैग किया git tag -a "1.0.0"और धक्का दिया git push --tags, फिर मैंने निर्भरता #v1.0.0के अंत में जोड़ा git+ssh। लेकिन npm updateकुछ भी नहीं होता है।
लोरेटोपार्सी

3
@loretoparisi क्षमा करें। मुझे जोड़ने vका सुझाव देना जरूरी नहीं था । बाद #, टुकड़ा टैग का पूरा नाम (या अन्य मैच चाहिए commitsh , आपके मामले में -) #1.0.0
जोनाथन लोनोव्स्की

जुलाई 2016 तक, स्वयं की रजिस्ट्री की मेजबानी करने से अधिक जटिल हो गया है क्योंकि वे सोफेडब से माइक्रोसर्विस की ओर बढ़ रहे हैं
यान फोटो

3
अब आप कर सकते हैं npm i {owner}/{project}#{tag}या जोड़ने के "{library}": "github:{owner}/{project}#{tag}"बजाय का उपयोग करने का package.json करने git@github.comयाgit://github.com
माइक डब्ल्यू

237

स्वीकृत जवाब मेरे काम नहीं आया। यहाँ मैं github से एक पैकेज खींचने के लिए क्या कर रहा हूँ:

npm install --save "git://github.com/username/package.git#commit"

या इसे package.json पर मैन्युअल रूप से जोड़ना:

"dependencies": {
  "package": "git://github.com/username/package.git#commit"
}

41
यदि आप http / https का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप "git +" उपसर्ग को शामिल करते हैं:"package": "git+https://github.com/username/package.git#commit"
Ates गोरल

4
इसने "npm इंस्टॉल" के रूप में काम किया, लेकिन जब मैंने अपने एप्लिकेशन को चलाने की कोशिश की तो पैकेज ('mymodule') पैकेज खोजने में विफल रहा। भले ही पैकेज एक ही नाम के साथ node_modules निर्देशिका में हो।
डेरिक

ओह, विचाराधीन मॉड्यूल में बिल्ड को उस विशिष्ट कमिट के साथ शामिल नहीं किया गया था जो मैं चाहता था ताकि यदि आपको वही समस्या है तो आपको इसे मैन्युअल रूप से बनाना पड़ सकता है।
डेरिक

1
तुम भी #tagजो आमतौर पर एक संस्करण संख्या में इंगित करता है का उपयोग कर सकते हैं
deltree

1
@surjikal आपको git वाले संस्करण संख्याओं का उपयोग करने से पहले रिलीज़ को टैग करना होगा। उदाहरण के git tag -a v1.0.1 && git push --tag && git pushरूप में @ जोनाथन लोनोस्की ने भी एक टिप्पणी में कहा।
डॉटनेट कारपेंटर

80

यदि संस्करण से आपका मतलब टैग या रिलीज़ से है, तो जीथब उन लोगों के लिए डाउनलोड लिंक प्रदान करता है। उदाहरण के लिए, यदि मैं 0.3.2 संस्करण प्राप्त करना चाहता हूं (यह npm पर उपलब्ध नहीं है), तो मैं अपने package.jsonअंडर में जोड़ता हूं dependencies:

"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",

कमिटेड हैश दृष्टिकोण के साथ तुलना करने पर एकमात्र नुकसान यह है कि एक हैश को परिवर्तित कोड का प्रतिनिधित्व नहीं करने की गारंटी दी जाती है, जबकि एक टैग को प्रतिस्थापित किया जा सकता है। शुक्र है कि यह शायद ही कभी होता है।

अपडेट करें:

इन दिनों जिस दृष्टिकोण का मैं उपयोग करता हूं वह एक GitHub द्वारा दी गई निर्भरता के लिए कॉम्पैक्ट अंकन है:

"dependencies": {
  "package": "github:username/package#commit"
}

जहां कमिट कुछ भी हो सकता है, जैसे टैग। GitHub के मामले में आप प्रारंभिक को छोड़ सकते हैं github:क्योंकि यह डिफ़ॉल्ट है।


संग्रह मोड कमिट के लिए भी काम करता है; उदाहरण के लिए, `यार्न ऐड github.com
github

सबसे साफ समाधान।
चार्ली बोडकिन

8

ऊपर @qubyte के लिए मेरा उदाहरण टिप्पणी कटा हुआ है, इसलिए यहां कुछ ऐसा है जिसे पढ़ना आसान है ...

ऊपर वर्णित विधि @surjikal शाखा के लिए काम करता है, लेकिन यह एक पेड़ के लिए काम नहीं करता था जिसमें मैं कोशिश कर रहा था।


संग्रह मोड कमिट के लिए भी काम करता है। उदाहरण के लिए, लाने @ a2fbf83

npm :

npm install  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

यार्न :

yarn add  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

प्रारूप :

 https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz


यहाँ वह पेड़ है जिसके लिए /archive/मोड की आवश्यकता होती है:

yarn add  https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz

संबंधित vuex प्रतिबद्ध के लिए


8

यह कमांड username/packageविशिष्ट git कमिट से npm पैकेज स्थापित करता है :

npm install https://github.com/username/package#3d0a21cc

यहाँ 3d0a21ccहैश हैश के पहले 8 अक्षर हैं।


3

मैं यहां एक समस्या का वर्णन करता हूं जिसे मैंने चलाने के दौरान सामना किया था npm install- पैकेज प्रकट नहीं होता है node_modules

मुद्दा यह था कि स्थापित पैकेज का nameमूल्य package.jsonआयातित पैकेज ( package.jsonमेरी परियोजना की कुंजी ) के नाम से अलग था ।

तो अगर आपका स्थापित परियोजना का नाम है some-package(इसके नाम का मूल्य package.json) तो package.jsonअपनी परियोजना में लिखें "some-package": "owner/some-repo#tag":।


काश मुझे आपका जवाब पहले मिला 😓 - मैंने अभी हल किया, उसी समस्या से मुझे कुछ समय के लिए संघर्ष करना पड़ा; और इस nameआवश्यकता का उल्लेख अक्सर नेट पर नहीं किया जाता है .. (ऐसा नहीं है कि मैं उस में, कम से कम) कर सकता हूं।
कामाफेदर

"अपने पैकेज की निर्भरता को अपने पैकेज में जोड़ें। पूरे स्कॉप्ड पैकेज के नाम को निर्दिष्ट करें।" - वास्तव में इस पर जोर नहीं दे रहा है: help.github.com/en/articles/…
Kamafeather

मुझे पता चला कि npm install --save git+https://<remote-github-repo-url>भविष्य में फिर से इस समस्या का सामना न करने का एक बहुत ही सुरक्षित तरीका है।
कामाफेदर

2

मुझे tfjs-core के दो संस्करण चलाने की आवश्यकता थी और पाया कि दोनों को स्थापित होने के बाद बनाने की आवश्यकता है।

package.json:

"dependencies": {
  "tfjs-core-0.14.3": "git://github.com/tensorflow/tfjs-core#bb0a830b3bda1461327f083ceb3f889117209db2",
  "tfjs-core-1.1.0": "git://github.com/tensorflow/tfjs-core#220660ed8b9a252f9d0847a4f4e3c76ba5188669"
}

फिर:

cd node_modules/tfjs-core-0.14.3 && yarn install && yarn build-npm && cd ../../
cd node_modules/tfjs-core-1.1.0  && yarn install && yarn build-npm && cd ../../

और अंत में, पुस्तकालयों का उपयोग करने के लिए:

import * as tf0143 from '../node_modules/tfjs-core-0.14.3/dist/tf-core.min.js';
import * as tf110 from '../node_modules/tfjs-core-1.1.0/dist/tf-core.min.js';

यह महान काम किया है, लेकिन सबसे निश्चित रूप से #hoodrat है


1
धन्यवाद, मैं इसे हर दूसरे कल्पनीय तरीके से आयात करने की कोशिश कर रहा हूं। मुझे आपके स्निपेट को यह महसूस करने के लिए देखना था कि मुझे फ़ाइल से सीधे आयात करना था।
विक्टर इवेन्स

1

यदि आप एक से अधिक मॉड्यूल के साथ ऐसा कर रहे हैं और संस्करणों पर अधिक नियंत्रण रखना चाहते हैं, तो आपको अपनी निजी npm रजिस्ट्री होने पर ध्यान देना चाहिए।

इस तरह से आप अपने मॉड्यूल को अपने निजी npm रजिस्ट्री पर प्रकाशित कर सकते हैं और पैकेज का उपयोग कर सकते हैं। सार्वजनिक प्रविष्टियों के लिए उसी तरह से प्रविष्टियों का उपयोग करें।

https://docs.npmjs.com/files/package.json#dependencies


सभी लिंक 404 हैं
सिरिल पोंटवीक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.