<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
已經有越來越多前端開發者放棄webpack
,改用vite
作為專案打包工具。
其中最主要的原因是 —— vite
在開發環境基於ESM
規範實現的Nobundle
模式,節省了程式碼打包的時間(當然,也有ESBuild
的功勞)。
而在生產環境,當前仍有打包的需求。
隨著瀏覽器的迭代,ESM
規範相容性越來越好,終有一天會進入生產環境大面積可用的狀態。
屆時生產環境打包將不再是剛需。
另一方面,從HTTP
協定的角度看,在HTTP/1.1
時代,多個模組被打包成一個檔案能減少瀏覽器並行請求數,達到優化目的。
但在HTTP/2
多路複用普及後,這麼做的意義就不大了。
可以說,當這些基建成熟後,生產環境使用ESM
模組是水到渠成的事情。
很多團隊預感到這點,很早就開始佈局相關產品。今天要介紹的Skypack
就是這樣一款產品。
Skypack
首次釋出於19年6月(曾用名Pika CDN
),是一款基於ESM規範的CDN服務。
在瀏覽器中,常見的CDN
服務通常以script
標籤的形式引入UMD
規範的程式碼,以ReactDOM
舉例:
<script crossorigin src="https://unpkg.com/react-dom@18.2.0/umd/react-dom.development.js"></script>
程式碼執行後會在全域性暴露物件window.ReactDOM
。
一些情況下,一個包還會依賴其他包,比如ReactDOM
還會依賴如下3個包:
React
scheduler
object-assign
為了應對這種情況,在生產環境開發者通常會將第三方依賴統一打包。
而Skypack
以ESM
規範引入程式碼:
// 在業務程式碼中引入如下語句 import ReactDOM from 'https://cdn.skypack.dev/react-dom';
瀏覽器會依次發起對包及其依賴的請求:
配合上瀏覽器的Module Preload特性,可以讓這些資源統一預載入。
這就解決了第三方依賴需要打包的問題。
如果你存取上述CDN
連結(https://cdn.skypack.dev/react...),會發現返回的結果並不是ReactDOM
的程式碼,而是下面兩句export
語句:
export * from '/-/react-dom@v17.0.1-oZ1BXZ5opQ1DbTh7nu9r/dist=es2019,mode=imports/optimized/react-dom.js';
export {default} from '/-/react-dom@v17.0.1-oZ1BXZ5opQ1DbTh7nu9r/dist=es2019,mode=imports/optimized/react-dom.js';
語句的背後才是ESM
規範的ReactDOM
程式碼。
之所以這麼做是因為:Skypack
會根據目標瀏覽器的UA為瀏覽器提供適合的包。
在高版本Chrome
中的程式碼不需要polyfill
,而在低版本IE
中的程式碼需要polyfill
,所以不同目標瀏覽器拿到的是不同的ReactDOM
程式碼。
上述export
語句中雜湊(oZ1BXZ5opQ1DbTh7nu9r)的不同就對應同一個版本的ReactDOM經過不同程度polyfill後的不同結果。
此外,在url
後加min
能得到壓縮後的程式碼:
import ReactDOM from 'https://cdn.skypack.dev/react-dom?min';
接下來讓我們看看Skypack
是如何處理請求的。
並不是所有包都有ESM
規範的產物(React
就沒有),當以如下url
格式存取任意包時:
// xxx替換為任意包名 import React from 'https://cdn.skypack.dev/xxx';
如果之前從未有人存取過這個包,則會構建包及其依賴的ESM產物並返回。
比如ReactDOM
本身只提供UMD
規範的產物,第一個存取他的Skypack CDN
連結的使用者會經歷如下步驟:
ReactDOM
及其依賴ReactDOM
及其依賴變為ESM
規範polyfill
程度的ESM
產物UA
返回對應的ReactDOM
在ReactDOM
的產物程式碼中可以看到,他依賴的三個包已經轉為ESM
規範:
除了Skypack
外,esm.sh也是類似功能的ESM CDN
服務。
等到前端基建成熟的那天,相信這些ESM CDN
服務一定能大放異彩。
以上就是Skypack佈局前端基建實現過程詳解的詳細內容,更多關於Skypack佈局前端基建的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45