javascript - नोडजेएस आयात / निर्यात es6(es2015)मॉड्यूल का समर्थन करने की योजना बना रहा है





node.js module ecmascript-6 es6-modules (2)


13 सितंबर 2017 अपडेट करें

ध्वज के पीछे एमजेएस फाइलों के समर्थन के साथ नोडजेएस 8.5.0 जारी किया गया है:

node --experimental-modules index.mjs

इसके लिए योजना v10.0 एलटीएस रिलीज के लिए ध्वज को हटाना है।

8 सितंबर 2017 अपडेट करें

ईएसडी मॉड्यूल के लिए प्रारंभिक समर्थन के साथ नोडजेएस मास्टर शाखा को अद्यतन किया गया है:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5

यह नवीनतम रात में उपलब्ध होना चाहिए (यह आपके मौजूदा इंस्टॉल के साथ चलाने के लिए एनवीएम के माध्यम से स्थापित किया जा सकता है ):
https://nodejs.org/download/nightly/

और --experimental-modules ध्वज के पीछे सक्षम:

package.json

{
  "name": "testing-mjs",
  "version": "1.0.0",
  "description": "",
  "main": "index.mjs" <-- Set this to be an mjs file
}

तो भागो:

node --experimental-modules .

- पुरानी सूचना। ऐतिहासिक उद्देश्यों के लिए यहाँ पर कब्जा कर लिया -

फरवरी 2017 अपडेट करें:

https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b890c#.6ye7mtn37

नोडजेएस लोगों ने फैसला किया है कि कम से कम खराब समाधान .mjs फ़ाइल एक्सटेंशन का उपयोग करना है। इससे दूर लेना है:

दूसरे शब्दों में, दो फाइलें foo.js और bar.mjs दिए गए हैं, import * from 'foo' का उपयोग करके foo.js को foo.js रूप में foo.js जाएगा, जबकि import * from 'bar' bar.mjs को bar.mjs मॉड्यूल के रूप में bar.mjs करेगा

और समयरेखा के लिए ...

वर्तमान समय पर, अभी भी कई विनिर्देश और कार्यान्वयन के मुद्दे हैं जो ईएस 6 और वर्चुअल मशीन पक्षों पर होने की आवश्यकता है, इससे पहले कि नोड.जेएस ईएस 6 मॉड्यूल के एक सहायक कार्यान्वयन को भी शुरू कर सकें। कार्य प्रगति पर है लेकिन इसमें कुछ समय लगेगा - हम वर्तमान में कम से कम एक साल के आसपास देख रहे हैं।

अक्टूबर 2016 अपडेट करें:

नोड.जेएस पर डेवलपर्स में से एक ने हाल ही में एक टीसी -39 बैठक में भाग लिया और नोड के लिए लागू करने के लिए अवरोधकों पर एक शानदार लेख लिखा। जेएस:

https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e

उस से बुनियादी लेना दूर है:

  • ईएस मॉड्यूल का सांख्यिकीय रूप से विश्लेषण किया जाता है, कॉमनजेएस का मूल्यांकन किया जाता है
  • कॉमनजेएस मॉड्यूल बंदर-पैचिंग निर्यात के लिए अनुमति देते हैं, वर्तमान में ईएस मॉड्यूल नहीं करते हैं
  • यह पता लगाना मुश्किल है कि ईएस मॉड्यूल क्या है और उपयोगकर्ता इनपुट के कुछ प्रकार के बिना कॉमनजेएस क्या है, लेकिन वे कोशिश कर रहे हैं।
  • *.mjs सबसे संभावित समाधान प्रतीत होता है, जब तक कि वे उपयोगकर्ता इनपुट के बिना सटीक रूप से ES मॉड्यूल का पता लगा सकें

मूल उत्तर -

