নোডজেএস আমদানি / এক্সপোর্ট এস 6 (এস2015) মডিউলগুলিকে সমর্থন করার পরিকল্পনা করে


275

আমি এর স্পষ্ট উত্তর ছাড়াই পুরো ইন্টারনেটে সন্ধান করছি।

বর্তমানে নোডজেএস মডিউলগুলি লোড করার জন্য কেবল কমনজেএস সিনট্যাক্স ব্যবহার করে এবং আপনি যদি সত্যিই স্ট্যান্ডার্ড ES2015 মডিউলগুলির সিনট্যাক্সটি ব্যবহার করতে চান তবে আপনাকে এটি আগেই স্থানান্তর করতে হবে বা রানটাইমে কোনও বাহ্যিক মডিউল লোডার ব্যবহার করতে হবে।

বর্তমানে আমি এই দুটি পদ্ধতির কোনওটিই ব্যবহার করতে খুব ইতিবাচক নই, নোডজেএস রক্ষণাবেক্ষণকারীরা এমনকি ES2015 মডিউলগুলি সমর্থন করার পরিকল্পনা করছেন কি না? আমি এই সম্পর্কে একটি ইঙ্গিত পাওয়া যায় নি।

এই মুহুর্তে নোডজেএস 6.x ES2015 বৈশিষ্ট্যের 96% সমর্থন করার দাবি করেছে, তবে মডিউলগুলির কোনও উল্লেখ নেই ( নোডজেএস ES2105 সমর্থন লিঙ্ক )।

আপনি কি জানেন যে নোডজেএস অদূর ভবিষ্যতে বাক্সের বাইরে এই মডিউলগুলি সমর্থন করবে?


2
জন্য গুগলিংnode es2015 modules , শীর্ষ ফলাফলগুলির মধ্যে একটি হিসাবে নিম্নলিখিতটি দেখায়: github.com/nodejs/node/wiki/ES6- মডেল- সনাক্তকরণ- ইন- নোড
ফেলিক্স ক্লিং

6
ব্যক্তিগতভাবে আমি এই প্রশ্নটি "খুব স্থানীয়করণ" হিসাবে বন্ধ করতে ভোট দেব, তবে সেই ঘনিষ্ঠ কারণটির আর অস্তিত্ব নেই। ধরা যাক নোড আগামীকাল ES6 মডিউলগুলি প্রয়োগ করতে পরিচালিত করে। আপনি কি তখন নিজের প্রশ্নটি মুছতে চলেছেন, কারণ এটি আর প্রাসঙ্গিক নয়? নাকি আপনি কমপক্ষে এটি আপডেট করবেন? আমি মনে করি না যে কোনও প্রশ্নই এসও এর জন্য উপযুক্ত, যদি আপনি ইতিমধ্যে জানেন যে এটি পুরানো হবে বা "শীঘ্রই" আপডেট করা দরকার। কিন্তু যে শুধু আমার মতামত এবং সেখানে যারা অন্যদের বিপরীত, যা আমার জন্য ঠিক আছে :) মনে হবে বলে মনে হচ্ছে (fwiw, নিজে প্রশ্ন অবশ্যই গুরুত্বপূর্ণ এবং আকর্ষণীয় হয়)
ফেলিক্স Kling

2
যদিও আমি চাই এই জাতীয় প্রশ্নের জন্য স্ট্যাক ইউনিভার্সে কোনও জায়গা ছিল। এটি এখানে প্রযুক্তিগতভাবে ফিট নাও হতে পারে তবে আমি জানি না যে আমি এটির "মতামত ভিত্তিক" সত্যই সম্মত। ওপি একটি নির্দিষ্ট প্রশ্নের সুনির্দিষ্ট উত্তর খুঁজছে, তবে এটি একটি (কোনও কোনও সময়) পুরানো হবে।
Wonko দ্য সান

5
এই প্রশ্নের বিকল্প বাক্য: "ES6 মডিউলগুলির জন্য নোড.জেএস সমর্থন করার অবস্থা কী?" প্রযুক্তি বিবর্তনের সাথে সাথে অনেকগুলি এস.ও. প্রশ্নের উত্তর সময়ের সাথে সাথে পরিবর্তিত হয়। আমি এখানে না পৌঁছানো পর্যন্ত উত্তরটি খুঁজে পেতে আমারও সমস্যা হয়েছিল।
জো ল্যাপ

4
@ ফেলিক্সক্লিং আমি অনুমান করি যে আপনি এই প্রশ্নটি বন্ধ করতে চান এটি একটি খুব ভুল সিদ্ধান্ত হয়ে উঠবে কারণ এটি এখন পর্যন্ত 211 জনকে ভোট দেওয়ার পক্ষে যথেষ্ট সমস্যাযুক্ত বলে মনে হয়েছে।
মুহাম্মদ উমার

উত্তর:


302

নোড ১৩.২.০ এবং উপরে

নোডজেএস ১৩.২.০ এখন পতাকা ছাড়াই ইএস মডিউলগুলিকে সমর্থন করে 🎉 তবে বাস্তবায়নটি এখনও পরীক্ষামূলক হিসাবে চিহ্নিত হয়েছে সুতরাং সাবধানতার সাথে উত্পাদনে ব্যবহার করুন।

