क्या मुझे Heroku पर एक नोड.जेएस ऐप बनाते समय नोड_मॉड्यूल में जांच करनी चाहिए?


368

मैंने यहाँ Heroku पर नोड.js के लिए मूल आरंभ करने के निर्देशों का पालन किया:

https://devcenter.heroku.com/categories/nodejs

ये निर्देश आपको एक .गितिग्नोर नोड_मॉड्यूल्स बनाने के लिए नहीं कहते हैं, और इसलिए इसका अर्थ है कि नोड_मॉड्यूल्स को जांचना चाहिए। जब मैं git में nm_modules शामिल करता हूं, तो मेरे द्वारा शुरू किया गया एप्लिकेशन सही तरीके से चला।

जब मैंने निम्न उन्नत उदाहरण का अनुसरण किया:

https://devcenter.heroku.com/articles/realtime-polyglot-app-node-ruby-mongodb-socketio https://github.com/mongolab/tractorpush-server (source)

इसने मुझे .itignore से node_modules जोड़ने का निर्देश दिया। इसलिए मैंने git से नोड_मॉड्यूल्स को हटा दिया, इसे .gitignore में जोड़ दिया, फिर पुन: परिनियोजित किया गया। इस बार की तरह तैनात विफल:

-----> Heroku receiving push
-----> Node.js app detected
-----> Resolving engine versions
       Using Node.js version: 0.8.2
       Using npm version: 1.0.106
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
       Error: npm doesn't work with node v0.8.2
       Required: node@0.4 || 0.5 || 0.6
           at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
           at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
           at Module._compile (module.js:449:26)
           at Object.Module._extensions..js (module.js:467:10)
           at Module.load (module.js:356:32)
           at Function.Module._load (module.js:312:12)
           at Module.require (module.js:362:17)
           at require (module.js:378:17)
           at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
           at Module._compile (module.js:449:26)
       Error: npm doesn't work with node v0.8.2
       Required: node@0.4 || 0.5 || 0.6
           at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
           at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
           at Module._compile (module.js:449:26)
           at Object.Module._extensions..js (module.js:467:10)
           at Module.load (module.js:356:32)
           at Function.Module._load (module.js:312:12)
           at Module.require (module.js:362:17)
           at require (module.js:378:17)
           at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
           at Module._compile (module.js:449:26)
       Dependencies installed
-----> Discovering process types
       Procfile declares types -> mongod, redis, web
-----> Compiled slug size is 5.0MB
-----> Launching... done, v9

"हेरोकू पीएस" चलाना दुर्घटना की पुष्टि करता है। ठीक है, कोई समस्या नहीं है, इसलिए मैंने परिवर्तन को वापस ले लिया, वापस git रिपॉजिटरी में नोड_मॉड्यूल जोड़ें और इसे .ignignore से हटा दिया। हालाँकि, श्रद्धा करने के बाद भी मुझे तैनाती पर वही त्रुटि संदेश मिलता है, लेकिन अब एप्लिकेशन फिर से सही तरीके से चल रहा है। चल रहा है "heroku ps" मुझे बताता है कि आवेदन चल रहा है।

तो मेरा सवाल यह है कि ऐसा करने का सही तरीका क्या है? नोड_मॉड्यूल शामिल करें या नहीं? और रोलबैक करने पर मुझे अभी भी त्रुटि संदेश क्यों मिल रहा है? मेरा अनुमान है कि गिट रिपॉजिटरी हरकोक की तरफ एक बुरी स्थिति में है?


10
मैं हरोकू में नोड भाषा का मालिक हूं और इसका उत्तर सरल है: नहीं node_modules। हरोकू ऐप्स की जांच न करें ।
hunterloftis

@hunterloftis 'Do node_modules की जांच नहीं करने के लिए ' या 'node_modules की जांच नहीं करते में '? स्पष्ट करने के लिए, हेरोकू में नोड भाषा के मालिक के रूप में, क्या आप चाहते हैं कि हम अपने git पुश के माध्यम से अपना पूरा नोड_मॉडल अपलोड करें या नहीं? मैं बैंडविड्थ कचरे और इस तथ्य के कारण नहीं पसंद करता हूं कि हरोकू उन्हें मेरे गिट पुश के बैकएंड पर मिलेगा; हालाँकि, मुझे अपने ऐप को लोड करने के लिए हेरोकू प्राप्त करने के लिए मैन्युअल रूप से अपने नोड_मॉड्यूल में फ़ाइलों को संपादित करना होगा। इसलिए मुझे नोड_मॉड्यूल्स को पूरे मॉड्यूल को नजरअंदाज करना पड़ा, जिसमें काम करने के लिए मेरी संपादित फाइल शामिल थी।
ZStoneDPM

