npm स्थापित और कांटा गिथब रेपो का निर्माण


126

यह बिलकुल नया प्रश्न नहीं है, लेकिन मैं अभी कुछ समय के लिए देख रहा हूँ और मुझे इसका हल खोजने में परेशानी हो रही है।

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

npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz

पहला मुझे इस तरह एक निर्देशिका देता है जिसमें कोई बिल्ड नहीं है। बस एक package.json, .npmignore, और कुछ मार्कडाउन फाइलें

-angular-translate
   .npmignore 
   .nvmrc
    CHANGELOG.md 
    package.json
    etc

दूसरा npm installमुझे पूर्ण रेपो देता है, लेकिन फिर से मुझे कमांड का उपयोग करने पर बिल्ड नहीं मिलता है npm install angular-translate। मैंने प्रीक्रिपशन स्क्रिप्ट चलाने का कुछ डिसकशन देखा है, लेकिन मुझे यकीन नहीं है कि सभी मॉड्यूल स्थापित करते समय ऐसा कैसे करें। मैंने भी npm रजिस्ट्री के लिए अपने स्वयं के मॉड्यूल के रूप में कांटा प्रकाशित करने की कोशिश की है, लेकिन फिर से मुझे कोई निर्माण नहीं मिला है, और मुझे यकीन नहीं है कि यह सही काम है ...

मैं इस विषय पर अपनी अज्ञानता के लिए माफी माँगता हूँ। मेरे पास npm के साथ बहुत बड़ी मात्रा में अनुभव नहीं है। इस मुद्दे पर कुछ प्रतिक्रिया प्राप्त करना पसंद करेंगे। ऐसा लगता है कि यह एक सामान्य पर्याप्त मुद्दा हो सकता है जब संशोधनों को पैकेज के स्रोत कोड में करने की आवश्यकता होती है? शायद कोई बेहतर उपाय है? आपकी सहायता के लिये पहले से ही धन्यवाद।

जवाबों:


140

कोशिश करें npm install <ghusername>/<repoName>, जहां <ghUsername>आपका GitHub उपयोगकर्ता नाम (बिना @) है और <repoName>रिपॉजिटरी का नाम है। इसे सही ढंग से स्थापित करना चाहिए। आप सबसे अधिक संभावना अपने में निर्भरता को बचाने के लिए स्थापित कमांड के साथ --saveया --save-devध्वज का उपयोग करना चाहते हैं package.json

यदि वह ठीक से काम नहीं कर रहा है, तो अपनी .npmignoreफ़ाइल की सामग्री की जाँच करें ।

यदि इंस्टॉल कमांड को लंबा समय लगता है तो घबराएं नहीं; git रिपॉजिटरी से इंस्टॉल करना npm रजिस्ट्री से इंस्टॉल करने की तुलना में धीमा है।


संपादित करें:

आपकी समस्या यह है कि आपके मामले में, dist/रेपो के लिए प्रतिबद्ध नहीं है (जब से यह है .gitignore)। वह वह जगह है जहाँ वास्तविक कोड रहता है। पैकेज से npm रजिस्ट्री में प्रकाशित होने से पहले dist/फाइलों से बनाया गया है src/, लेकिन dist/कभी भी रेपो के लिए प्रतिबद्ध नहीं है।

यह बदसूरत है, लेकिन इस मामले में आपको और फिर dist/से निकालना होगा .gitignore:

npm run build
git add .
git commit
git push

(सुनिश्चित करें कि आप पहले भाग चुके हैं npm install)

आप तब जीथब से स्थापित करने में सक्षम होना चाहिए।

postinstallस्क्रिप्ट का उपयोग करके ऐसा करने का एक और तरीका हो सकता है , लेकिन मुझे यकीन नहीं है कि यह संभव है; मैंने कभी कोशिश नहीं की।


2
हां, यह बहुत ज्यादा समाधान था। इसके अलावा एक npm स्थापित करना और GruntFile को थोड़ा संशोधित करना था, लेकिन यह काम कर गया। आपकी मदद के लिए धन्यवाद :)
ह्यूजेसमह

2
वहाँ वास्तव में कोई रास्ता नहीं है के अलावा अन्य unignore के साथ दूर करने के लिए? मैं मूल रेपो के लिए एक पीआर बनाना चाहता हूं, लेकिन साथ ही, क्या वह इसे पसंद नहीं कर रहा है?
का मोक

7
@KaMok मुझे लगता है कि एक और विकल्प है, में package.jsonअपने कांटा की फ़ाइल, के तहत scripts, नाम बदलने prepublishके लिए prepare। ऐसा लगता है कि जब ( npm installया npm install github:user_name/fork_name --saveयार्न के लिए एक ही) निष्पादित किया जाता है, तो यह भी चलता है कि prepareस्क्रिप्ट में क्या है । यह मान रहा है कि prepublishइस पैकेज की स्क्रिप्ट बिल्ड फाइलें बनाती है, जो आमतौर पर मामला है।
davidfrancisco

