node.js बोवर init-एमएमडी, es6, globals और नोड के बीच अंतर




ecmascript-6 bower (3)

यदि आप नहीं जानते हैं, तो संभवतः ग्लोबल्स आपके लिए सही जवाब है।

किसी भी तरह से, आपको समझने की जरूरत है:

[अद्यतन करें]

यह सुविधा हाल ही में बोअर में पेश की गई थी और अभी तक दस्तावेज नहीं है (AFAIK)। यह अनिवार्य रूप से मॉड्यूल moduleType वर्णन करता है, जो कि मॉड्यूल तकनीक के लिए कहता है कि पैकेज का उपभोग करने के लिए क्या मतलब है (ऊपर देखें)।

अभी, पैकेज के bower.json फ़ाइल में moduleType को सेट करने के अलावा इसका कोई प्रभाव नहीं पड़ता है।

मूल पुल-अनुरोध के लिए https://github.com/bower/bower/pull/934 देखें।

[अद्यतन # 2]

टिप्पणियों का उत्तर देने के लिए कुछ अतिरिक्त अंक:

  • अभी AFAIK moduleType प्रॉपर्टी पर कोई सत्यापन नहीं किया गया है - जिसका मतलब है कि लोगों को तकनीकी रूप से इसके लिए जो भी मूल्य चाहिए, उसका उपयोग करने की अनुमति है, जिसमें angularjs भी शामिल हैं, यदि वे ऐसा करने के इच्छुक हैं
  • बॉवर कमेटी अतिरिक्त non-interoperable/proprietary moduleTypes (सोचने वाले संगीतकार, कोणीय, आदि) को शामिल करने की ओर उत्सुक नहीं है - जो आसानी से समझ में आता है, लेकिन फिर भी, कुछ भी वास्तव में moduleType का उपयोग करने से रोकता है moduleType वैल्यू वे चाहते हैं
  • पिछले के लिए एक अपवाद है (कुछ हद तक) yui moduleType हालिया समावेशन, इसलिए, "अपवाद" किए जाने हैं, मानते हैं कि वे एक समेकित योजना का हिस्सा हैं

अगर मैं एक सूचीबद्ध पैकेज प्रबंधक के लिए पैकेज लिखना चाहता हूं और इसे बोवर पर प्रकाशित करना चाहता हूं तो मैं क्या करूँगा?

मैं एक es6 मॉड्यूल लिखूंगा, और मुझे आवश्यक पैकेज प्रारूप को आउटपुट करने के लिए / पैच es6-transpiler का उपयोग करें। तब मैं या तो /

  • बॉयर्स को याचिका दायर करने के लिए मेरी पैकेज तकनीक को एक विकल्प के रूप में शामिल करें (इस तथ्य के आधार पर कि यह लक्ष्य के रूप में es6-transpiler द्वारा समर्थित है)
  • मेरे पैकेज को इसके es6 मॉड्यूल संस्करण और इसके पारदर्शी XXX संस्करण दोनों सहित प्रकाशित करें, और es6 रूप में moduleType उपयोग करें

अस्वीकरण: मेरे पास वास्तविक जीवन अनुभव संलेखन कोणीय मॉड्यूल नहीं है।

मैं अपना पहला बोवर घटक बना रहा हूं। bower init चलाने के बाद स्क्रिप्ट मुझसे पूछता है 'इस पैकेज का किस प्रकार के मॉड्यूल का पर्दाफाश करता है?' इन विकल्पों के साथ:

  • एएमडी
  • ES6
  • वैश्विक
  • नोड

इन विकल्पों के बीच क्या अंतर है?


बस संदर्भ के लिए, यह वही है जो बॉवर मॉड्यूल प्रकारों के बारे में निर्दिष्ट करता है:

main जावास्क्रिप्ट फ़ाइल में परिभाषित मॉड्यूल का प्रकार। निम्नलिखित स्ट्रिंग्स में से एक या सरणी हो सकती है:

  • globals : जावास्क्रिप्ट मॉड्यूल जो वैश्विक नामस्थान में जोड़ता है, window.namespace या this.namespace वाक्यविन्यास का उपयोग कर
  • RequireJS : जावास्क्रिप्ट मॉड्यूल एएमडी के साथ संगत, जैसे RequireJS , define() वाक्यविन्यास का उपयोग कर
  • node : module.exports सिंटैक्स का उपयोग कर node और module.exports साथ संगत जावास्क्रिप्ट मॉड्यूल
  • es6 : जावास्क्रिप्ट मॉड्यूल export और import वाक्यविन्यास का उपयोग कर ECMAScript 6 मॉड्यूल के साथ संगत
  • YUI.add() वाक्यविन्यास का उपयोग कर, YUI.add() मॉड्यूल के साथ संगत जावास्क्रिप्ट मॉड्यूल

प्रासंगिक लिंक: https://github.com/bower/spec/blob/master/json.md#moduletype


प्रारंभिक

मैं भी पहली बार bower init का उपयोग कर रहा हूँ।

विकल्पों को कुछ जावास्क्रिप्ट कोड मॉड्यूलर करने के विभिन्न तरीकों से संदर्भित होना चाहिए:

  • amd: एएमडी define तरह, requjs की तरह।
  • नोड: Node.js का उपयोग करने की require
  • ग्लोबल्स: वैश्विक चर (जैसे window.JQuery) का पर्दाफाश करने के लिए जावास्क्रिप्ट मॉड्यूल पैटर्न का उपयोग करना।
  • es6: आने वाली EcmaScript6 मॉड्यूल सुविधा का उपयोग कर।

मेरे मामले में मैंने एक Node.js मॉड्यूल dflow लिखा है, लेकिन मैं एक dist / dflow.js फ़ाइल बनाने के लिए dflow का उपयोग कर रहा हूं जो वैश्विक dflow var निर्यात करता है: इसलिए मैंने ग्लोबल्स का चयन किया।

अन्य अपडेट

एक विंडो वैश्विक वस्तु के रूप में dflow को dflow लिए उपयोग किया गया आदेश था

browserify -s dflow -e index.js -o dist/dflow.js

मैंने इसे बदल दिया क्योंकि मैं ब्राउज़र के अंदर भी आवश्यकता का उपयोग करना पसंद करता हूं, इसलिए अब मैं इसका उपयोग कर रहा हूं

browserify -r ./index.js:dflow -o dist/dflow.js

और इसलिए मैंने bower.moduleType को मेरी bower.json फ़ाइल में नोड करने के लिए बदल दिया।

मुख्य प्रेरणा यह थी कि यदि मेरे मॉड्यूल नाम में डैश है, उदाहरण के लिए मेरा प्रोजेक्ट flow-view , मुझे flow-view में वैश्विक नाम को कम करने की आवश्यकता है।

इस नए दृष्टिकोण के दो अन्य लाभ हैं:

  1. नोड और ब्राउज़र इंटरफ़ेस समान हैं। क्लाइंट साइड और सर्वर दोनों पक्षों की आवश्यकता का उपयोग करके, मुझे केवल कोड उदाहरणों को लिखने दें, और दोनों संदर्भों पर आसानी से उनका पुन: उपयोग करें।
  2. मैं एनपीएम स्क्रिप्ट का उपयोग करता हूं और इसलिए, मैं ${npm_package_name} वैरिएबल का लाभ उठा सकता हूं और एक बार लिपि लिखने के लिए उपयोग की जाने वाली स्क्रिप्ट लिख सकता हूं।

यह एक और विषय है, लेकिन, यह वास्तव में लायक है कि आप इस बात पर विचार करते हैं कि यह बाद का लाभ कैसे उपयोगी है: मुझे npm.scripts.browserify विशेषता साझा करें जो मैं अपने npm.scripts.browserify में उपयोग करता हूं

"browserify": "browserify -r ./index.js:${npm_package_name} -o dist/${npm_package_name}.js"





es2015