जवाबों:


400

दूसरा अपडेट

एफएक्यू अब उपलब्ध नहीं है।

के प्रलेखन से shrinkwrap:

यदि आप एक पैकेज में शामिल विशिष्ट बाइट्स को बंद करना चाहते हैं, उदाहरण के लिए, एक तैनाती या निर्माण को पुन: पेश करने में सक्षम होने के लिए 100% विश्वास है, तो आपको स्रोत नियंत्रण में अपनी निर्भरता की जांच करनी चाहिए, या कुछ अन्य तंत्र का पीछा करना चाहिए जो सत्यापित कर सकते हैं संस्करणों के बजाय सामग्री।

शैनन और स्टीवन ने पहले इसका उल्लेख किया था लेकिन मुझे लगता है कि यह स्वीकृत उत्तर का हिस्सा होना चाहिए।


अपडेट करें

नीचे की सिफारिश के लिए सूचीबद्ध स्रोत को अपडेट किया गया है । वे अब node_modulesफ़ोल्डर को प्रतिबद्ध होने की अनुशंसा नहीं कर रहे हैं ।

आमतौर पर, नहीं। अपने संकुल के लिए निर्भरता को हल करने के लिए npm को अनुमति दें।

आपके द्वारा पोस्ट किए जाने वाले पैकेजों के लिए, जैसे कि वेबसाइट और ऐप, आपको अपने पूर्ण निर्भरता के पेड़ को बंद करने के लिए npm सिक्रेटवैप का उपयोग करना चाहिए:

https://docs.npmjs.com/cli/shrinkwrap


मूल पोस्ट

संदर्भ के लिए, npm FAQ आपके प्रश्न का स्पष्ट उत्तर देता है:

आपके द्वारा पोस्ट की जाने वाली चीजों जैसे कि वेबसाइट और एप्स के लिए nit_modules को चेक में देखें। पुस्तकालयों और पुन: उपयोग किए जाने वाले मॉड्यूल के लिए नोड में नोड_मॉड्यूल्स की जांच न करें। अपने देव परिवेश में निर्भरता का प्रबंधन करने के लिए npm का उपयोग करें, लेकिन आपकी तैनाती लिपियों में नहीं।

और इसके लिए कुछ अच्छे तर्क के लिए, इस पर मिकाइल रोजर्स की पोस्ट पढ़ें ।


स्रोत: https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git


13
यह सही नहीं है - वास्तव में यह बहुत बुरा विचार है। यदि आप विंडोज पर विकसित कर रहे हैं, तो लिनक्स पर तैनात हैं, जब आप तैनाती करते हैं तो आपको नोड_मॉडल को फिर से बनाना होगा। जिसका अर्थ है - अराजकता। संशोधित फ़ाइलों के बहुत सारे, और पता नहीं क्या करना है।
user3690202

8
यह संभव नहीं है - हमारे कुछ देवता लक्ष्यीकरण विंडो विकसित करते हैं, अन्य लिनक्स को लक्षित करते हैं, लेकिन समान कोड आधार। सबसे अच्छा तरीका नोड मॉड्यूल - उफ़ नहीं करना होगा।
user3690202

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

16
@ कोस्टिया हमारे उपयोग का मामला काफी सामान्य है। हम स्वयंसेवक हैं और अपनी मशीनों का उपयोग कर रहे हैं, कंपनी वाले नहीं। खुले स्रोत के लिए एक बहुत ही सामान्य स्थिति की तरह लगता है।
एडम

4
@ अदम्य रूप से, क्या आप संकलित की जा रही फाइलों को जोड़ सकते हैं .gitignore? इस तरह, स्रोत जीआईटी में है, और कोई भी संकलित घटक नहीं हैं, इसी तरह ग्रन्ट और गल्प प्रोजेक्ट में फ़ोल्डर कैसे distया outputफ़ोल्डर में हैं।
कोस्टिया जूल

160

