pill 是一個小巧的為了解決靜態站點,web 內容加載問題,通過攔截js 的一些事件通過執行fetch 解決問題
原理說明
- 攔截導航事件(鏈接的點擊,以及歷史導航)
- 通過fetch 加載請求
- 獲取加收到的html 內容
- 替換當前頁面的內容
用途
解決我們單頁面應用資源加載的問題(還是希望實現動態內容加載,類似微前端的靈活管理需求)
使用
- 參考html
<html>
<head>
<title>Home</title>
<script src="https://unpkg.com/pill@1/dist/pill.min.js"></script>
<style>
/* global styles */
#indicator {
position: fixed;
top: 0;
right: 0;
display: none;
}
</style>
</head>
<body>
<div id="indicator">Loading
<div id="content">
<style>/* page styles */</style>
<!-- page content here -->
</div>
<script>
const indicator = document.querySelector('#indicator')
pill('#content', {
onLoading() {
// Show loading indicator
indicator.style.display = 'initial'
},
onReady() {
// Hide loading indicator
indicator.style.display = 'none'
}
})
</script>
</body>
</html>
- 提供的方法
標准調用方法簽名
(selector:string, options:PillOptions) -> void
鈎子:onError() , onLoading(), onMouting(), onReay()
幾個其他配置選項:
fromError() 可以用來自定義錯誤
getKetFromUrl() 通過url 或者加載的key
shouldReload() 決定上次加載的資源是否需要從server 獲取
shouldServe() 處理內容對於連接的處理,是使用原生的還是使用pill提供的
- 官方的一個demo
項目結構
說明
pill 的原理並不難,但是實現的功能確實比較實用的,我們就可以實現類似next.js 以及nuxt.js 的功能,但是需要的東西更少
實際上早期我們可能都會使用ajax+ template 的機制,進行占位內容的替換,pill增強了基於ajax+template 的能力,基於此我們
可以方便的融合多中框架,實現一個簡單的基於客戶端的微前端方案,同時結合下basket.js也是一個很好的使用
參考資料
https://github.com/rumkin/pill
https://github.com/addyosmani/basket.js