हमें वैश्विक और स्थानीय स्तर पर गुलाल लगाने की आवश्यकता क्यों है?


292

गुलप के बारे में 2 पुस्तिकाओं में कहा गया है कि मुझे पहले विश्व स्तर पर (झंडे के साथ) और फिर स्थानीय स्तर पर एक बार फिर से गुलाल लगाने की जरूरत है। मैं इसकी क्या जरूरत है?


12
प्रोजेक्ट का अपना "गेटिंग स्टार्टेड" पेज एक ही बात कहता है। (यह भी क्यों नहीं कहता है।)
टीजे क्राउडर

11
काश एनपीएम वैश्विक रूप से स्थापित एक निर्भरता पैकेज का उपयोग कर सकता है जो स्थानीय पैकेज के समान संस्करण है। प्रत्येक प्रोजेक्ट डायरेक्टरी के लिए 5MB का ग्लूप सामान: /
Ciantic

@Ciantic कोई गारंटी नहीं देता है, लेकिन ... flow stackoverflow.com/a/25879563/444255
फ्रैंक Nocke

जवाबों:


238

एक उपकरण को विश्व स्तर पर स्थापित करते समय इसका उपयोग एक उपयोगकर्ता द्वारा कमांड लाइन उपयोगिता के रूप में कहीं भी किया जा सकता है, जिसमें नोड परियोजनाएं भी शामिल हैं। नोड प्रोजेक्ट के लिए वैश्विक इंस्टॉल खराब हैं क्योंकि वे परिनियोजन को अधिक कठिन बनाते हैं।

एनपीएम 5.2+

npxउपयोगिता के साथ बंडल npm 5.2को हल करती है इस समस्या। इसके साथ आप स्थानीय रूप से स्थापित उपयोगिताओं जैसे वैश्विक रूप से स्थापित उपयोगिताओं को लागू कर सकते हैं (लेकिन आपको कमांड को शुरू करना होगा npx)। उदाहरण के लिए, यदि आप स्थानीय स्तर पर स्थापित करना चाहते हैं, तो आप eslintऐसा कर सकते हैं:

npx eslint .

एनपीएम <5.2

जब एक में इस्तेमाल scriptअपने package.json के क्षेत्र, npmखोज node_modulesऔर साथ ही विश्व स्तर पर स्थापित मॉड्यूल के रूप उपकरण के लिए, इसलिए स्थानीय स्थापित पर्याप्त है।

