javascript - ES6 में "सख्त उपयोग" का उपयोग करने की अनुशंसा नहीं की जाती है?





ecmascript-6 strict es6-modules (2)


ईएस 6 मॉड्यूल हमेशा सख्त मोड में होते हैं। Spec के प्रासंगिक भाग को उद्धृत करने के लिए :

10.2.1 सख्त मोड कोड

एक ईसीएमएस्क्रिप्ट स्क्रिप्ट सिंटैक्टिक यूनिट को या तो अप्रतिबंधित या सख्त मोड सिंटैक्स और अर्थशास्त्र का उपयोग करके संसाधित किया जा सकता है। निम्नलिखित स्थितियों में कोड को सख्त मोड कोड के रूप में व्याख्या किया गया है:

  • ग्लोबल कोड सख्त मोड कोड है यदि यह एक निर्देशक प्रस्तावना से शुरू होता है जिसमें उपयोग सख्त निर्देश (14.1.1 देखें) शामिल है।
  • मॉड्यूल कोड हमेशा सख्त मोड कोड है।
  • क्लासडिक्लेरेशन या क्लासएक्सप्रेस के सभी हिस्सों सख्त मोड कोड हैं।
  • इवल कोड सख्त मोड कोड है यदि यह एक निर्देशक प्रस्तावना से शुरू होता है जिसमें उपयोग सख्त निर्देश शामिल है या यदि कॉल करने के लिए कॉल प्रत्यक्ष eval (12.3.4.1 देखें) है जो सख्त मोड कोड में निहित है।
  • फ़ंक्शन कोड सख्त मोड कोड है यदि संबंधित फ़ंक्शन डिक्लेरेशन, फ़ंक्शनएक्सप्रेस, जेनरेटर डिक्लेरेशन, जेनरेटर एक्स्प्रेशन, मेथडडिफिनिशन, या एरोफंक्शन सख्त मोड कोड में निहित है या यदि कोड जो [[ECMAScriptCode]] आंतरिक स्लॉट के मान का उत्पादन करता है, निर्देशक प्रस्तावना के साथ शुरू होता है जिसमें उपयोग सख्त निर्देश शामिल है।
  • अंतर्निहित फ़ंक्शन और जनरेटर कन्स्ट्रक्टर के तर्क के रूप में प्रदान किया गया फ़ंक्शन कोड सख्त मोड कोड है यदि अंतिम तर्क एक स्ट्रिंग है जो संसाधित होने पर एक फ़ंक्शनबॉडी होता है जो निर्देशक प्रस्तावना से शुरू होता है जिसमें उपयोग सख्त निर्देश होता है।

मैं अभी तक ECMAScript 6 से परिचित नहीं हूँ। मैंने अभी रेक्ट स्टार्टर किट रेपो को क्लोन किया है, जो एप्लिकेशन कोड के लिए ईएस 6 का उपयोग करता है। मैं यह देखकर आश्चर्यचकित था कि लिटर को use strict निर्देश के use strict के अवसरों को रोकने के लिए configured गया है, जिसे मैंने पूर्व-ईएस 6 जावास्क्रिप्ट में अनुशंसित किया था। तो बात क्या है?




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

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







javascript ecmascript-6 strict es6-modules