13.2.0 এ ESM সমর্থন সক্ষম করতে, আপনারটিতে নিম্নলিখিতগুলি যুক্ত করুন package.json:

{
  "type": "module"
}

সমস্ত .js, .mjs(বা একটি এক্সটেনশনবিহীন ফাইল) ESM হিসাবে বিবেচিত হবে।

সম্পূর্ণ 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 এসএমএস হিসাবে পার্স করা হয়
      • ডিফল্টরূপে JSON বা নেটিভ মডিউল লোড করা সমর্থন করে না
      • এক্সটেনশন ছাড়াই এন্ট্রি পয়েন্টের জন্য ডিফল্ট হ'ল এসএমএল
  • --type=[mode]আপনি এন্ট্রি পয়েন্ট টাইপ সেট করতে। package.typeপ্রবেশের পয়েন্টের জন্য ওভাররাইড করবে ।
  • একটি নতুন ফাইল এক্সটেনশন .cjs
    • এটি বিশেষত moduleমোডে কমনজ আমদানি করতে সহায়তা করে ।
    • এটি কেবল এসএমএম লোডারটিতেই রয়েছে, কমনজ লোডারটি অপরিবর্তিত থাকে, তবে আপনি যদি পুরো ফাইল পাথটি ব্যবহার করেন তবে এক্সটেনশনটি পুরানো লোডারটিতে কাজ করবে।
  • --es-module-specifier-resolution=[type]
    • বিকল্পগুলি explicit(ডিফল্ট) এবংnode
    • ডিফল্টরূপে আমাদের লোডার আমদানিতে alচ্ছিক এক্সটেনশনের অনুমতি দেবে না, মডিউলটির পথটিতে অবশ্যই যদি এক্সটেনশন অন্তর্ভুক্ত থাকে তবে
    • ডিফল্টরূপে আমাদের লোডার একটি সূচক ফাইল রয়েছে এমন ডিরেক্টরিগুলি আমদানির অনুমতি দেবে না
    • বিকাশকারীরা --es-module-specifier-resolution=nodeকমনজ স্পেসিফায়ার রেজোলিউশন অ্যালগরিদম সক্ষম করতে ব্যবহার করতে পারেন
    • এটি কোনও "বৈশিষ্ট্য" নয় বরং পরীক্ষার জন্য একটি বাস্তবায়ন। পতাকা সরানোর আগে এটি পরিবর্তিত হবে বলে আশা করা হচ্ছে
  • --experimental-json-loader
    • যখন জসন আমদানি করার একমাত্র উপায় "type": "module"
    • সক্ষম করার সময় সমস্ত import 'thing.json'পরীক্ষামূলক লোডার মোডের বাইরে চলে যেতে পারে
    • হোয়াটজিএইচ / এইচটিএমএল # 4315 এর ভিত্তিতে
  • আপনি package.mainএকটি মডিউল জন্য একটি এন্ট্রি পয়েন্ট সেট করতে ব্যবহার করতে পারেন
    • মূলত ব্যবহৃত ফাইল এক্সটেনশনগুলি মডিউলটির ধরণের ভিত্তিতে সমাধান করা হবে

17 জানুয়ারী 2019

নোড 11.6.0 এখনও একটি পতাকাের পিছনে ES মডিউলগুলি পরীক্ষামূলক হিসাবে তালিকাবদ্ধ করে।

13 সেপ্টেম্বর 2017

একটি পতাকার পিছনে এমজেএস ফাইলগুলির সমর্থন সহ নোডজেএস 8.5.0 প্রকাশিত হয়েছে:

node --experimental-modules index.mjs

এর জন্য পরিকল্পনাটি হল v10.0 এলটিএস রিলিজের জন্য পতাকা সরানো।

- পুরানো তথ্য। Historicalতিহাসিক উদ্দেশ্যে এখানে রাখা হয়েছে -

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.jsCommonJS যেমন যখন import * from 'bar' বিবেচনা করবে bar.mjsএকটি ES6 মডিউল রূপে

এবং টাইমলাইন হিসাবে ...

বর্তমান সময়ে, নোড.জেএসএস এমনকি ES6 মডিউলগুলির একটি সমর্থনযোগ্য বাস্তবায়ন কাজ শুরু করতে পারার আগে অনেকগুলি স্পেসিফিকেশন এবং বাস্তবায়ন সংক্রান্ত সমস্যা রয়েছে যা ES6 এবং ভার্চুয়াল মেশিনের দিকে হওয়া উচিত। কাজ চলছে তবে এতে কিছুটা সময় লাগবে - আমরা বর্তমানে কমপক্ষে এক বছরের দিকে তাকিয়ে আছি ।

অক্টোবর ২০১::

নোড.জেএস-এর বিকাশকারীদের একজন সম্প্রতি একটি টিসি -39 সভায় অংশ নিয়েছেন এবং নোড.জেএস এর জন্য বাস্তবায়ন করার জন্য ব্লকারদের উপর একটি দুর্দান্ত নিবন্ধ লিখেছিলেন:

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

