NodeJS es6 импорт / экспорт модульдерін қолдайды (es2015)

Мен осы сұраққа нақты жауап берместен Интернеттегі барлық нәрселерді көрдім.

Қазіргі уақытта NodeJS тек модульдерді жүктеу үшін CommonJS синтаксисін пайдаланады және ES2015 модульдерінің стандартты синтаксисін шынымен пайдаланғыңыз келсе, оны алдын-ала жіберуіңіз керек немесе іске қосу уақытында сыртқы модуль жүктеушіні пайдалану керек.

Қазіргі уақытта NodeJS-ті қолдайтын осы екі әдісдің біреуін де қолдануға болмайды, тіпті ES2015 модульдерін қолдаймын ба? Мен оған ешқандай кеңестер таппадым.

Қазіргі уақытта NodeJS 6.x ES2015 мүмкіндіктерінің 96% -ын қолдайды, бірақ модульдерге сілтеме жоқ ( NodeJS ES2105 үшін қолдау сілтемесі ).

NodeJS бұл модульдерді жақын арада қораптан шығаратындығын білдіңіз бе?

246
10 мая '16 в 10:34 2016-05-10 10:34 Zorgatone 10 мамырда сағат 16: 10-да орнатылады 2016-05-10 10:34
ответ 1 жауап

2019 жылғы 17 қаңтарда жаңартыңыз

11.6.0 торабы , ES модулін жалаудан кейін экспериментальды түрде тізімдейді.

Мәселенің шешімін іздеп жүргендер ESM жүктеуші модулін көруге тырысуы мүмкін, яғни NodeJS үшін ES Modules Spec-ді дайын түрде дайындау:

 node -r esm main.js 

2017 жылғы 13 қыркүйектегі жаңалық

NodeJS 8.5.0 жалауша үшін mjs файлдарын қолдау арқылы шығарылды:

 node --experimental-modules index.mjs 

Бұл үшін LTS v10.0 шығарылымының жалауын алып тастау жоспары.

2017 жылдың 8 қыркүйегінен жаңарту

NodeJS компаниясының негізгі филиалы ESM модульдерін бастапқы қолдауымен жаңартылды:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5

Кеше түнде қолжетімді болуы керек (оны nvm арқылы орнатылған болуы мүмкін).
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 файлдарынан foo.js bar.mjs import * from 'foo' деп import * from 'foo' арқылы қолданып, foo.js және bar.mjs файлдарын foo.js ретінде қарастырады, сондай-ақ, import * from 'bar' bar.mjs ді ES6 модулі ретінде өңдейді.

Уақыт өте келе ...

Қазіргі уақытта ES6 және Node.js бұрын ES6 модульдерін қолдауды іске асыруды бастауға болатын виртуалды машинаның жағында пайда болатын бірқатар техникалық сипаттамалар мен іске асыру мәселелері әлі де бар. Жұмыс жалғасуда, бірақ біраз уақыт қажет - біз кемінде бір жыл қарастырудамыз.

2016 жылдың қазан айындағы жаңартулар:

Жақында Node.JS-да әзірлеушілердің бірі TC-39 жиналысына қатысып, Node.JS үшін іске қосу үшін блокаторлар туралы тамаша мақала жазды.

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

Бұдан негізгі қорытынды:

  • ES модульдері CommonJS арқылы бағаланған статикалық талдауларға ие
  • CommonJS модульдері сізге маймылдық патчтарды экспорттауға мүмкіндік береді, қазіргі уақытта ES модульдері қолдамайды
  • ES модулінің қайсысы екенін және CommonJS қандай да бір пайдаланушы енгізуінсіз қандай екенін анықтау қиын, бірақ олар тырысады.
  • *.mjs ES модулін пайдаланушының *.mjs нақты анықтау мүмкін болмаса, ең ықтимал шешім болып көрінеді

- Бастапқы жауап -

Бұл ыстық картоп әйгілі болды. Төменгі сызық мынада, иә, Түйін соңында модульдерді импорттау / экспорттау үшін ES2015 синтаксисін қолдайды, ең алдымен жүктеу модульдерінің сипаттамасы толық және келісілген.

Мұнда NodeJS ұстап отырған жақсы шолу . Негізінде олар жаңа ерекшеліктердің негізінен шартты, синхронды жүктелуін қамтамасыз ететін торап үшін жұмыс істейтініне және негізінен асинхронды болып табылатын HTML-ке жұмыс істейтініне көз жеткізуі керек.

Ешкім дәл қазір дәл білмейді, бірақ менің ойымша, бұл торап статикалық жүктеу үшін import/export қолдайды, сонымен қатар бұрынғы код require де, динамикалық жүктеу үшін жаңа System.import қа қосымша.

Міне, осы түйінді қалай жүзеге асыруға болатыны туралы кейбір ұсыныстар:

272
10 мая '16 в 11:07 2016-05-10 11:07 CodingIntrigue 10 мамырда сағат 16 : 30-да жауап болады. 2016-05-10 11:07

labels туралы басқа сұрақтар немесе Сұрақ қою