5
और अगर आपको एक विशिष्ट शाखा की आवश्यकता है,npm install <ghusername>/<repoName>#branchName
DrMeers

2
@RyanZim आप गलत हैं। जब तक यह ठीक से सेटअप हो तब तक git से इंस्टॉल करना बहुत अच्छा काम करता है। docs.npmjs.com/cli/install "पैकेज स्थापित किया जा रहा एक हैं, तो prepareस्क्रिप्ट, अपने dependenciesऔर devDependenciesस्थापित किया जाएगा, और इससे पहले पैकेज पैक और स्थापित किया गया है तैयार स्क्रिप्ट चलाने की जाएगी।"
कैमरन टाकलिंड

15

Npm 5 का उपयोग करने वालों के लिए अपडेट करें:

Npm @ 5 के रूप में, prepublishस्क्रिप्ट्स पदावनत हैं।

prepareबिल्ड चरणों के लिए और prepublishOnlyकेवल अपलोड के लिए उपयोग करें ।

मैंने "prepare": "npm run build"अपनी सभी समस्याओं को ठीक करने वाली लिपियों को जोड़ते हुए पाया ।


वह मेरे लिए भी काम करता है, (एक कांटा मैंने अभी बनाया है) - धन्यवाद! मुझे आश्चर्य है ... क्यों नहीं सभी संकुल डिफ़ॉल्ट रूप से इस स्क्रिप्ट कॉन्फिगर को शामिल करते हैं? क्या ऐसा इसलिए है क्योंकि पैकेज लेखक केवल npm से अपने पैकेज को स्थापित करने के उपयोग के मामले पर विचार करते हैं न कि इसे गिट रेपो से स्थापित करने के मामले में? तो वे सिर्फ मैन्युअल रूप से चलाने के लिए इस्तेमाल कर रहे हैं npm run buildऔर npm run publishऔर किसी भी समस्याओं या दर्द में नहीं चला जब तक कि वे किसी दिन रेपो के माध्यम से Git स्थापित करने का प्रयास?
टायलर रिक

9

Npmjs.com पर प्रकाशित कोड अक्सर पैकेज के लिए भंडार में नहीं होता है। पुस्तकालयों में सामान्य खपत के लिए संस्करणों में जावास्क्रिप्ट स्रोत फ़ाइलों को "संकलित" करना आम है। यह आमतौर पर npmjs.com पर प्रकाशित होता है।

यह इतना सामान्य है कि यह प्रकाशन ( ) से पहलेnpm स्वचालित रूप से "बिल्ड" चरण चलाने की सुविधा है । यह मूल रूप से कहा जाता था । ऐसा लगता है कि Npm ने सोचा कि स्क्रिप्ट को चलाना भी आसान होगा क्योंकि यह विकास के माहौल को शुरू करने का एक मानक तरीका था।npm publishprepublishprepublishnpm install

इससे समुदाय में कुछ बड़े भ्रम पैदा हो गए। इस बारे में गितुब पर बहुत लंबे मुद्दे हैं।

अंत में, पुराने व्यवहार को नहीं बदलने के प्रयास में, उन्होंने दो और स्वचालित स्क्रिप्ट जोड़ने का फैसला किया: prepublishOnlyऔर prepare

prepublishOnlyआप क्या उम्मीद करते हैं यह पर नहीं चलता है npm install। कई पैकेज मेंटेनर्स ने केवल आंख मूंद कर इसे बंद कर दिया।

लेकिन यह भी समस्या थी कि लोग पैकेज के संस्करणों को वितरित करने के लिए npmjs.com पर निर्भर नहीं होना चाहते थे। Git रिपॉजिटरी प्राकृतिक पसंद थे। हालाँकि यह आम बात है कि "संकलित" फ़ाइलों को नहीं करना चाहिए। वही prepareजोड़ा गया था जिसे संभालने के लिए ...

prepare सही तरीका है

यदि आपके पास स्रोत फ़ाइलों के साथ एक रिपॉजिटरी है, लेकिन इसका उपयोग करने के लिए एक "बिल्ड" कदम आवश्यक है,
prepareतो वही करें जो आप सभी मामलों में चाहते हैं (जैसा कि npm 4)।

prepare: भागो दोनों पहले से ही पैकेज पैक किया गया है और प्रकाशित किया गया है, स्थानीय पर npm installबिना किसी तर्क के, और गिट निर्भरता स्थापित करते समय।

आप अपने निर्माण पर निर्भरता भी डाल सकते हैं devDependenciesऔर वे prepareनिष्पादित होने से पहले स्थापित हो जाएंगे ।

यहाँ है एक उदाहरण मेरा एक पैकेज की इस पद्धति का उपयोग करता है।


के साथ समस्याएं .gitignore

इस विकल्प के साथ एक समस्या है जो कई लोगों को मिलती है। एक निर्भरता तैयार करते समय, Npm और यार्न केवल उन फ़ाइलों को रखेंगे जो कि filesअनुभाग में सूचीबद्ध हैं package.json

