TL; DR - ~ अक्टूबर 2019 तक न करें। Node.js मॉड्यूल टीम ने पूछा :
कृपया Node.js द्वारा उपयोग के लिए कोई भी ES मॉड्यूल पैकेज प्रकाशित न करें [अक्टूबर 2019 तक]
2019 मई अपडेट
2015 से जब यह सवाल पूछा गया था, मॉड्यूल के लिए जावास्क्रिप्ट समर्थन काफी परिपक्व हो गया है, और उम्मीद है कि अक्टूबर 2019 में आधिकारिक तौर पर स्थिर होगा। अन्य सभी उत्तर अब अप्रचलित या अत्यधिक जटिल हैं। यहां वर्तमान स्थिति और सर्वोत्तम अभ्यास है।
ES6 समर्थन करते हैं
ES6 का 99% (उर्फ 2015) 6 संस्करण के बाद से नोड द्वारा समर्थित है । नोड का वर्तमान संस्करण 12 है। सभी सदाबहार ब्राउज़र ES6 सुविधाओं के विशाल बहुमत का समर्थन करते हैं। ECMAScript अब संस्करण 2019 में है , और संस्करण योजना अब वर्षों का उपयोग करने का पक्षधर है।
ES मॉड्यूल (उर्फ ECMAScript मॉड्यूल) ब्राउज़रों में
सभी सदाबहार ब्राउज़रों की है समर्थन import
ES6 मॉड्यूल आईएनजी के बाद से 2017 गतिशील आयात कर रहे हैं समर्थित क्रोम से (+ कांटे ओपेरा और सैमसंग इंटरनेट की तरह) और सफारी। फ़ायरफ़ॉक्स समर्थन अगले संस्करण के लिए स्लेटेड है, 67।
मॉड्यूल लोड करने के लिए अब आपको वेबपैक / रोलअप / पार्सल आदि की आवश्यकता नहीं है । वे अन्य उद्देश्यों के लिए अभी भी उपयोगी हो सकते हैं, लेकिन आपके कोड को लोड करने के लिए आवश्यक नहीं हैं। आप सीधे ES मॉड्यूल कोड की ओर इशारा करते हुए URL आयात कर सकते हैं।
नोड में ईएस मॉड्यूल
ES मॉड्यूल ( / के .mjs
साथ फाइल ) को ध्वज के साथ कॉल करके Node v8.5.0 के बाद से समर्थित किया गया है । नोड वी 12, अप्रैल 2019 में जारी किया गया, प्रयोगात्मक मॉड्यूल समर्थन को फिर से लिखा गया। सबसे अधिक दृश्य परिवर्तन यह है कि आयात करते समय फ़ाइल एक्सटेंशन को डिफ़ॉल्ट रूप से निर्दिष्ट करने की आवश्यकता होती है:import
export
node
--experimental-modules
// lib.mjs
export const hello = 'Hello world!';
// index.mjs:
import { hello } from './lib.mjs';
console.log(hello);
अनिवार्य .mjs
एक्सटेंशन पर ध्यान दें । ऐसे दोड़ो:
node --experimental-modules index.mjs
नोड 12 रिलीज तब भी होता है जब मॉड्यूल टीम ने डेवलपर्स से Node.js द्वारा उपयोग के लिए ईएस मॉड्यूल पैकेज प्रकाशित नहीं करने के लिए कहा था जब तक कि दोनों के माध्यम से पैकेज का उपयोग करने के लिए एक समाधान नहीं मिलता है require('pkg')
और import 'pkg'
। आप ब्राउज़रों के लिए अभी भी देशी ES मॉड्यूल प्रकाशित कर सकते हैं।
देशी ES मॉड्यूल का पारिस्थितिकी तंत्र समर्थन
मई 2019 तक, ईएस मॉड्यूल के लिए पारिस्थितिकी तंत्र का समर्थन अपरिपक्व है। उदाहरण के लिए, जेस्ट और अवा जैसी टेस्ट चौखटे समर्थन नहीं करती हैं --experimental-modules
। आपको एक ट्रांसपिलर का उपयोग करने की आवश्यकता है, और फिर नामित आयात ( import { symbol }
) सिंटैक्स (जो अभी तक अधिकांश एनपीएम पैकेजों के साथ काम नहीं करेगा) और डिफ़ॉल्ट आयात सिंटैक्स ( import Package from 'package'
) का उपयोग करने के बीच तय करना होगा , जो काम नहीं करता है, लेकिन जब बाबेल इसे पार्स नहीं करता है टाइपस्क्रिप्ट (ग्राफिकल-टूल्स, नोड-इनफ्लो, फॉस्ट आदि) में लिखे गए पैकेज के लिए , हालांकि एक वर्कअराउंड है जो दोनों के साथ काम करता है --experimental-modules
और यदि बैबेल आपके कोड को ट्रांसप्लेस करता है, तो आप इसे जेस्ट / अवा / मोसेक आदि के साथ टेस्ट कर सकते हैं:
import * as ApolloServerM from 'apollo-server'; const ApolloServer = ApolloServerM.default || ApolloServerM;
यकीनन बदसूरत, लेकिन इस तरह से आप अपने ईएस मॉड्यूल कोड को import
/ के साथ लिख सकते हैं export
और इसे node --experimental-modules
ट्रांसपॉयर्स के बिना चला सकते हैं। यदि आपके पास निर्भरताएं हैं जो ईएसएम-अभी तक तैयार नहीं हैं, तो उन्हें ऊपर के रूप में आयात करें, और आप टेस्ट फ्रेमवर्क और बाबेल के माध्यम से अन्य टूलिंग का उपयोग करने में सक्षम होंगे।
प्रश्न का पिछला उत्तर - याद रखें, जब तक नोड आवश्यक / आयात मुद्दे को हल नहीं करता, तब तक ऐसा न करें, उम्मीद है कि अक्टूबर 2019 के आसपास।
ईएस 6 मॉड्यूल को एनपीएम पर प्रकाशित करना, पीछे की संगतता के साथ
इतना है कि यह सीधे आयात किया जा सकता, कोलाहल या अन्य transpilers बिना npmjs.org के लिए एक ES मॉड्यूल प्रकाशित करने के लिए, बस बात main
अपने में क्षेत्र package.json
के लिए .mjs
फ़ाइल है, लेकिन विस्तार को छोड़ देते हैं:
{
"name": "mjs-example",
"main": "index"
}
बस यही बदलाव है। एक्सटेंशन को छोड़ने से, नोड एक mjs फ़ाइल के लिए सबसे पहले दिखेगा - अगर -एक्सपेरिमेंटल मॉड्यूल के साथ चलाया जाता है। अन्यथा यह .js फ़ाइल पर वापस आ जाएगा, इसलिए पुराने नोड संस्करणों का समर्थन करने के लिए आपकी मौजूदा ट्रांसप्लिकेशन प्रक्रिया पहले की तरह काम करेगी - बस बैबिल को इंगित करना सुनिश्चित करें।.mjs
फ़ाइल फ़ाइल ।
यहाँ नोड <8.5.0 के लिए पीछे की संगतता के साथ एक मूल ईएस मॉड्यूल के लिए स्रोत है जिसे मैंने NPM को प्रकाशित किया है। आप इसे अभी उपयोग कर सकते हैं, बिना बेबल या किसी और चीज के।
मॉड्यूल स्थापित करें:
npm install local-iso-dt
# or, yarn add local-iso-dt
एक परीक्षण फ़ाइल test.mjs बनाएँ :
import { localISOdt } from 'local-iso-dt/index.mjs';
console.log(localISOdt(), 'Starting job...');
नोड - (v8.5.0 +)
node --experimental-modules test.mjs
टाइपप्रति
यदि आप टाइपस्क्रिप्ट में विकसित होते हैं, तो आप ES6 कोड उत्पन्न कर सकते हैं और ES6 मॉड्यूल का उपयोग कर सकते हैं:
tsc index.js --target es6 --modules es2015
फिर, आपको *.js
आउटपुट का नाम बदलने की आवश्यकता है .mjs
, एक ज्ञात समस्या जो उम्मीद है कि जल्द ही ठीक हो जाएगी ताकि सीधे फ़ाइलों का tsc
उत्पादन हो सके .mjs
।