精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

CommonJS 和 ES Module 終于能夠互相兼容了

開發 前端
在 JavaScript 的世界里,模塊化是構建大型應用程序的基礎。模塊化幫助開發者管理代碼而不影響全局命名空間,使得分離功能、重用代碼和管理依賴變得更加容易。在 Node.js 和瀏覽器環境中,有兩種主流的模塊系統:CommonJS(CJS)和 ECMAScript Module(ESM)。

ECMAScript Module(ESM)逐漸成為現代 JavaScript 開發中的公認行業標準。自從 ESM 被引入到 Node.js 以來,其異步加載特性和模塊解析邏輯受到了廣泛歡迎。

然而,由于歷史原因,許多現有代碼庫和第三方庫仍然依賴于 CommonJS(CJS)模塊系統。由于 ESM 的設計是異步加載的,這兩種模塊化方案一直無法共存,這成為了許多開發者的一個主要痛點。

最近,開發者 joyeecheung 提交了一個重要的 Pull Request 來解決這個問題。

CJS 和 ESM 的過去與現在

在 JavaScript 的世界里,模塊化是構建大型應用程序的基礎。模塊化幫助開發者管理代碼而不影響全局命名空間,使得分離功能、重用代碼和管理依賴變得更加容易。在 Node.js 和瀏覽器環境中,有兩種主流的模塊系統:CommonJS(CJS)和 ECMAScript Module(ESM)。

CommonJS 是 Node.js 原生支持的模塊系統,最初是為了滿足服務器端的模塊化需求。CJS 使用 require 函數來加載模塊,并使用 module.exports 或 exports 對象來暴露代碼。CJS 模塊的特點是同步加載,這意味著模塊加載完成后,代碼會立即執行:

// math.js
function add(x, y) {
  return x + y;
}
module.exports = { add };

// app.js
const math = require('./math.js');
console.log(math.add(0, 17)); // 輸出 17

在服務器環境中,同步加載通常不是問題,因為大多數文件都是本地的。然而,在瀏覽器環境中,同步加載會導致性能問題,因為它會阻塞瀏覽器的事件循環,直到腳本完全下載和解析完畢。

ESM 是現代 JavaScript 的官方標準模塊系統,并且得到了最新版本瀏覽器的原生支持。與 CommonJS 不同,ESM 被設計為靜態的,這意味著不能在運行時動態加載或創建模塊。ESM 使用 import 和 export 語句進行模塊的導入和導出,支持異步加載:

// math.js
export function add(x, y) {
  return x + y;
}

// app.js
import { add } from './math.js';
console.log(add(0, 17)); // 輸出 17

ESM 的設計允許瀏覽器優化加載和解析過程,例如通過 HTTP/2 高效并行加載和通過樹搖優化去除未使用的代碼,從而提升性能和效率。然而,在 Node.js 中,ESM 的異步特性與大量現有的 CommonJS 模塊之間存在不兼容的問題。

在 Node.js 中啟用 ESM 目前需要更復雜的方法,因為默認情況下,.js 文件擴展名與 CommonJS 模塊關聯。為了解決這個問題,Node.js 允許使用 .mjs 文件擴展名或在 package.json 中顯式指定 "type": "module" 屬性來指示 ESM 模塊。

雖然 Node.js 支持導入 CommonJS 模塊,但卻無法通過 require 加載 ESM 模塊。這種因 ERR_REQUIRE_ESM 錯誤導致的挫敗感困擾了許多人,并且可能是 Node.js 生態系統內時間浪費的主要原因之一。

如果包作者希望確保 CJS 和 ESM 用戶都能使用他們的包,他們要么必須繼續發布 CJS 模塊,要么發布 CJS 和 ESM 版本的雙模塊(這可能會引發一些問題,但現在已經是一種非常普遍的做法)。

同時,許多轉譯器(例如 TypeScript 編譯器)仍然配置為生成 CJS 代碼作為最終輸出。這些轉譯器的用戶使用 ESM 語法編寫代碼,但他們可能不知道他們的代碼最終由 Node.js 作為 CJS 運行。當他們的代碼使用真正的 ESM 第三方模塊(無法被 require)時,他們會看到 ERR_REQUIRE_ESM。這會非常令人困惑,因為他們可能認為他們的代碼是作為真正的 ESM 運行的。

為什么不能兼容?

自然,人們可能會問:為什么 require() 不支持加載 ESM?

長時間以來,Node.js 項目的回答一直是這樣的:

使用 require 加載 ES 模塊是不支持的,因為 ES 模塊是異步執行的。

但是,這種情況中的文檔和其他形式的溝通可能會誤導人們——或許他們只是在談論 Node.js 中的 ESM 發生了什么,而不是 ESM 本身的設計。去年,當 joyeecheung 在閱讀 V8 代碼以修復內存泄漏問題時,他偶然發現 ESM 本身并沒有被設計為無條件異步的。相反,它是有條件異步的——只有當代碼中有頂級 await 時,它才會是異步的。

所以,支持 require() 加載不包含頂級 await 的 ESM 并沒有什么問題。雖然有些庫可能有正當理由使用頂級 await,但這可能并不常見。

事實上,當 joyeecheung 后來測試了 npm 注冊表上的大約 30 個僅通過 ESM 提供支持的包時,沒有一個包含頂級 await——支持同步模塊的 require() 可能已經解決了生態系統中的許多頭痛問題。

早期探索和嘗試

對 ESM 的支持經歷了長時間的討論、設計和實驗。早在 2019 年,Node.js 社區就開始探索如何支持 ESM 和 CommonJS 之間的互操作性。在此期間,許多開發者提交了 Pull Requests,提出了不同的實現方案和改進措施。

當時,一個里程碑式的 PR 討論集中在如何在 Node.js 中支持 .mjs 擴展名的文件以及如何實現同時支持 CommonJS 和 ESM 的雙模塊系統。

該請求嘗試通過在加載器中循環事件來處理頂級 await,但其方法不安全,這就是它被關閉的原因。

在規范方面,基于語法的 ESM 同步評估的理論基礎在 2019 年已經確立。隨著時間的推移,在 Node.js 中似乎形成了一個關于“ESM 是異步的,CJS 是同步的,因此 CJS 不能加載 ESM”的神話。然而,在標準組織中,ES 規范特別確保 ESM 是有條件異步的。W3C 規范使用它來確保 Service Workers 只允許同步模塊評估。如果在 2019 年之后,規范中的語法同步性被更廣泛地認識到,可能會有更多的嘗試,文檔也不會無條件地討論 ESM 作為異步的。

支持同步 require(esm)

去年底,joyeecheung 發現根據語法,ESM 可以是同步的,只有 Node.js 引入了異步到加載過程中。因此,joyeecheung 和 GeoffreyBooth 開始討論重啟同步 require(esm)。

在 2024 年 2 月底,當 joyeecheung 在為 CJS 和 ESM 加載器做類似緩存的工作并再次深入研究它們時,他注意到似乎有一個更簡單的實現方法——只需放棄“使 ESM 加載器成為 Node.js 中唯一加載器”的想法,并為 CJS 加載器實現一些專用程序以支持同步 require(esm)。使用的現有 ESM 加載器代碼越少,越容易實現。

于是,這個 PR 誕生了。

https://github.com/nodejs/node/pull/51977。

與 2019 年的 PR 的主要區別在于,這次嘗試將 require(esm) 的范圍縮小,僅支持同步加載 ESM。事實證明,在技術指導委員會(TSC)中,這并不是一個有爭議的想法,并沒有引起太多爭議。

目前,該功能仍在通過 --experimental-require-module 標志進行實驗,并且在退出實驗階段之前需要完成一些工作。

目前,require(esm) 僅支持顯式標記為 ESM 的 ESM 模塊——要么通過 .mjs 擴展名,要么通過使用 .js 擴展名的 “type”: “module” 包字段。這足以支持 npm 中的 ESM-only 包。當一個 .js 文件包含 ESM 語法并且其最近的 package.json 中沒有 “type”: “module” 字段時,它可以“回退”到 ESM 加載,但這是用戶應該避免的事情——ESM 語法檢測會帶來開銷,一旦你的項目中有足夠的 ESM 模塊,你可能不希望 Node.js 浪費時間猜測你的模塊類型。特別是,只需在 package.json 中使用顯式的 “type”: “module” 字段,就可以節省這些開銷。

最后

老實說,這個問題困擾了我很長時間。許多 NPM 包開發者也深受其害。我希望 joyeecheung 的這次嘗試能夠盡快投入生產!

責任編輯:姜華 來源: 大遷世界
相關推薦

2021-08-11 07:54:47

Commonjs

2022-06-18 23:10:56

前端模塊循環依賴

2025-11-07 00:00:00

2016-06-05 17:35:44

容器/虛擬化/東網科技

2024-07-08 00:00:07

2023-10-31 07:40:15