कोई भी filesसभी फ़ाइलों को शामिल किए जाने के बारे में चूक देख सकता है और सोच सकता है कि वे काम कर रहे हैं। क्या आसानी से याद किया जाता है कि है .npmignore ज्यादातर को ओवरराइड करता है filesनिर्देश और , अगर .npmignoreमौजूद नहीं है, .gitignoreबजाय प्रयोग किया जाता है।

इसलिए, यदि आपके पास अपनी निर्मित फ़ाइलें .gitignoreकिसी समझदार व्यक्ति की तरह सूचीबद्ध हैं , और कुछ भी नहीं करते हैं, prepareतो टूटी हुई प्रतीत होगी

यदि आप filesकेवल निर्मित फ़ाइलों को शामिल करते हैं या खाली जोड़ते हैं .npmignore, तो आप सभी सेट हो जाते हैं।

मेरी सिफारिश सेट files(या, उलटा करके .npmignore) ऐसी है कि वास्तव में प्रकाशित केवल फाइलें प्रकाशित पैकेज के उपयोगकर्ताओं द्वारा आवश्यक हैं। इम्हो, प्रकाशित पैकेजों में अप्रयुक्त स्रोतों को शामिल करने की आवश्यकता नहीं है।


मूल उत्तर: https://stackoverflow.com/a/57503862/4612476


1
PREPARE ने मेरे लिए POSTINSTALL.i की जगह सिर्फ npm रन बिल्ड की तैयारी की।
मिलिंद

6

@ रेनज़िम के उत्कृष्ट उत्तर को बंद करने के लिए, postinstallनिश्चित रूप से इसके लिए एक वैध विकल्प है।

या तो निम्न में से एक करें:

  1. स्क्रिप्ट के लिए पोस्ट स्थापना तत्व जोड़ने के लिए अपने कांटे हुए रेपो में package.json को अपडेट करें। यहां, संकलित आउटपुट (पसंदीदा) प्राप्त करने के लिए आपको जो कुछ भी आवश्यक है उसे चलाएं।
  2. अपने package.json को अपडेट करें, और एक postinstall जोड़ें जो जरूरी डायरेक्टरी को node_modules में अपडेट करता है।

यदि आपने किसी अन्य व्यक्ति को रिपॉजिटरी के लिए फोर्क किया है, तो यह समस्या को स्पष्ट करने के लिए एक मुद्दा उठाने के लायक हो सकता है कि उनके पैकेज को GitHub के माध्यम से स्थापित करना काम नहीं करता है क्योंकि यह स्क्रिप्ट बनाने के लिए आवश्यक साधन प्रदान नहीं करता है। वहां से, वे या तो पीआर को एक पोस्ट-इंस्टॉलेशन के साथ हल करने के लिए स्वीकार कर सकते हैं, या वे इसे अस्वीकार कर सकते हैं और आप # 2 कर सकते हैं।


क्या आप समझा सकते हैं या # 2 कैसे करें पर कोई संसाधन है? कौन सी आज्ञाओं को मुझे npm स्थापित करने के बाद चलाने की आवश्यकता है जब gitrepo में केवल src नहीं है
दानिय्येल

1
@ डैनियल माफी, मैं उस संदर्भ को याद करने की कोशिश कर रहा हूं जहां मैंने अतीत में ऐसा किया था। मुझे लगता है कि # 2 से मेरा मतलब आपके मुख्य पैकेजों में पोस्ट स्थापना कदम जोड़ना है। ऐसा लगता है कि शीर्ष उत्तर के लिए कदम चलेंगे, इसलिए "postinstall": "cd node_modules/scrape-twitter/ && npm install && npm run build"यह सुनिश्चित करने की तर्ज पर कुछ सुनिश्चित करें कि आपके आवेदन के चलने से पहले पैकेज आपको परेशान करता है। जैसा कि कहा गया है, हालांकि, मैं अपने स्वयं के उपयोगकर्ता के लिए रेपो को त्यागने के दृष्टिकोण को प्राथमिकता देता हूं, पोस्ट पैकेज को स्वयं जोड़ रहा हूं, और अपने आवेदन में इसका उपयोग कर रहा हूं।
माइक बी

मुझे लगता है कि तैयारी में शामिल होने को प्राथमिकता दी जानी चाहिए (@ साइमन का जवाब), क्योंकि अगर npm से स्थापित किया जाता है, तो आपको किसी भी अतिरिक्त भवन को करने की आवश्यकता नहीं होगी क्योंकि इसमें पहले से ही एक डिस्ट / डिअर शामिल होना चाहिए। Docs.npmjs.com/misc/scripts देखें : "तैयार करें: दोनों पैक को पहले से ही पैक कर पैक करें और प्रकाशित करें, ... और गिट निर्भरता स्थापित करते समय"
टायलर रिक

postinstallसही समाधान का एक कदम छोटा है। बस उपयोग करें prepare। यह 2020 है।
कैमरन टैकलिंड

2

बस कमांड का उपयोग करें npm install git+https://git@github.com/myRepo/angular-translate.git। धन्यवाद।

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