現代化 Web 開發技術學習分享

0%

從 Vue CLI v3 開始引入了 webpack-chain 套件,同時針對配置進行了高度抽象化,我們不能以先前配置 Webpack 的方式進行撰寫,而是必須閱讀官方文件配置在專屬的 vue.config.js 檔案內才能起作用,是不是覺得這樣太麻煩了?不如我們依照自己習慣手動建置一個 Vue CLI 環境吧!此篇將介紹如何使用 vue-loader 並搭配先前所介紹的 loader 與 plugin 手動建置出 Vue CLI 環境。
閱讀全文 »

之前在介紹如何正確挑選當前環境的 SourceMap 類型時,有提到如何以三元運算的方式達到自動切換的效果,通常在實際開發中,我們會有多個需判斷當前環境用以切換配置的需求,如果此時還是一樣使用三元運算方式做切換,可能會造成結構混亂導致不易閱讀的問題。此篇將介紹如何使用 webpack-merge 合併各自環境的 Webpack 配置檔,達到在不造成結構混亂的前提下區分 dev 與 prod 環境。
閱讀全文 »

一般在做各種開發時,我們很常引入一些 npm 套件加快功能的實現,比如說 AJAX 行為就很適合使用 axios 套件來完成,當我們使用 Webpack 進行打包時,相關的 npm 套件也會通通被打包進 bundle.js 內,但這樣的行為對效能來說是較不友善的,原因為 bundle.js 實在是太肥大了,正確的作法應該是將 node_modules 內的模組單獨打包成一個檔案,避免載入時間過長的問題。此篇將介紹如何使用 SplitChunksPlugin 抽離 node_modules 內模組使之成為獨立的檔案,後面也會介紹當我們在開發多頁式應用時,如何以 SplitChunksPlugin 抽離公用模組用以解決重複程式碼的問題。
閱讀全文 »

相比於 Gulp 需使用套件才能生成 SourceMap,Webpack 只需簡單的開啟 devtool 選項即可生成 SourceMap,且提供了多達 10 種以上的類型供開發者使用,簡直太強大。此篇將介紹如何在 Webpack 開啟 devtool 選項用以生成 SourceMap,並說明在各式 SourceMap 類型下,該如何針對 development (開發環境) 與 production (生產環境) 做最合適的挑選。
閱讀全文 »

在上一篇文章中,介紹了如何使用 Webpack 打包客製化的 Bootstrap 樣式,但在這邊還有一個問題,那就是打包出來的 CSS 太肥了,這也是 Bootstrap 為人所詬病的原因,我們根本不需要這麼多的樣式,可能一半以上的 CSS 都沒有使用到,當時的解決辦法是手動移除預設載入的 component,但我們使用的可是 Webpack 自動化工具阿!,當然也要以自動化方式進行處理。此篇將介紹如何使用 purgecss-webpack-plugin 清除多餘的 CSS 代碼,大幅縮減檔案大小。
閱讀全文 »

Bootstrap 目前已經算是前端必備的技能了,相信大部分人在使用時都是以 CDN 的方式進行載入,但這樣子的作法等同於將整個官方預編譯好的 Bootstrap 進行載入,當我們需要客製化 Bootstrap 樣式時,必定得採取其他方法。此篇將介紹如何使用 npm 方式載入 Bootstrap,並透過 sass-loader 編譯屬於我們自己的客製化樣式。
閱讀全文 »

在 Gulp 的環境中,我們會導入 Browsersync 套件方便以 Live Reload 方式做開發,在 Webpack 中也有類似的套件,名為 webpack-dev-server,與傳統 Live Reload 工具較為不同的是,除了支援 Live Reload 方式以外,同時也支援 HMR (Hot Module Replacement) 特性,再不刷新 Browser 的情況下注入修改過後的代碼,達到不丟失應用狀態下即時更新畫面。此篇將介紹如何使用 webpack-dev-server 以 Live Reload 或 HMR 方式進行開發,途中也會補充 publicPath 與 contentBase 這兩個坑人的選項正確用法。
閱讀全文 »

在我們每次編譯 Webpack 時,都必須刪除之前測試所建構的 dist 資料夾,以確保結果為最新狀態,可能有些人並沒有這個困擾,那是因為你並沒有在 filename 屬性加入 hash 值,此時編譯處理為取代其檔案,在一般開發中我們都會在檔案名稱加入 hash 值,避免快取機制發生的問題,此時由於檔案名稱的 hash 值不同,其編譯處理將轉為新增,dist 資料夾也就會遺留之前測試所建構出的檔案。此篇將介紹使用 clean-webpack-plugin 在每次編譯時刪除之前測試所建構出的檔案,接著才生成編譯結果。
閱讀全文 »

在之前介紹 Webpack 的各種 loader 時,最後都得手動生成 HTML 文件並引入相關的靜態檔案,這樣不是很矛盾嗎?Webpack 可是自動化工具阿!怎會有這麼個缺陷?不用擔心,那是因為我們還沒使用 html-webpack-plugin 這一個插件,html-webpack-plugin 可以幫助我們指定任意的 HTML 模板,並透過傳遞選項方式,生成對應的 HTML 文件,同時也會將 entry 內的所有靜態文件做引入動作,解決手動引入的困擾。此篇將介紹如何透過 html-webpack-plugin 生成自動引入靜態檔案的 HTML 文件。
閱讀全文 »

Babel 是一款 JavaScript 的編譯器,你可能會有疑問,JavaScript 不是可以直接在 Browser 上運行嗎?為何還需要編譯?事實上 JavaScript 從發行到現在,經過了許多版本的更新,常見的 ES6、ES7 都屬於較新的版本,最為穩定的版本為 ES5,兼容性也是最高的, Babel 的用意就是將較新版本的 JavaScript 編譯成穩定版本,以提高兼容性。此篇將介紹如何透過 babel-loader 編譯我們的 ES6+ 代碼,後面也會補充介紹 @babel/runtime 與 @babel/polyfill 組件的使用。
閱讀全文 »