नोड 13.2.0 और ऊपर
NodeJS 13.2.0 अब बिना झंडे के ES मॉड्यूल का समर्थन करता है the हालांकि, कार्यान्वयन को अभी भी प्रायोगिक के रूप में चिह्नित किया गया है, इसलिए सावधानी के साथ उत्पादन में उपयोग करें।
13.2.0 में ईएसएम समर्थन को सक्षम करने के लिए, अपने को निम्न जोड़ें package.json
:
{
"type": "module"
}
सभी .js
, .mjs
(या एक्सटेंशन के बिना फ़ाइलें) को ईएसएम के रूप में माना जाएगा।
संपूर्ण package.json
ऑप्ट-इन के अलावा कई अलग-अलग विकल्प हैं, जिनमें से सभी 13.2.0 के दस्तावेज़ में विस्तृत हैं ।
नोड 13.1.0 और नीचे
नोड के पुराने संस्करणों का उपयोग करने वाले लोग अभी भी एएसएम मॉड्यूल लोडर को आजमाना चाहते हैं , जो कि नोड मोड्स के लिए ईएस मॉड्यूल प्रॉडक्शन का उत्पादन-तैयार कार्यान्वयन है:
node -r esm main.js
विस्तृत अपडेट ...
23 अप्रैल 2019
ईएस मॉड्यूल का पता लगाने के तरीके को बदलने के लिए हाल ही में एक पीआर उतरा:
https://github.com/nodejs/node/pull/26745
यह अभी भी --experimental-modules
ध्वज के पीछे है , लेकिन लोड किए जाने के तरीके में बड़े बदलाव हो सकते हैं:
package.type
जो module
या तो हो सकता हैcommonjs
type: "commonjs"
:
.js
को आमजन के रूप में रखा गया है
- बिना एक्सटेंशन के प्रवेश बिंदु के लिए डिफ़ॉल्ट सामान्य है
type: "module"
:
.js
esm के रूप में पार्स किया जाता है
- डिफ़ॉल्ट रूप से JSON या मूल मॉड्यूल लोड करने का समर्थन नहीं करता है
- बिना एक्सटेंशन के प्रवेश बिंदु के लिए डिफ़ॉल्ट esm है
--type=[mode]
आपको एंट्री पॉइंट पर टाइप सेट करने देता है। package.type
प्रवेश बिंदु के लिए ओवरराइड करेगा ।
- एक नई फ़ाइल एक्सटेंशन
.cjs
।
- यह विशेष रूप से
module
मोड में आमजन के आयात का समर्थन करने के लिए है।
- यह केवल esm लोडर में है, सामान्य लोडर अछूता रहता है, लेकिन यदि आप पूर्ण फ़ाइल पथ का उपयोग करते हैं तो एक्सटेंशन पुराने लोडर में काम करेगा।
--es-module-specifier-resolution=[type]
- विकल्प
explicit
(डिफ़ॉल्ट) हैं औरnode
- डिफ़ॉल्ट रूप से हमारा लोडर आयात में वैकल्पिक एक्सटेंशन के लिए अनुमति नहीं देगा, एक मॉड्यूल के लिए पथ में विस्तार को शामिल करना होगा यदि एक है
- डिफ़ॉल्ट रूप से हमारा लोडर उन निर्देशिकाओं को आयात करने की अनुमति नहीं देगा जिनके पास एक इंडेक्स फ़ाइल है
- डेवलपर्स
--es-module-specifier-resolution=node
कॉमन स्पेसिफिक रिज़ॉल्यूशन एल्गोरिदम को सक्षम करने के लिए उपयोग कर सकते हैं
- यह एक "विशेषता" नहीं है, बल्कि प्रयोग के लिए एक कार्यान्वयन है। ध्वज को हटाने से पहले इसे बदलने की उम्मीद है
--experimental-json-loader
- जब json आयात करने का एकमात्र तरीका है
"type": "module"
- जब सक्षम सभी
import 'thing.json'
मोड के स्वतंत्र लोडर के माध्यम से जाना जाएगा
- whatwg / html # 4315 पर आधारित है
- आप
package.main
एक मॉड्यूल के लिए एक प्रवेश बिंदु सेट करने के लिए
उपयोग कर सकते हैं
- मुख्य में प्रयुक्त फ़ाइल एक्सटेंशन को मॉड्यूल के प्रकार के आधार पर हल किया जाएगा
17 जनवरी 2019
नोड 11.6.0 अभी भी एक झंडे के पीछे ईएस मॉड्यूल को प्रयोगात्मक के रूप में सूचीबद्ध करता है।
13 सितंबर 2017
NodeJS 8.5.0 को एक ध्वज के पीछे mjs फ़ाइलों के समर्थन के साथ जारी किया गया है:
node --experimental-modules index.mjs
इसके लिए योजना v10.0 एलटीएस रिलीज के लिए ध्वज को हटाने की है।
- सुव्यवस्थित सूचना। ऐतिहासिक उद्देश्यों के लिए यहां रखा गया--
8 सितंबर 2017
NodeJS मास्टर शाखा को ESM मॉड्यूल के लिए प्रारंभिक समर्थन से अपडेट किया गया है:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc80d9d5
यह नवीनतम रात में उपलब्ध होना चाहिए (यह आपके मौजूदा इंस्टॉल के साथ चलाने के लिए एनवीएम के माध्यम से स्थापित किया जा सकता है ):
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
NodeJS लोगों ने फैसला किया है कि कम से कम बुरा समाधान .mjs
फ़ाइल एक्सटेंशन का उपयोग करना है । इससे प्राप्त होने वाला मार्ग है:
दूसरे शब्दों में, दो फाइलें दी गई हैं, foo.js
और bar.mjs
उपयोग import *
from 'foo'
करना foo.js
कॉमनजस के रूप में माना जाएगा , जबकि ईएस 6 मॉड्यूल के रूप में import * from 'bar'
माना जाएगाbar.mjs
और समयसीमा के अनुसार ...
वर्तमान समय में, अभी भी कई विनिर्देशन और कार्यान्वयन के मुद्दे हैं जो कि Node.js से पहले चीजों के ES6 और वर्चुअल मशीन पक्ष पर होने की आवश्यकता है, यहां तक कि ES6 मॉड्यूल के एक सहायक कार्यान्वयन का काम भी शुरू कर सकते हैं। कार्य प्रगति पर है लेकिन इसमें कुछ समय लगने वाला है - हम वर्तमान में लगभग एक वर्ष में देख रहे हैं ।
अक्टूबर 2016:
Node.JS के डेवलपर्स में से एक ने हाल ही में एक TC-39 बैठक में भाग लिया और ब्लॉकर्स पर Node.JS को लागू करने के लिए एक शानदार लेख लिखा:
https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e
उस से मूल ले दूर है:
- ईएस मॉड्यूल का सांख्यिकीय विश्लेषण किया जाता है, कॉमनजेएस का मूल्यांकन किया जाता है
- CommonJS मॉड्यूल बंदर-पैचिंग निर्यात के लिए अनुमति देते हैं, ES मॉड्यूल वर्तमान में नहीं है
- यह पता लगाना मुश्किल है कि उपयोगकर्ता इनपुट के कुछ प्रकार के बिना ES मॉड्यूल क्या है और कॉमनजस क्या है, लेकिन वे कोशिश कर रहे हैं।
*.mjs
सबसे संभावित समाधान लगता है, जब तक कि वे उपयोगकर्ता-इनपुट के बिना एक ईएस मॉड्यूल का सटीक रूप से पता नहीं लगा सकते
- मूल उत्तर -
यह काफी समय से एक गर्म आलू रहा है। लब्बोलुआब यह है कि हाँ, नोड्स आयात / निर्यात मॉड्यूल के लिए अंततः ES2015 सिंटैक्स का समर्थन करेंगे - सबसे अधिक संभावना है जब लोडिंग मॉड्यूल के लिए कल्पना को अंतिम रूप दिया जाता है और सहमति व्यक्त की जाती है।
यहाँ एक अच्छा अवलोकन है NodeJS धारण करने है। अनिवार्य रूप से, उन्हें यह सुनिश्चित करने की आवश्यकता है कि नया कल्पना नोड के लिए काम करता है जो मुख्य रूप से सशर्त, तुल्यकालिक लोडिंग और HTML भी है जो मुख्य रूप से अतुल्यकालिक है।
कोई भी अभी निश्चित रूप से नहीं जानता है, लेकिन मुझे लगता है कि डायनामिक लोडिंग के लिए import/export
नए के अलावा, नोड लोडिंग कोड के लिए System.import
अभी भी ध्यान में रखते हुए , नोड लोडिंग के लिए समर्थन करेगा require
।
यहां कुछ प्रस्ताव दिए गए हैं कि नोड कैसे इसे प्राप्त कर सकता है:
node es2015 modules
, शीर्ष परिणामों में से एक के रूप में निम्न दिखाता है: github.com/nodejs/node/wiki/ES6-Module-Detection-in-Node ।