Saya sudah mencari di seluruh internet tanpa jawaban yang jelas untuk ini.
Saat ini NodeJS hanya menggunakan sintaks CommonJS untuk memuat modul, dan jika Anda benar-benar ingin menggunakan sintaksis modul ES2015 standar, Anda harus mengubahnya terlebih dahulu atau menggunakan pemuat modul eksternal saat runtime.
Saat ini saya tidak terlalu positif untuk menggunakan salah satu dari kedua metode tersebut, apakah pengelola NodeJS bahkan berencana untuk mendukung modul ES2015 atau tidak? Saya belum menemukan petunjuk sama sekali tentang ini.
Saat ini NodeJS 6.x mengklaim mendukung 96% dari fitur ES2015, tetapi tidak ada referensi ke modul ( tautan dukungan NodeJS ES2105 ).
Apakah Anda tahu jika NodeJS akan mendukung modul ini di luar kotak, dalam waktu dekat?
sumber
node es2015 modules
, perlihatkan berikut ini sebagai salah satu hasil teratas: github.com/nodejs/node/wiki/ES6-Module-Detection-in-Node .Jawaban:
Simpul 13.2.0 & Di Atas
NodeJS 13.2.0 sekarang mendukung Modul ES tanpa flag 🎉 Namun, implementasi masih ditandai sebagai eksperimental jadi gunakan dalam produksi dengan hati-hati.
Untuk mengaktifkan dukungan ESM di 13.2.0, tambahkan yang berikut ke Anda
package.json
:Semua
.js
,.mjs
(atau file tanpa ekstensi) akan diperlakukan sebagai ESM.Ada sejumlah opsi berbeda selain seluruh
package.json
keikutsertaan, yang semuanya dirinci dalam Dokumentasi untuk 13.2.0 .Simpul 13.1.0 & Di Bawah
Mereka yang masih menggunakan versi Node yang lebih lama mungkin ingin mencoba esm module loader, yang merupakan implementasi siap dari Spesifikasi Modul ES untuk NodeJS:
Pembaruan Lengkap ...
23 April 2019
Seorang PR baru-baru ini mendarat untuk mengubah cara Modul ES terdeteksi: https://github.com/nodejs/node/pull/26745
Itu masih di belakang
--experimental-modules
bendera, tetapi ada perubahan besar dalam cara modul dapat dimuat:package.type
yang bisa berupamodule
ataucommonjs
type: "commonjs"
:.js
diurai sebagai commonjstype: "module"
:.js
diuraikan sebagai esm--type=[mode]
untuk membiarkan Anda mengatur jenisnya pada titik masuk. Akan menggantipackage.type
untuk titik masuk..cjs
.module
mode.--es-module-specifier-resolution=[type]
explicit
(standar) dannode
--es-module-specifier-resolution=node
untuk mengaktifkan algoritma resolusi specifier commonjs--experimental-json-loader
"type": "module"
import 'thing.json'
akan melalui loader eksperimental independen dari modepackage.main
untuk mengatur titik masuk untuk modul17 Januari 2019
Node 11.6.0 masih mencantumkan Modul ES sebagai percobaan, di belakang sebuah bendera.
13 September 2017
NodeJS 8.5.0 telah dirilis dengan dukungan untuk file mjs di belakang sebuah flag:
Rencana untuk ini adalah menghapus bendera untuk rilis LTS v10.0.
- Informasi yang Diperpanjang. Tetap di sini untuk keperluan sejarah -
8 September 2017
Cabang utama NodeJS telah diperbarui dengan dukungan awal untuk modul ESM:
https://github.com/nodejs/node/commit/c8a389e19f172edbada83f59944cad7cc802d9d5
Ini harus tersedia pada malam terakhir (ini dapat diinstal melalui nvm untuk berjalan di samping instalasi Anda yang ada):
https://nodejs.org/download/nightly/
Dan diaktifkan di belakang
--experimental-modules
bendera:package.json
Lalu lari:
Februari 2017:
https://medium.com/@jasnell/an-update-on-es6-modules-in-node-js-42c958b890c#.6ye7mtn37
Orang-orang NodeJS telah memutuskan bahwa solusi yang paling buruk adalah dengan menggunakan
.mjs
ekstensi file. Keuntungan dari ini adalah:Dan untuk garis waktu ...
Oktober 2016:
Salah satu pengembang di Node.JS baru-baru ini menghadiri pertemuan TC-39 dan menulis artikel hebat tentang blocker untuk diterapkan untuk Node.JS:
https://hackernoon.com/node-js-tc-39-and-modules-a1118aecf95e
Dasar pengambilan dari itu adalah:
*.mjs
tampaknya solusi yang paling mungkin, kecuali mereka dapat secara akurat mendeteksi Modul ES tanpa input pengguna- Jawaban Asli -
Ini telah menjadi kentang panas selama beberapa waktu. Intinya adalah bahwa ya, Node pada akhirnya akan mendukung sintaks ES2015 untuk mengimpor / mengekspor modul - kemungkinan besar ketika spesifikasi untuk memuat modul diselesaikan dan disepakati.
Berikut ini adalah ikhtisar yang baik tentang apa yang menahan NodeJS. Pada dasarnya, mereka perlu memastikan bahwa spesifikasi baru berfungsi untuk Node yang terutama bersyarat, pemuatan sinkron dan juga HTML yang terutama tidak sinkron.
Tidak ada yang tahu pasti sekarang, tapi saya membayangkan Node akan mendukung
import/export
untuk pembebanan statis, selain yang baruSystem.import
untuk pembebanan dinamis - sambil tetap menyimpanrequire
kode lawas.Berikut adalah beberapa proposal tentang bagaimana Node dapat mencapai ini:
sumber
.mjs
ekstensi:We have affectionately called these “Michael Jackson Script” files in the past
. Kalau-kalau Anda mendengar seseorang berbicara tentang artis pop selama JS talk.import * from 'foo'
akan memperlakukan foo.js sebagai CommonJSimport * as bar from 'bar'
akan memperlakukan bar.js sebagai Modul ES6 Dapatkah seseorang menjelaskan?