Git में जांच करने के साथ मेरी सबसे बड़ी चिंता यहnode_modules है कि सड़क से 10 साल नीचे, जब आपका उत्पादन अनुप्रयोग अभी भी उपयोग में है, तो npm आसपास नहीं हो सकता है। या npm दूषित हो सकता है; या रखवाले उन पुस्तकालय को हटाने का निर्णय ले सकते हैं जिन पर आप उनके भंडार से भरोसा करते हैं; या आपके द्वारा उपयोग किए जाने वाले संस्करण को छंटनी की जा सकती है।

इसे मावेन जैसे रेपो प्रबंधकों के साथ कम किया जा सकता है, क्योंकि आप हमेशा अपने स्वयं के स्थानीय नेक्सस या आर्टिफैक्ट का उपयोग कर सकते हैं जो आपके द्वारा उपयोग किए जाने वाले पैकेजों के साथ दर्पण बनाए रख सकते हैं। जहां तक ​​मैं समझता हूं, ऐसी प्रणाली npm के लिए मौजूद नहीं है। वही क्लाइंट-साइड लाइब्रेरी प्रबंधकों के लिए जाता है जैसे बोवर और जामज।

यदि आपने फ़ाइलों को अपने स्वयं के गिट रेपो के लिए प्रतिबद्ध किया है, तो आप जब चाहें तब उन्हें अपडेट कर सकते हैं, और आपके पास दोहराने योग्य बिल्ड का ज्ञान है और यह ज्ञान कि आपका ऐप कुछ तृतीय-पक्ष कार्रवाई के कारण नहीं टूटेगा।


10
आज बहुत सारे विकल्प: नेक्सस ( समस्याएं ।sonatype.org/browse/NEXUS-5852 ), आर्टिफैक्ट ( jfrog.com/jira/browse/RTFACT-5143 ), npm_lazy ( github.com/mixu/npm_lazy ), npm-lazy- दर्पण ( npmjs.org/package/npm-lazy-mirror ), आदि
जोहान

4
Npmjs से उद्धरण अक्सर पूछे जाने वाले प्रश्न: "यदि आप npm पारिस्थितिकी तंत्र के आधार पर पागल हैं, तो आपको एक निजी npm दर्पण या एक निजी कैश चलाना चाहिए।" मुझे लगता है कि आप जिस मुद्दे का जिक्र कर रहे हैं, यह बात सही है?
तैलान


2
Npm रात को गायब होने वाला नहीं है, इसलिए लाभ वास्तव में आपके प्रतिबद्ध इतिहास और आपके विशाल बंडल आकार में स्पष्टता के नुकसान के साथ अच्छी तरह से जोड़ी नहीं है। यदि कोई ऐसा एप्लिकेशन बना रहा है जो उन्हें लगता है कि 10 साल में भी सक्रिय रहेगा, तो यह उम्मीद करना उचित होगा कि उसे रास्ते में बहुत अधिक रखरखाव प्राप्त होगा। एनपीएम आउटेज के बारे में बिंदु एक बेहतर तर्क है, हालांकि, स्रोत के लिए प्रतिबद्ध होने की तुलना में उस जोखिम को कम करने के बेहतर तरीके हैं।
सैम पी

3
यदि आप अपनी निर्भरता नहीं करते हैं, तो भी सड़क का एक महीना खतरनाक है (अधिमानतः एक अलग भंडार में)। जैसा कि मैंने एक सुबह पाया जब मैंने अपनी एक परियोजना को क्लोन किया और पाया कि एक पैकेज संस्करण npm से हटा दिया गया था। मैंने काम करने और फिर से निर्माण करने के लिए npm अद्यतन प्राप्त करने के लिए कैस्केडिंग निर्भरता के अपने सभी संस्करणों को बदलते हुए आधा दिन बिताया।
रिचर्ड

67

आप चाहिए शामिल नहीं node_modules में अपने .gitignore(या बल्कि आप को शामिल करना चाहिए node_modules अपने स्रोत में Heroku लिए तैनात किए गए)।

यदि node_modules:

  • मौजूद है तो npm installउन वंचित कामों का उपयोग करेगा और किसी भी द्विआधारी निर्भरता के साथ पुनर्निर्माण करेगा npm rebuild
  • मौजूद नहीं है तो npm installसभी निर्भरताओं को स्वयं लाना होगा जो स्लग संकलन चरण में समय जोड़ता है।

इन सटीक चरणों के लिए Node.js बिल्डपैक स्रोत देखें