यह काफी समय के लिए एक गर्म आलू रहा है। निचली पंक्ति यह है कि हां, नोड अंततः मॉड्यूल आयात / निर्यात करने के लिए ES2015 वाक्यविन्यास का समर्थन करेगा - सबसे अधिक संभावना है कि मॉड्यूल लोड करने के लिए नमूना अंतिम रूप दिया गया है और इस पर सहमति हुई है।

नोडजेएस को पकड़ने के बारे में यहां एक अच्छा अवलोकन है। अनिवार्य रूप से, उन्हें यह सुनिश्चित करने की ज़रूरत है कि नया नमूना नोड के लिए काम करता है जो मुख्य रूप से सशर्त, तुल्यकालिक लोडिंग और HTML है जो मुख्य रूप से असीमित है।

अभी कोई भी निश्चित रूप से नहीं जानता है, लेकिन मुझे लगता है कि नोड नई System.import अलावा स्थिर लोडिंग के लिए import/export समर्थन करेगा। गतिशील लोडिंग के लिए import/export - जबकि अभी भी विरासत कोड की require

यहां कुछ प्रस्ताव दिए गए हैं कि कैसे नोड इसे प्राप्त कर सकता है:

मैं इसके लिए एक स्पष्ट उत्तर के बिना पूरे इंटरनेट पर देख रहा हूं।

वर्तमान में नोडजेएस मॉड्यूल लोड करने के लिए केवल कॉमनजेएस सिंटैक्स का उपयोग करता है, और यदि आप वास्तव में मानक ES2015 मॉड्यूल सिंटैक्स का उपयोग करना चाहते हैं, तो आपको या तो इसे पहले से ट्रांसफर करना होगा या रनटाइम पर बाहरी मॉड्यूल लोडर का उपयोग करना होगा।

वर्तमान में मैं उन दो तरीकों में से किसी एक का उपयोग करने के लिए बहुत सकारात्मक नहीं हूं, क्या नोडजेएस रखरखाव भी ES2015 मॉड्यूल का समर्थन करने की योजना बना रहे हैं या नहीं? मुझे इस बारे में कोई संकेत नहीं मिला है।

फिलहाल NodeJS 6.x ES2015 सुविधाओं का 96% समर्थन करने का दावा करता है, लेकिन मॉड्यूल ( NodeJS ES2105 समर्थन लिंक ) का कोई संदर्भ नहीं है।

क्या आपको पता है कि नोडजेएस निकट भविष्य में बॉक्स के बाहर इन मॉड्यूल का समर्थन करेगा या नहीं?




ऐसी कई उपयोग / क्षमताएं हैं जिन पर आप विचार करना चाहेंगे:

आवश्यक है:

  • आपके पास गतिशील लोडिंग हो सकती है जहां लोड मॉड्यूल का नाम पूर्वनिर्धारित / स्थैतिक नहीं है, या जहां आप सशर्त रूप से मॉड्यूल लोड करते हैं, यदि यह "वास्तव में आवश्यक" है (कुछ कोड प्रवाह के आधार पर)।
  • लोड हो रहा है तुल्यकालिक। इसका मतलब है कि यदि आपके पास एकाधिक require , तो वे एक-एक करके लोड और संसाधित होते हैं।

ईएस 6 आयात:

  • आप केवल उन टुकड़ों को चुनने के लिए नामित आयात का उपयोग कर सकते हैं जिन्हें आप चाहते हैं। यह स्मृति को बचा सकता है।
  • आयात असीमित हो सकता है (और वर्तमान ES6 मॉड्यूल लोडर में, वास्तव में यह है) और थोड़ा बेहतर प्रदर्शन कर सकते हैं।

इसके अलावा, आवश्यक मॉड्यूल सिस्टम मानक आधारित नहीं है। अब मानक बनने की संभावना बहुत कम है कि ईएस 6 मॉड्यूल मौजूद हैं। भविष्य में विभिन्न कार्यान्वयन में ES6 मॉड्यूल के लिए मूल समर्थन होगा जो प्रदर्शन के संदर्भ में फायदेमंद होगा।







javascript node.js module ecmascript-6 es6-modules