तो, अगर आप अपने पैकेज में खुश हैं (

"devDependencies": {
    "gulp": "3.5.2"
}
"scripts": {
    "test": "gulp test"
}

आदि और npm run testउसके बाद आपको वैश्विक इंस्टॉल की आवश्यकता नहीं होनी चाहिए।

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

परिशिष्ट:

ऐसा प्रतीत होता है कि विश्व स्तर पर उपयोग किए जाने पर कुछ असामान्य व्यवहार होता है। जब वैश्विक स्थापित के रूप में उपयोग किया जाता है, तो नियंत्रण को पारित करने के लिए स्थानीय रूप से स्थापित गुलप के लिए गुलप दिखता है। इसलिए एक गल्प ग्लोबल इंस्‍टॉल को काम करने के लिए गल्‍प लोकल इंस्‍टॉल की जरूरत होती है। ऊपर दिया गया जवाब अभी भी हालांकि खड़ा है। स्थानीय इंस्टॉल हमेशा वैश्विक इंस्टॉल के लिए बेहतर होते हैं।


3
हां, लेकिन क्या जब आपके पास इंटरनेट नहीं है? यदि यह वैश्विक रूप से स्थापित नहीं है तो आप गुलाल का उपयोग कैसे कर सकते हैं?
IGRACH

3
@IGRACH उपरोक्त स्क्रिप्ट में इंटरनेट कनेक्शन का उपयोग नहीं किया गया है। यदि आप पैकेज में एक स्क्रिप्ट फ़ील्ड का उपयोग किए बिना एक ही कार्य करना चाहते हैं ./node_modules/.bin/gulp। तो, तो उपयोग करें ।
qubyte

1
मैंने उपनामों को परिभाषित किया है gulpऔर coffeeइसलिए कमांड मेरे नोड प्रोजेक्ट रूट (जैसे। alias gulp="node_modules/.bin/gulp") से काम करते हैं । यदि आवश्यक हो और वैश्विक / स्थानीय संस्करण विरोध न हो तो इस तरह से कमांड का उपयोग करना आसान है।
vesse

धन्यवाद @qubyte! मुझे लगता है कि इसे स्थानीय स्तर पर स्थापित करना सामान्य तौर पर एक अच्छा अभ्यास है। मुझे एक और सवाल मिला, तो आशा है कि आप मुझे अपना दिमाग साफ करने में मदद कर सकते हैं। मैंने इसे विश्व स्तर पर स्थापित करने का प्रयास किया क्योंकि स्थानीय रूप से इसे स्थापित किए बिना गुलप के दस्तावेज़ का सुझाव दिया गया था। इसलिए जब मैं चलाने की कोशिश करता हूं gulp, तो यह मुझे निम्न त्रुटि संदेश देता है Local gulp not found in ...। जहाँ तक मैं समझता हूँ, इसे पहले स्थानीय node_modules को देखना चाहिए और अगर नहीं मिला है तो इसे विश्व स्तर पर स्थापित मॉड्यूल में देखना चाहिए, क्या यह नहीं है? धन्यवाद!
येलन

1
एक परिशिष्ट जोड़ा गया। उम्मीद है कि गल्प की विचित्रता को कवर करता है।
qubyte

82

TLDR; यहाँ क्यों है :

इसका कारण यह है क्योंकि आपके स्थानीय रूप से स्थापित संस्करण का उपयोग करके अपने gulpको चलाने की कोशिश करता है , यहां देखें । इसलिए गल्प की एक वैश्विक और स्थानीय स्थापना का कारण।gulpfile.jsgulp

अनिवार्य रूप से, जब आप gulpस्थानीय रूप से स्क्रिप्ट स्थापित करते हैं, तो यह आपके अंदर नहीं है PATHऔर इसलिए आप केवल gulpकमांड टाइप नहीं कर सकते हैं और शेल को खोजने की उम्मीद कर सकते हैं । वैश्विक रूप से इसे स्थापित करने से gulpस्क्रिप्ट आपके पास पहुंच जाती है PATHक्योंकि वैश्विक node/bin/निर्देशिका आपके मार्ग पर सबसे अधिक संभावना है।

हालाँकि, अपने स्थानीय निर्भरता का सम्मान करने के लिए, gulpअपने स्थानीय रूप से स्थापित संस्करण को चलाने के लिए उपयोग करेगा gulpfile.js


1
~ / बिन प्रति उपयोगकर्ता बायनेरिज़ के लिए एक यूनिक्स सम्मेलन है, और कई ओएस पर डिफ़ॉल्ट रूप से पेट में है। गुलप वहां से अपने बाइनरी को लिंक करने में सक्षम होना चाहिए।
मिकमेकाना

2
दूसरे शब्दों में कहा कि आपके विश्व स्तर पर स्थापित gulpपैकेज node_modules/.bin/gulpपथ में डालने के लिए आवश्यक है। स्टोरेज सस्ता है लेकिन सिम को अनुकरण करने के लिए एमबी को फेंकना आईएमओ शुद्ध ढिलाई है।
ntd

79

आप gulpस्थानीय स्तर पर स्थापित विश्व स्तर के साथ लिंक कर सकते हैं

npm link gulp

1
मुझे पता है कि स्थानीय इंस्टॉल का उपयोग करना सबसे अच्छा है, लेकिन ऐसे मामले हो सकते हैं जहां आप इसे स्थापित नहीं कर सकते हैं या बस नहीं करना चाहते हैं (कल्पना करें कि आपके समर्पित CI सर्वर ने विश्व स्तर पर स्थापित किया है और आप इसे हर प्रतिबद्ध पर पुनर्स्थापित कर रहे हैं) । वैसे भी, उल्लेख करने के लिए +1 npm link
gion_13

1
आपने वहां क्या किया वह मैने देखा। यह चालाकी है।
डीटेल

यह प्रश्न का उत्तर देने का प्रयास नहीं करता है
मिकेमाकेन

1
नहीं, यह इसे अमान्य करता है।
बेरीस्लाव लोपैक

67

प्रश्न " हमें वैश्विक और स्थानीय स्तर पर गुलाल लगाने की आवश्यकता क्यों है? " को निम्नलिखित दो प्रश्नों में विभाजित किया जा सकता है:

  1. अगर मैंने पहले से ही इसे विश्व स्तर पर स्थापित किया है तो मुझे स्थानीय रूप से गुलाल लगाने की आवश्यकता क्यों है?

  2. अगर मैंने पहले ही इसे स्थानीय रूप से स्थापित कर लिया है, तो मुझे विश्व स्तर पर गुलाल लगाने की आवश्यकता क्यों है?

कई अन्य लोगों ने अलग-थलग पड़ने वाले सवालों के उत्कृष्ट उत्तर दिए हैं, लेकिन मुझे लगा कि एकीकृत उत्तर में जानकारी को समेकित करना फायदेमंद होगा।

अगर मैंने पहले से ही इसे विश्व स्तर पर स्थापित किया है तो मुझे स्थानीय रूप से गुलाल लगाने की आवश्यकता क्यों है?

स्थानीय रूप से गल्प स्थापित करने का औचित्य कई कारणों से शामिल है:

  1. अपनी परियोजना की निर्भरता को शामिल करना स्थानीय रूप से उपयोग किए जाने वाले गुलप (या अन्य निर्भरता) के संस्करण को सुनिश्चित करता है जो मूल रूप से इच्छित संस्करण है।
  2. आवश्यकता () का उपयोग करते समय नोड डिफ़ॉल्ट रूप से वैश्विक मॉड्यूल पर विचार नहीं करता है () (जिसे आपको अपनी स्क्रिप्ट में शामिल करने की आवश्यकता है)। अंततः, इसका कारण यह है कि वैश्विक मॉड्यूल्स के पथ को NODE_PATH में डिफ़ॉल्ट रूप से नहीं जोड़ा गया है।
  3. नोड विकास टीम के अनुसार, स्थानीय मॉड्यूल तेजी से लोड होते हैं। मैं यह नहीं कह सकता कि यह क्यों है, लेकिन यह नोड के उत्पादन (यानी रन-टाइम निर्भरता) के विकास (यानी देव निर्भरता) की तुलना में अधिक प्रासंगिक प्रतीत होगा। मुझे लगता है कि यह एक वैध कारण है क्योंकि कुछ लोग इस बात की परवाह कर सकते हैं कि स्थानीय बनाम वैश्विक मॉड्यूल को लोड करने में जो भी मामूली गति का लाभ प्राप्त होता है, लेकिन इस कारण से अपनी भौं ऊपर उठाने के लिए स्वतंत्र महसूस करें।

अगर मैंने पहले ही इसे स्थानीय रूप से स्थापित कर लिया है, तो मुझे विश्व स्तर पर गुलाल लगाने की आवश्यकता क्यों है?

  1. विश्व स्तर पर गल्प स्थापित करने का औचित्य वास्तव में आपके सिस्टम पथ के भीतर स्वचालित रूप से पाए जाने वाले gulp निष्पादन योग्य होने की सुविधा है।

स्थानीय रूप से इंस्टॉल करने से बचने के लिए आप उपयोग कर सकते हैं npm link [package], लेकिन लिंक कमांड के साथ-साथ install --globalकमांड --save-devविकल्प का समर्थन नहीं करता है जिसका अर्थ है कि विश्व स्तर पर गुलाल को स्थापित करने का एक आसान तरीका नहीं है और फिर आसानी से जो भी संस्करण जोड़ना है आपकी स्थानीय package.json फ़ाइल।

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


7
पूरे इंटरनेट पर पहला व्यक्ति होने के लिए +1 यह इंगित करने के लिए कि प्रश्न के दो बिंदु हैं। हर जगह हर कोई बस जवाब देता है "मुझे विश्व स्तर पर गुलाल लगाने की आवश्यकता क्यों है अगर मैंने पहले ही इसे स्थानीय रूप से स्थापित किया है?" जब मैं जानना चाहता था कि "मुझे स्थानीय रूप से स्थापित करने की आवश्यकता क्यों है अगर मैंने इसे पहले ही विश्व स्तर पर स्थापित कर लिया है?"।
नाथन जेबी

10
तथ्य यह है कि इस प्रश्न को इस तरह के विस्तृत विवरण की आवश्यकता है, इसका मतलब है कि यह काम करने का बहुत तार्किक तरीका नहीं है। प्रत्येक प्रोजेक्ट के लिए एक ही टूल को बार-बार इंस्टॉल करना आवश्यक नहीं होना चाहिए।
कोकोडोको

4
आपका उत्तर इतना सुंदर है। मेरा 80% swearwords होता, क्योंकि ऐसा लगता है कि यह ******* बेवकूफ है। टूलींग परिप्रेक्ष्य से स्थानीय इंस्टॉलेशन सिद्धांत शायद सही है, लेकिन एक ओएस परिप्रेक्ष्य और एक पैकेज प्रबंधकों के दृष्टिकोण से यह इतना पागल है कि मुझे इसके लिए शब्द नहीं मिल सकते हैं। NPM / gulp लोग क्या दवाएं लेते हैं?!? यदि कोई असहमत है, तो कृपया पढ़ें कि कैसे सिस्टम पैकेज मैनेजर जैसे dpkg, yum, pacman और co। काम।
जेपीजेड

2
@ जेपीजेड यह केवल सुपर अजीब होने के कारण गुलदस्ता है, लेकिन नोड या एनपीएम में कुछ भी नहीं है। और परियोजना में गल्प के विशिष्ट संस्करणों को रखना केवल तभी समझ में आता है जब गल्प लोग नियमित रूप से या किसी अन्य चीज़ पर पैच संस्करणों को तोड़ते हैं, अन्य बिल्ड टूल आमतौर पर एक वैश्विक इंस्टॉल होते हैं। लेकिन आह ठीक है। बस यहां शपथ ग्रहण के लिए।
स्टॉफ

2
यह वास्तव में एक गैर-मुद्दा है क्योंकि समुदाय केवल यार्न का उपयोग करने के लिए आगे
डेरेक ग्रीर

8

यदि node_modulesआपके स्थानीय इंस्टालेशन में फ़ोल्डर आपके पास है तो तकनीकी रूप से आपको इसे विश्व स्तर पर स्थापित करने की आवश्यकता नहीं है PATH। आम तौर पर यह एक अच्छा विचार नहीं है।

वैकल्पिक रूप से यदि npm testसंदर्भ है gulpतो आप बस टाइप कर सकते हैं npm testऔर यह स्थानीय गल्प चलाएगा।

मैंने कभी भी विश्व स्तर पर गुलाल नहीं लगाया है - मुझे लगता है कि यह खराब रूप है।


3
इसे अपने पथ पर रखने से बेहतर तरीका यह है कि आप एनपीएम लिपियों का उपयोग करें
Jay

2

मुझे यकीन नहीं है कि अगर हमारी समस्या सीधे तौर पर केवल स्थानीय रूप से स्थापित करने से संबंधित थी। लेकिन हमें खुद पर निर्भरता का एक समूह स्थापित करना था। इससे एक "विशाल" पैकेज बन जाता है। Json और हमें यकीन नहीं है कि यह वास्तव में केवल स्थानीय रूप से गल्प स्थापित करने के लिए एक महान विचार है। हमें अपने निर्माण के माहौल के कारण ऐसा करना पड़ा। लेकिन मैं विश्व स्तर पर गुलाल लगाने की सलाह नहीं दूंगा अगर यह बिल्कुल जरूरी नहीं है। हमें निम्नलिखित ब्लॉग-पोस्ट में वर्णित समान समस्याओं का सामना करना पड़ा

इन समस्याओं में से कोई भी हमारे डेवलपर्स के लिए उनकी स्थानीय मशीनों पर उत्पन्न नहीं होती है क्योंकि वे सभी वैश्विक रूप से स्थापित हैं। निर्माण प्रणाली पर हमें वर्णित समस्याएं थीं। अगर किसी को दिलचस्पी है तो मैं इस मुद्दे पर गहराई से गोता लगा सकता हूं। लेकिन अभी मैं सिर्फ यह उल्लेख करना चाहता था कि यह केवल स्थानीय रूप से गल्प स्थापित करने का आसान रास्ता नहीं है।


हां, कृपया, इस मुद्दे पर गहराई से गोता लगाएँ।
kenorb

1

सिर्फ इसलिए कि मैंने इसे यहाँ नहीं देखा है, यदि आप MacOS या लिनक्स पर हैं, तो मेरा सुझाव है कि आप इसे अपने PATH (अपने bashrc आदि में) में जोड़ें:

node_modules/.bin

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

एक बार ऐसा करने के बाद, मैंने कभी भी विश्व स्तर पर एक मॉड्यूल स्थापित नहीं किया है।

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