এটি থেকে মূল গ্রহণযোগ্যতা হ'ল:

  • ইএস মডিউলগুলি স্থিতিশীলভাবে বিশ্লেষণ করা হয়, কমন জেএস মূল্যায়ন করা হয়
  • কমনজেএস মডিউলগুলি বানর-প্যাচিং রফতানির অনুমতি দেয়, ইএস মডিউলগুলি বর্তমানে তা করে না
  • কোনও ES মডিউল কী এবং কোন সাধারণ ব্যবহারকারীর ইনপুট ছাড়াই কমনজেএস কী তা সনাক্ত করা কঠিন তবে তারা চেষ্টা করছেন।
  • *.mjs সম্ভবত সম্ভবত সমাধানটি মনে হয়, যদি না তারা ব্যবহারকারী-ইনপুট ছাড়াই কোনও ES মডিউলটি সঠিকভাবে সনাক্ত করতে পারে

- আসল উত্তর -

বেশ কিছুদিন ধরে এটি একটি গরম আলু। নীচের লাইনটি হ্যাঁ, নোড অবশেষে মডিউলগুলি আমদানি / রফতানি করার জন্য ES2015 সিনট্যাক্সকে সমর্থন করবে - সম্ভবত যখন লোডিং মডিউলগুলির জন্য চূড়ান্তকরণটি চূড়ান্ত হয় এবং তাতে সম্মতি হয়।

এখানে একটি ভাল ওভারভিউনোডজেএস কীভাবে ধরে আছে । মূলত, তাদের অবশ্যই তা নিশ্চিত করা দরকার যে নতুন অনুমানটি নোডের জন্য কাজ করে যা মূলত শর্তযুক্ত, সিঙ্ক্রোনাস লোডিং এবং এইচটিএমএল যা মূলত অ্যাসিনক্রোনাস।

এখনই কেউ নিশ্চিতরূপে জানেন না, তবে আমি কল্পনা করি নোড গতিশীল লোডিংয়ের জন্য import/exportনতুন ছাড়াও স্থির লোডিংয়ের পক্ষে সমর্থন করবে System.import- এখনও requireউত্তরাধিকারের কোডটি রেখে চলেছে ।

নোড কীভাবে এটি অর্জন করতে পারে সে সম্পর্কে এখানে কয়েকটি প্রস্তাব দেওয়া হয়েছে:


38
আমাদের সম্পর্কে .mjsএক্সটেনশন: We have affectionately called these “Michael Jackson Script” files in the past। জেএস টক চলাকালীন আপনি যদি পপ শিল্পীদের নিয়ে কেউ কথা শুনছেন।
জিউস

1
আমদানি সিনট্যাক্স পরিবর্তন করা কেন পর্যাপ্ত নয় তা আমি দেখছি না। এস এস আমদানির জন্য একটি বাক্য গঠন ('সঠিক' এক) এবং সিজেএস আমদানির জন্য একটি? অন্য কথায়, দুটি ফাইল foo.js এবং বার.জেএস দেওয়া, import * from 'foo'foo.js কে সাধারণ import * as bar from 'bar'জেএস বার.জেসকে একটি ES6 মডিউল হিসাবে বিবেচনা করবে, কেউ কি ব্যাখ্যা করতে পারবে?
কোরি অ্যালিক্স

1
@ কোরিএলিক্স সিনট্যাক্সটি কোনও পরিবেশকে সমর্থন করার জন্য সাধারণত পরিবর্তন করা হবে না। এটি সত্যিই কেবল নোডকে প্রভাবিত করে। এছাড়াও সিনট্যাক্সটি কিছুটা স্বজ্ঞাত নয়। আমি কীভাবে আপনার প্রস্তাবিত বাক্য বাক্সে রফতানি অ্যাক্সেস করব?
কোডিংইন্ট্রিগ

স্পষ্টতই, এটি "আমার" প্রস্তাব নয়, আমি ইতিমধ্যে কী টাইপস্ক্রিপ্টটি কপি করছি। আপনার প্রশ্নের উত্তর দেওয়ার জন্য, আপনি "বার" দিয়ে রফতানিতে অ্যাক্সেস করতে পারবেন: " var ফু = প্রয়োজনীয় ("./ foo") হ'ল সিজেএস মডিউলটি সনাক্ত করার প্রক্রিয়া। টাইপস্ক্রিপ্টে কমনজ আউটপুটটি দেখতে এরকম দেখায়: var mod1_1 = প্রয়োজনীয় ("। / মোড 1"); রফতানি.মোড 1 = মোড 1; ES6 আউটপুটটি এর মতো দেখাচ্ছে: "./mod1" থেকে {mod1} আমদানি করুন; এক্সপোর্ট {mod1}
কোরি অ্যালিক্স

1
আমি এই উত্তর একটি নোড 10 আপডেটে সত্যিই আকর্ষণীয় হবে। বৈশিষ্ট্যটি কি কাটাটি তৈরি করেছে, বা এটি এখনও একটি পতাকার পিছনে রয়েছে?
dcorking
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.