EslintJSHint

2025-02-07 15:58:43

2013-01-22 10:54:51

HTML5App移動應用

2020-09-14 14:30:31

WindowsLinux命令

2023-11-08 08:40:35

JavaScriptS 模塊

2020-02-23 16:33:02

GitHub印度子公司

2021-07-29 20:29:36

Linux c 代碼Java

2024-07-16 16:53:09

2022-05-06 20:18:36

元宇宙Web 3.0網絡

2022-08-18 20:44:34

HDFS架構流程

2017-03-16 07:18:46

科技新聞早報

2014-01-24 09:55:23

IBM云計算SoftLayer

2020-08-06 16:55:37

虛擬化底層計算機

2011-07-27 09:41:34

MySQL
點贊
收藏

51CTO技術棧公眾號

亚洲精品日韩在线观看| 欧美日韩中文字幕一区二区三区| 尤物在线精品| 色综合 综合色| 日韩在线观看你懂的| 天堂…中文在线最新版在线| 国产精品呻吟久久| 成人短片线上看| 色婷婷久久综合| 在线码字幕一区| 日韩久久久久久久久久| 伊人久久大香线蕉综合网蜜芽| 亚洲综合视频网| 91传媒免费看| 久久精品www人人爽人人| av在线亚洲一区| 《视频一区视频二区| 国产精品专区第二| 国产精品久久国产精麻豆96堂| 天天免费亚洲黑人免费| 久久一夜天堂av一区二区三区| 欧美激情乱人伦一区| 中文字幕乱妇无码av在线| 国产调教视频在线观看| 久久精品高清| 欧美日韩视频在线观看一区二区三区 | 无码熟妇人妻av| av福利在线导航| av网站一区二区三区| 久久久久久久成人| 中文字幕a在线观看| 韩国精品一区| 久久精品亚洲乱码伦伦中文| 国产精品久久久久aaaa九色| 在线观看免费黄色网址| 亚洲人体在线| 日韩欧美一区二区三区| 日本一区二区不卡高清更新| 91黑人精品一区二区三区| 欧美色图激情小说| 日韩精品在线视频| 国产精品igao| 精品黄色免费中文电影在线播放| 久久久久久久久久久久久女国产乱| av一区观看| 日韩久久中文字幕| 成人动漫免费在线观看| 国产视频自拍一区| 黄色短视频在线观看| 韩日精品一区| 亚洲精品视频在线观看免费| 国产一区免费观看| 伊人成年综合网| 美女精品网站| 欧美成人国产va精品日本一级| 在线观看成人动漫| 欧美日韩国产网站| 在线免费不卡电影| 无码人妻精品一区二区蜜桃网站| 日本韩国精品一区二区| 久久国内精品视频| 97视频在线观看视频免费视频| 免费看黄色的视频| 色播一区二区| 91国内精品野花午夜精品| 黄色一级视频播放| 精品99又大又爽又硬少妇毛片| 久久福利视频一区二区| 91av视频在线播放| 国产三级国产精品国产国在线观看 | 精品国产91久久久| 亚洲精品视频一区二区三区| 成人在线免费观看| proumb性欧美在线观看| 精品伦精品一区二区三区视频| 伊人久久国产精品| 在线一区欧美| 久久综合伊人77777尤物| 日本黄色网址大全| 日本a级不卡| 毛片精品免费在线观看| 久久精品国产亚洲AV无码男同| 日韩电影一区| 亚洲久久久久久久久久久| 超级砰砰砰97免费观看最新一期 | 福利小视频在线| 国产欧美日韩另类视频免费观看| 国产一区二区视频在线免费观看| 神马久久精品| www..com久久爱| 日韩理论片在线观看| 午夜国产在线观看| 国产69精品久久777的优势| 国产精品一久久香蕉国产线看观看| 97精品人妻一区二区三区在线| 久久亚洲国产精品一区二区| 久久久久久69| 伊人久久中文字幕| 粉嫩高潮美女一区二区三区| 欧美视频1区| 香蕉视频免费在线看| 欧美韩国日本不卡| 人人妻人人做人人爽| 黄网站app在线观看| 精品二区三区线观看| 激情五月俺来也| 亚洲爱爱视频| 日韩成人av网| 黄色国产在线观看| 久久人体视频| 欧美孕妇孕交黑巨大网站| 一级免费在线观看| 99亚洲精品| 91日韩在线播放| 国产一区二区麻豆| 91麻豆国产精品久久| 久久久久久精| 欧美日韩激情视频一区二区三区| 91丨九色丨尤物| 国风产精品一区二区| free性欧美hd另类精品| 亚洲美女屁股眼交| 欧美日韩大尺度| 欧美天堂在线| 一本久道中文字幕精品亚洲嫩| 国产精品嫩草影视| 日韩中文字幕视频网| 中文欧美日本在线资源| 中文字幕欧美激情极品| 青青草成人影院| 51色欧美片视频在线观看| 国产成人精品亚洲精品色欲| 粉嫩一区二区三区性色av| 亚洲午夜在线观看| 91一区二区三区在线| 亚洲自拍偷拍图区| 日韩成人精品视频在线观看| 99精品国产高清一区二区麻豆| 亚洲丁香久久久| 日韩av在线看免费观看| 久久蜜桃av| 国产女精品视频网站免费| 欧美亚洲日本| 色伊人久久综合中文字幕| xxxx黄色片| 国产欧美亚洲精品a| www亚洲精品| 国产一级一片免费播放放a| 国模大尺度一区二区三区| 国内一区二区在线视频观看| 色呦呦在线视频| 日韩欧美在线免费| 日本丰满少妇裸体自慰 | 欧美激情成人在线视频| 精品久久无码中文字幕| 99re热这里只有精品视频| 水蜜桃亚洲精品| 日本三级在线观看网站| 日韩一区二区三区高清免费看看| 一女三黑人理论片在线| 国产亚洲成人一区| 91网站在线看| av电影免费在线观看| 日韩手机在线导航| 五月天婷婷丁香| 蜜桃av一区二区| 精品在线一区| 欧美大胆性生话| 亚洲最新av在线| 亚洲精品视频在线观看免费视频| 成人黄色网址在线观看| 亚洲一区二区四区| 国产精品视频一区视频二区| 亚洲免费精彩视频| 中文字幕+乱码+中文| 亚洲人成网站在线| 国产一区二区在线免费播放| silk一区二区三区精品视频| 亚州国产精品久久久| 日韩av视屏| 欧美日本不卡视频| 自拍偷拍中文字幕| 青娱乐精品视频| 欧美亚洲丝袜| 天天综合91| 欧美极品少妇xxxxⅹ免费视频 | 久久久国产成人精品| 中文字幕免费观看| www.欧美.com| 中文字幕欧美人妻精品一区| 亚洲天天综合| 成人精品久久久| 成人在线高清视频| 日韩欧美卡一卡二| 三级影片在线看| 94色蜜桃网一区二区三区| 日韩av片网站| 在线日本高清免费不卡| 动漫一区二区在线| 91麻豆一二三四在线| 亚洲黄色片网站| 久久草视频在线| 国产精品国产三级国产普通话99 | 亚洲午夜18毛片在线看| 成人欧美一区二区三区视频网页| 少妇激情一区二区三区视频| 蜜桃91丨九色丨蝌蚪91桃色| 两根大肉大捧一进一出好爽视频| 综合久久成人| 久久久久久久久久国产| youjizz在线播放| 亚洲国产精品嫩草影院久久| 97人妻一区二区精品免费视频| 日韩欧美中文第一页| 在线免费日韩av| 成人三级在线视频| 秋霞无码一区二区| 99久久激情| 114国产精品久久免费观看| 免费观看一级欧美片| 亚洲午夜精品视频| 一本色道久久综合熟妇| 日韩毛片在线免费观看| 精品无码人妻一区二区免费蜜桃 | 国产福利片在线| 在线亚洲人成电影网站色www| 免费视频一二三区| 亚洲人被黑人高潮完整版| 欧美aaa级片| 国产亚洲成年网址在线观看| 久热精品在线播放| 丝瓜av网站精品一区二区| 国产h视频在线播放| 免费一区二区三区视频导航| 国产精品三级久久久久久电影| jizz在线观看视频| 亚洲区一区二区| 国产农村老头老太视频| 亚洲综合免费观看高清完整版在线 | 国产精品丝袜91| 波多野结衣在线免费观看| 黄色欧美成人| 午夜精品一区二区三区在线观看| 亚洲品质自拍| 欧美日韩免费精品| 在线日本制服中文欧美| 日本成人黄色免费看| 一本久久青青| 日韩精品伦理第一区| 精品国产美女| 亚洲国产精品www| 不卡在线一区| av动漫免费观看| 免费观看久久av| 欧美三级电影在线播放| 国产成人三级| 亚洲成色www久久网站| 日韩在线欧美| 国产日产欧美一区二区| 欧美日韩精品免费观看视频完整| 欧日韩一区二区三区| 欧美热在线视频精品999| 欧美在线激情| 成人久久综合| 日韩国产精品毛片| 欧美日韩天堂| 久久无码高潮喷水| 日韩国产高清在线| 欧美精品久久久久久久久久久| 91久久视频| 18岁视频在线观看| 亚洲电影av| av动漫在线观看| 欧美精品91| 每日在线观看av| 久久字幕精品一区| 一起操在线视频| 日韩精品久久久久久| 亚洲国产成人va在线观看麻豆| 久久99精品久久久| 人妻换人妻a片爽麻豆| 久久久久国产成人精品亚洲午夜| 永久免费观看片现看| 亚洲自拍偷拍欧美| 亚洲国产av一区二区三区| 91精品国产麻豆国产自产在线| 波多野结衣在线观看视频| 51精品秘密在线观看| 在线观看一二三区| 日韩精品中文字幕在线一区| 青青草免费在线| 久久综合久久88| 亚洲色图官网| 亚洲欧美欧美一区二区三区| 欧美精品免费播放| 伊人av在线播放| 国产乱视频在线观看| 色综合久久久久| 一级黄色片在线观看| 亚洲第一精品久久忘忧草社区| 国产美女视频一区二区三区| 色综合五月天导航| 成人精品一区二区三区电影| 另类色图亚洲色图| 涩涩涩在线视频| 91黄色8090| 亚洲久草在线| 欧美日韩国产综合视频在线| 欧美va天堂在线| 蜜臀av性久久久久蜜臀av| 一本久久青青| 欧美大片免费播放| 日产欧产美韩系列久久99| 欧美xxxxx精品| 亚洲男人的天堂在线aⅴ视频 | 亚洲va欧美va人人爽| 黄色片子在线观看| 亚洲男人电影天堂| 中文字幕69页| 在线看日本不卡| 高潮一区二区三区乱码| 精品久久久久久久久久久久包黑料| 丰满熟妇乱又伦| 自拍偷拍亚洲区| 免费成人动漫| 精品久久精品久久| 好吊一区二区三区| 九九九九九九九九| 国产精品人人做人人爽人人添| 东京热无码av男人的天堂| 精品国产成人av| 亚洲乱码精品久久久久..| 亚洲成年人在线播放| av网站在线看| 成人免费视频97| 99视频精品视频高清免费| 一区二区三区韩国| 久久久一区二区三区| 天天操天天操天天操天天| 亚洲成人精品久久久| 污片在线免费观看| 国产高清自拍99| 女主播福利一区| gogo亚洲国模私拍人体| 亚洲人成伊人成综合网小说| 国产免费不卡av| 久久福利网址导航| 香蕉大人久久国产成人av| 成人污网站在线观看| 成人福利电影精品一区二区在线观看 | 国产 porn| 国产精品欧美经典| 国产一区二区三区三州| 久久躁狠狠躁夜夜爽| 成人在线视频www| 欧美 日韩 国产精品| 成人性生交大片免费看中文网站| 国产精品9191| 日韩av在线资源| 粉嫩一区二区三区| 91久久久一线二线三线品牌| 综合五月婷婷| 无码人妻精品一区二区三区99不卡| 亚洲成a人片在线观看中文| 一级黄色片免费| 久久99精品国产99久久6尤物| 希岛爱理一区二区三区av高清| 青青草国产精品| 精品在线播放午夜| 久久久久亚洲av无码专区| 欧美日韩亚洲综合一区| 黄色免费在线网站| 高清不卡日本v二区在线| 国产欧美日韩综合一区在线播放| 国产精品成人一区二区三区电影毛片| 欧美亚洲一区二区在线| 色网站免费观看| 久久艹在线视频| 综合视频一区| 久久久久狠狠高潮亚洲精品| 国产精品美女久久久久久久| 国产精品女人久久久| 久久免费国产精品1| 涩涩屋成人免费视频软件| 欧美丰满熟妇bbbbbb百度| 国产精品美女久久久久aⅴ| 亚洲国产精品二区| 国产精品盗摄久久久| 欧美国产高清| 国产av自拍一区| 日韩一区二区三| 毛片免费看不卡网站| 97在线免费视频观看| 国产亚洲精品资源在线26u| 国产成人精品一区二区无码呦| 国产91色在线免费| 日本午夜精品久久久| 国产美女在线一区| 日本一区二区三区四区| 亚洲黄色小说网|