हालाँकि, मूल त्रुटि के संस्करणों के बीच एक असंगति प्रतीत होती है npmऔर nodeइस प्रकार की परिस्थितियों से बचने के लिए इस गाइड के अनुसार enginesअपने अनुभाग को हमेशा स्पष्ट रूप से सेट करना एक अच्छा विचार है:packages.json

{
  "name": "myapp",
  "version": "0.0.1",
  "engines": {
    "node": "0.8.x",
    "npm":  "1.1.x"
  }
}

यह देव / ठेस समता सुनिश्चित करेगा और भविष्य में ऐसी स्थितियों की संभावना को कम करेगा।


मदद के लिए धन्यवाद रयान। कि मुझे npm संस्करण त्रुटि पिछले मिली, लेकिन अब यह redis संकुल संकलित करते समय विफल रहता है। त्रुटि संदेश "OSError: [Errno 2] ऐसी कोई फ़ाइल या निर्देशिका नहीं है: '/ Users / Jason / tastmade / tastebase / node_modules / redis-url / node_modules / red_nod / node_modules / Charteredis / build'"। ऐसा लगता है कि यह हरकोल सर्वर पर मेरे स्थानीय बॉक्स से एक पथ का उपयोग कर रहा है। क्या मुझे .gitignore में जोड़ने के लिए नोड_मॉड्यूल्स में कुछ फाइलें हैं?
जेसन ग्रिफिन

मुझे यकीन नहीं है कि उस विशेष पुस्तकालय के साथ क्या हो रहा है, लेकिन मैं इस मामले में नोड से नोड_मॉडल को बाहर करने की कोशिश करूंगा और यह देखूंगा कि क्या मदद करता है (एनपीएम को सब कुछ खुद लाने और एक ताजा निर्माण वातावरण सुनिश्चित करने के लिए)।
रयान डेगले

@RyanDaigle बेस्ट प्रैक्टिस अब (नवंबर 2013) दोनों npm ( npmjs.org/doc/… ) और हेरोकू ( devcenter.heroku.com/articles/… ) द्वारा अनुशंसित है जिसे git में n_modules में जांचना है। क्या आप अपना उत्तर अपडेट करेंगे (क्योंकि इसमें शीर्ष बिलिंग है)?
टिम डिगिन्स

हरोकू में जाने के दौरान आपको आउटपुट "-----> कैशिंग नोड_मॉडल निर्देशिका भविष्य के निर्माण के लिए मिलेगा"। यह भविष्य के स्लग संकलन को छोटा करना है।
ph3nx

मेरे पास एक समस्या है कि नोड_मॉडल फ़ाइलपथ प्रतिबद्ध होने के लिए बहुत लंबा है। Git फ़ाइलों को खोजने के लिए अभ्यस्त।
कोड फिरौन

22

मैं इस टिप्पणी के बाद इसे छोड़ने जा रहा था: क्या मुझे Heroku पर एक नोड.जेएस ऐप बनाते समय नोड_मॉड्यूल में जांच करनी चाहिए?

लेकिन स्टैकओवरफ्लो इसे अजीब स्वरूप दे रहा था। यदि आपके पास एक जैसी मशीनें नहीं हैं और नोड_मॉड्यूल्स में जाँच कर रहे हैं, तो देशी एक्सटेंशन पर एक .ignignore करें। हमारा .गरिग्नोर ऐसा दिखता है:

# Ignore native extensions in the node_modules folder (things changed by npm rebuild)
node_modules/**/*.node
node_modules/**/*.o
node_modules/**/*.a
node_modules/**/*.mk
node_modules/**/*.gypi
node_modules/**/*.target
node_modules/**/.deps/
node_modules/**/build/Makefile
node_modules/**/**/build/Makefile

पहले सब कुछ जाँच कर इसका परीक्षण करें, और फिर एक और देव निम्न कार्य करें:

rm -rf node_modules
git checkout -- node_modules
npm rebuild
git status

सुनिश्चित करें कि कोई फ़ाइल नहीं बदली गई।


बस यह जोड़ा। मेरा मुद्दा हल किया। विंडोज़ गिथब 7000+ से अधिक नोड_मॉड्यूल फ़ाइलों पर जाने की कोशिश कर रहा दुर्घटनाग्रस्त रहा: /
बैटमैन

10

मेरा मानना ​​है कि npm installउत्पादन के माहौल में नहीं चलना चाहिए। कई चीजें हैं जो गलत हो सकती हैं - एनपीएम आउटेज, नए निर्भरताओं का डाउनलोड (सिकुड़ा हुआ यह हल करने के लिए लगता है) उनमें से दो हैं।

