2019年3月29日目前,Node 對 ES6 Module 的支持又有新進展。一個新的 PR 更新了當前 --experimental-modules
的實現方案。
type 動態判斷模塊加載模式
更新後的方案將根據 package.json
文件中指定的 type 值來判斷 js 文件是使用 ESM 還是 commonjs
- 如果 type 的值爲 module 那麼 js 文件將被作爲 ESM 加載
- 如果 type 的值爲 commonjs 那麼 js 文件將被作爲 commonjs 來加載
好處就是不需要使用 .mjs
這種與傳統 js 擴展名不同的寫法
使用 flag 指定入口文件模塊加載模式
更新後的方案允許開發者使用 --entry-type=type
的方式來指定入口文件的解析方式,判斷行爲與 package.json
的 type 一致
支持新的擴展名 .cjs
新的擴展名 .cjs
表示在 module 模式的加載環境下去使用 commonjs 來加載擴展名爲 .cjs
的模塊
模塊加載方式有所改變
新的 flag:--es-module-specifier-resolution=[type]
的默認值是 explicit
,和可選值 node
,在默認值的情況下引入模塊時必須書寫擴展名。
This implies that ./x will only ever import exactly the sibling file "x" without appending paths or extensions. "x" is never resolved to x.mjs or x/index.mjs (or the .js equivalents).比方說這裏加載
./x
模塊,那麼默認情況下只會加載名爲x
的模塊,而不是去嘗試加載x.mjs
或x/index.mjs
在 ESM 模式下加載 json 文件
--experimental-json-loader
flag 能夠在 ESM 模式下加載 JSON 文件。
導入的 json 文件將提供的 json 文件中的內容轉化爲一個對象或數組。就好像直接通過 JSON 模塊 parse 了一樣。
main 根據 type 的值確認入口文件加載模式
在 package.json
文件中的 main 字段指定入口文件,根據 type 字段來指定是 commonjs 還是 ESM 模式來加載。
參考:
請關注我的訂閱號,不定期推送有關 JS 的技術文章,只談技術不談八卦 😊