以前的前端是摳圖仔,現在這個世道的前端,是打包仔。普遍都是用webpack了吧,畢竟現在正是各種框架當道(不用我說,你們也知道我說的是啥框架)。打出來的包吧,不處理一下,真的是很大。當然這次分享要說的是跟前端相關CDN操作,不討論前端打包的問題,要了解前端打包相關的,可以瞭解一下webpack的相關外掛和自行谷歌。
話說我們現在用工具打包,正常操作都是將npm包打包成一個包,將你自己的程式碼如angular的檔案啦、react的檔案啦、vue的檔案啦等等這些打成一個包。自己程式碼的這個包還好,不會很大,不影響。但是npm這個包吧,真的不是一般的大。雖然說我們的瀏覽器有一套快取機制,但就算是快取,也是要有首次載入的,這就會中造成首次載入很慢。
說了這麼多到底該怎麼辦呢?解決辦法就是CDN。這當然是絕大多數開發都知道的解決方案,這是個標準答案。關鍵是怎麼個操作過程?
今天就以webpack打包出來的檔案為例,記錄一下CDN的操作過程。由於我沒有用過react腳手架或是vue的腳手架,那麼這個就不在我的考慮範圍,當然我也知道那是可以改的,但由於沒有實際操作過,萬一說錯了也不好。
這個目錄結構相信很多人都是很熟悉的,而上面的build就是所有的打包檔案。而裡面的libs.js就是今天的主角,所有的npm包的打包檔案。我特意檢視了一下
這個檔案的大小就有1.1MB!!人家一個框架都沒有這麼大!!
一直在說CDN,那麼到底是哪一個CDN呢?總不可能我們一個摳圖仔、打包仔自己搭建一個CDN吧,當然有時間還是可以試試的,但今天說一下我用的CDN
jsDelivr - A free, fast, and reliable Open Source CDN for npm and GitHub
說說我為什麼使用這個,因為如果你的檔案是在npm或者是GitHub上
Load any project hosted on npm:
https://cdn.jsdelivr.net/npm/package@version/file
Load any GitHub release or commit:
https://cdn.jsdelivr.net/gh/user/repo@version/file
就拿npm來說,它可以關聯npm上面的所有的包,而它本身不需要做什麼工作,就等我們把npm包發到npm上面就可以了。
其實很簡單,我的操作步驟是這樣的:
在專案的當前資料夾新建一個資料夾,如第一個圖上面的libs_npm就是我新建的資料夾,看名字就知道,這個資料夾我是要放libs.js的,剛才說的,這個檔案是一個有1.1MB大小的所有npm包的打包檔案,而且要把這個檔案本身也打包成npm包。
npm打包的方法請看我給出的連結
在libs_npm這個資料夾裡新建一個index.js,然後裡面的內容能夠如下:
index.js
var a = require( './libs.js' );
module.exports = a;
複製程式碼
是的,將build中的libs.js複製到libs_npm中。
那麼這個時候就可以npm publish了。釋出的前提是你已經有npm的賬號了,不然就會提醒你必須先登入才能釋出。有了賬號就npm login,登入好了就可以釋出了。
就跟前面說的Load any project hosted on npm:
https://cdn.jsdelivr.net/npm/package@version/file
那麼我這裡就是
https://cdn.jsdelivr.net/npm/shebao-mobile-libs@1.0.1/libs.js
這個時候你的包檔案就生成了CDN連結了!
接下來要做的就是把webpack中的插入libs.js的操作去掉
// new AddAssetHtmlPlugin({
// filepath: require.resolve('./build/libs.js'),
// hash: true,
// includeSourcemap: false,
// }),
複製程式碼
最後就是在index.html中引用那你生成的CDN:
<body>
<div id="root"></div>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/shebao-mobile-libs@1.0.1/libs.js"></script>
</body>
複製程式碼
綜上的CDN操作就講完了
說點題外話吧,為什麼我要說自信的前端呢,因為在我看來,程式設計師並沒有什麼高低貴賤之分,有的只是充滿熱情的程式設計師和不那麼熱情的程式設計師,我把那些充滿熱情的人稱之為自信的人!?想必你的愛人就是看上你這點吧