दूसरी ओर, node_modulesगिट पर प्रतिबद्ध नहीं होना चाहिए। उनके बड़े आकार के अलावा, उनके सहित कमिट्स विचलित हो सकते हैं।

सबसे अच्छा समाधान यह होगा: npm installउत्पादन वातावरण के समान CI वातावरण में चलना चाहिए। सभी परीक्षण चलेंगे और एक ज़िप्ड रिलीज़ फ़ाइल बनाई जाएगी जिसमें सभी निर्भरताएँ शामिल होंगी।


आपके पास सीआई पर चलने वाला एक कदम क्यों होगा जो आपकी तैनाती के हिस्से के रूप में नहीं चलेगा? इसका मतलब है कि आपके पास 2 प्रणालियों के बीच समानता नहीं है! जैसा कि जवाब में ऊपर कहा गया है - फ़ोल्डर को केवल देशी एक्सटेंशन की उपेक्षा करें, इस तरह से आप
npm

1
आपके कमेंट के लिए धन्यवाद। मेरा मानना ​​है कि आपके उत्पादन सर्वर में चलने वाले नोड_मॉड्यूल्स को एनपीएम इंस्टॉल से उत्पन्न किया जाना चाहिए, न कि जो कुछ भी देवताओं ने शुरू किया है। एक देवता का नोड_मॉडल फ़ोल्डर आवश्यक रूप से पैकेज.जसन सामग्री से मेल नहीं खाता है।
user2468170

8

मैं कमिटिंग नोड_मॉडल फ़ोल्डर और हटना-रैपिंग दोनों का उपयोग कर रहा हूं। दोनों समाधानों से मुझे खुशी नहीं हुई।

संक्षेप में: प्रतिबद्ध node_modules रिपॉजिटरी में बहुत अधिक शोर जोड़ता है।
और संकोचन .json को प्रबंधित करना आसान नहीं है और इस बात की कोई गारंटी नहीं है कि कुछ हटके लिपटे हुए प्रोजेक्ट कुछ वर्षों में बन जाएंगे।

मैंने पाया कि मोज़िला अपनी एक परियोजना के लिए एक अलग रिपॉजिटरी का उपयोग कर रहा था https://github.com/mozilla-b2g/gaia-node-modules

इसलिए मुझे इस विचार को नोड सीएलआई टूल https://github.com/bestander/npm-ij-nic.in पर लागू करने में देर नहीं लगी

हर बिल्ड से पहले
npm-git-lock --repo [git@bitbucket.org: अपने / समर्पित / node_modules / git / repository.git] जोड़ें

यह आपके Package.json के हैश की गणना करेगा और या तो दूरस्थ रेपो से नोड_मॉड्यूल्स सामग्री की जांच करेगा, या, यदि यह इस पैकेज के लिए पहला बिल्ड है। तो, यह एक साफ काम करेगा npm installऔर परिणामों को रिमोट रेपो में धकेल देगा।


5

मेरे लिए जो काम किया गया था वह स्पष्ट रूप से एक npm संस्करण को package.json ("npm": "1.1.x") में जोड़ रहा था और git के लिए node_modules में जाँच नहीं कर रहा था। यह तैनात करने के लिए धीमा हो सकता है (क्योंकि यह हर बार पैकेज डाउनलोड करता है), लेकिन जब मुझे चेक किया गया, तो मैं संकुल को संकलित नहीं कर सकता था। हरोकू उन फ़ाइलों की तलाश कर रहा था जो केवल मेरे स्थानीय बॉक्स पर मौजूद थीं।


यदि आपको लगता है कि मेरा उत्तर सही था, तो कृपया इसे स्वीकार करें? धन्यवाद!
रयान डेजीले

यदि यह अभी भी बहस के लिए बना हुआ है, तो मैं इस स्टैकओवरफ्लो पोस्ट पर एक नज़र डालूंगा, जो आपके प्रश्न के लगभग एक डुप्लिकेट से ऊपर है: stackoverflow.com/questions/11459733// असल में, ऐसा लगता है कि अधिवेशन को नोड -मॉड्यूल्स में जांचना है, और स्थानीय स्तर पर उन मॉड्यूल के अपने संस्करणों का प्रबंधन करें। यह बहुत उचित लगता है, और शायद सबसे रसीली व्याख्या यह है: mikealrogers.com/posts/nodemodules-in-git.html शुभकामनाएँ!
वारिर्पोस्टमैन

