Node 引入 ESM 新方案

administration-articles-bank-261949.jpg

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.mjsx/index.mjs

提案在此:https://github.com/GeoffreyBo...

在 ESM 模式下加載 json 文件

--experimental-json-loader flag 能夠在 ESM 模式下加載 JSON 文件。

導入的 json 文件將提供的 json 文件中的內容轉化爲一個對象或數組。就好像直接通過 JSON 模塊 parse 了一樣。

main 根據 type 的值確認入口文件加載模式

package.json 文件中的 main 字段指定入口文件,根據 type 字段來指定是 commonjs 還是 ESM 模式來加載。

參考:

JS 菌公衆賬號

請關注我的訂閱號,不定期推送有關 JS 的技術文章,只談技術不談八卦 😊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章