3

नोड_मॉड्यूल्स में जांच करने के बजाय, अपने ऐप के लिए एक पैकेज.जॉन फ़ाइल बनाएं।

Package.json फ़ाइल आपके अनुप्रयोग की निर्भरता को निर्दिष्ट करती है। हरोकू उन सभी आश्रितों को स्थापित करने के लिए npm को बता सकता है। आपके द्वारा लिंक किए गए ट्यूटोरियल में पैकेज.जॉन फ़ाइलों पर एक अनुभाग शामिल है।


मेरे पास एक पैकेज है। इसके निम्नलिखित हैं: {"नाम": "नोड-उदाहरण", "संस्करण": "0.0.1", "निर्भरता": {"एक्सप्रेस": "2.5.x", "रेडिस-यूआरएल": "0.1। 0 "," मोनगोडब ":"> = 0.9.9 "}," इंजन ": {" नोड ":" 0.8.x "}}
जेसन ग्रिफिन

मैंने अपने स्थानीय बॉक्स पर नोड_मॉडल निर्देशिका बनाने के लिए किया था। यही मैंने जांच की, फिर हटा दिया, फिर वापस जोड़ दिया।
जेसन ग्रिफिन

ट्यूटोरियल को अधिक देखने के बाद, ऐसा लगता है जैसे वे नोड_मॉड्यूल्स कर रहे हैं। उस स्थिति में, मुझे यकीन नहीं है कि अगर नोड_मॉड्यूल नहीं करने का कोई तरीका है। क्षमा करें
matzahboy

3

मैं इस समाधान का उपयोग कर रहा हूं:

  1. अलग रिपॉजिटरी बनाएं जो धारण करे node_modules। यदि आपके पास मूल मॉड्यूल हैं जो विशिष्ट प्लेटफ़ॉर्म के लिए बनाए जाने चाहिए, तो प्रत्येक प्लेटफ़ॉर्म के लिए अलग रिपॉजिटरी बनाएं।
  2. इन रिपॉजिटरी को अपनी परियोजना रिपॉजिटरी के साथ संलग्न करें git submodule:

git submodule add .../your_project_node_modules_windows.git node_modules_windows

git submodule add .../your_project_node_modules_linux_x86_64 node_modules_linux_x86_64

  1. प्लेटफ़ॉर्म-विशिष्ट से लिंक बनाएँ node_modulesकरने के लिए node_modulesनिर्देशिका और जोड़ने node_modulesके लिए .gitignore
  2. भागो npm install
  3. सबमॉड्यूल रिपॉजिटरी परिवर्तन करें।
  4. अपने प्रोजेक्ट रिपॉजिटरी में बदलाव करें।

इसलिए आप node_modulesविभिन्न प्लेटफार्मों पर आसानी से स्विच कर सकते हैं (उदाहरण के लिए यदि आप ओएस एक्स पर विकसित कर रहे हैं और लिनक्स पर तैनात हैं)।


3

से https://web.archive.org/web/20150212165006/http://www.futurealoof.com/posts/nodemodules-in-git.html :

संपादित करें: मूल लिंक यह एक था, लेकिन अब यह मर चुका है। इसे इंगित करने के लिए @Flavio धन्यवाद।

संक्षेप में दुहराना।

  • आपके द्वारा तैनात किए गए एप्लिकेशन के लिए केवल चेकइन नोड_मॉडल, आपके द्वारा बनाए गए पुन: प्रयोज्य पैकेज नहीं।
  • किसी भी संकलित निर्भरता में उनके स्रोत की जाँच होनी चाहिए, संकलन लक्ष्य नहीं, और तैनाती पर $ npm का पुनर्निर्माण करना चाहिए।

मेरा पसंदीदा हिस्सा:

आप सभी लोग जिन्होंने अपने gitignore में node_modules जोड़ा है, उस गंदगी को हटा दें, आज , यह एक ऐसे युग की एक कलाकृति है जिसे हम सब बहुत पीछे छोड़ कर खुश हैं। वैश्विक मॉड्यूल का युग मर चुका है।


आपके द्वारा लिंक की गई साइट की समय सीमा समाप्त हो गई है और अब स्कैमी विज्ञापनों से भरी हुई है। काश, वे विज्ञापन "एक युग की कलाकृतियाँ होते, जिन्हें हम सब बहुत पीछे छोड़ कर खुश होते"।
फ्लेवियो कॉप्स

1
@FlavioCopes Wayback मशीन से लिंक के साथ मेरे जवाब अपडेट किया गया।
बेंजामिन क्राउज़ियर

2

http://nodejs.org/api/modules.html

[...] नोड वर्तमान मॉड्यूल के मूल निर्देशिका में शुरू होता है /node_modules, और उस स्थान से मॉड्यूल को लोड करने का प्रयास करता है।

यदि यह वहां नहीं पाया जाता है, तो यह मूल निर्देशिका में चला जाता है, और इसी तरह , जब तक कि पेड़ की जड़ तक नहीं पहुंच जाता।

यदि आप अपने ऐप के लिए अपने खुद के मॉड्यूल को रोल कर रहे हैं, तो आप उन ( और केवल उन ) को अपने ऐप में रख सकते हैं /node_modules। और माता-पिता की निर्देशिका के लिए अन्य सभी निर्भरताएं बाहर ले जाएं।

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


1

दृष्टांत 1:

एक परिदृश्य: आप एक पैकेज का उपयोग करते हैं जो npm से हटा दिया जाता है। यदि आपके पास फ़ोल्डर के सभी मॉड्यूल नोड_मॉड्यूल हैं, तो यह आपके लिए कोई समस्या नहीं होगी। यदि आपके पास पैकेज में केवल पैकेज का नाम है। Json, तो आप इसे अब और नहीं प्राप्त कर सकते हैं। यदि कोई पैकेज 24 घंटे से कम पुराना है, तो आप इसे आसानी से npm से हटा सकते हैं। यदि यह 24 घंटे से अधिक पुराना है, तो आपको उनसे संपर्क करने की आवश्यकता है। परंतु:

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

अधिक पढ़ें

तो इसके लिए संभावना कम है, लेकिन परिदृश्य 2 है ...


परिदृश्य 2:

एक अन्य परिदृश्य जहां यह मामला है: आप अपने सॉफ़्टवेयर या बहुत महत्वपूर्ण सॉफ़्टवेयर का एंटरप्राइज़ संस्करण विकसित करते हैं और अपने पैकेज में लिखते हैं।

"dependencies": {
    "studpid-package": "~1.0.1"
}

आप function1(x)उस पैकेज की विधि का उपयोग करें ।

अब स्टडपिड-पैकेज के डेवलपर्स का नाम बदल function1(x)जाता है function2(x)और वे गलती करते हैं ... वे अपने पैकेज के संस्करण को से बदल 1.0.1देते हैं 1.1.0। यह एक समस्या है क्योंकि जब आप npm installअगली बार कॉल करते हैं, तो आप संस्करण को स्वीकार करेंगे 1.1.0क्योंकि आपने टिल्ड ( "studpid-package": "~1.0.1") का उपयोग किया था ।

कॉलिंग function1(x)अब त्रुटियों और समस्याओं का कारण बन सकती है।


आपके रिपॉजिटरी में पूरे नोड_मॉडल फ़ोल्डर (अक्सर 100 एमबी से अधिक) को पुश करने पर, आपको मेमोरी स्पेस का खर्च आएगा। सैकड़ों MB (package.json & node_modules) के साथ तुलना में कुछ kb (package.json) ... इसके बारे में सोचें।

आप इसे कर सकते हैं / इसके बारे में सोचना चाहिए अगर:

  • सॉफ्टवेयर बहुत महत्वपूर्ण है।

  • जब कुछ विफल हो जाता है तो यह आपके पैसे खर्च करता है।

  • आपको npm रजिस्ट्री पर भरोसा नहीं है। एनपीएम केंद्रीकृत है और सैद्धांतिक रूप से बंद हो सकता है।

आपको 99.9% मामलों में नोड_मॉड्यूल फ़ोल्डर प्रकाशित करने की आवश्यकता नहीं है यदि:

  • आप सिर्फ अपने लिए एक सॉफ्टवेयर विकसित करते हैं।

  • आपने कुछ प्रोग्राम किया है और केवल GitHub पर परिणाम प्रकाशित करना चाहते हैं क्योंकि कोई अन्य व्यक्ति शायद इसमें दिलचस्पी ले सकता है।


यदि आप नहीं चाहते कि नोड_मॉड्यूल आपके भंडार में हों, तो बस एक .gitignoreफ़ाइल बनाएं और लाइन जोड़ें node_modules

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