SlideShare a Scribd company logo
1 of 27
Download to read offline
Modern Front-End Workflow
with
Webpack
tz5514 周昱安
About Me
• 國立彰化師範大學 資訊工程學系 四年級
• 努力畢業中,準備前往中央資工所軟工碩
士班
• 前後端都寫,最近比較喜歡寫前端
• Laravel Taiwan 社群常客
• Github:github.com/tz5514
前言
Front-End Assets
Bundle 這件事
對 Assets 進行一些
轉譯、打包、壓縮、額外加工處理
Why we need to bundle CSS?
• Preprocessor
– SCSS、SASS
– LESS
• Import Font、Image
• HTTP request speed
SCSS ─ 可維護性更高的CSS
Variables 變數
Nesting 巢狀結構
Mixins
Import
Why we need to bundle JS?
• ES6
• Module system
• React JSX
• 這三樣需求目前瀏覽器都無法直接的完美運行
ECMAScript 6
• ECMAScript 是 JavaScript 的語言標準規格,後者是前者的實作品
• Node.js 是 ECMAScript 在伺服器端的實作品語言
• ECMAScript 6 是 2015 年時正式發表的新一代版本標準
• 簡言之,ES6 就是新版的 JavaScript。
What's wrong with ES6?
• 瀏覽器端的支援還不夠普遍, 目前僅支援部份 ES6 新功能
• 某些使用者可能永遠也不會更新到支援 ES6 的瀏覽器
• 因此現階段,我們需要一個 ES6 to ES5 的轉換器 ─ Babel
Module system
• 命名衝突
– 全域命名空間下容易造成變數命名衝突,尤其是跟第三方套件衝突時更難解決
• 程式碼間的順序與依賴性維護困難
– 開發人員必須自行理解並解決不同 JS 檔案之間,以及與第三方套件的相互依賴關係
• 在大型專案中各種資源難以管理,長期積累的問題導致程式碼庫混亂不堪
Why we need it?
But....
• JavaScript 這個語言長時間以來都沒有設計
這樣子的模組機制
• 直到 ES6 才有了官方的模組機制功能
常見的社群規範
• CommonJS:Node.js 的參考規範
• AMD
• UMD
• ES6 的官方模組機制融合了 CommonJS 與 AMD 優點
• Wabpack 對於 CommonJS、AMD、ES6 Module 皆支援
CommonJS
React JSX
• JSX 是熱門前端庫 React 使用的一種 JavaScript 特別語法,看起來像是在 JS
程式碼中直接寫HTML
• 目的是為了讓開發人員撰寫更容易維護的 React 程式碼
• 瀏覽器無法直接辨識,所以一樣需要轉換器來幫忙轉成原生的 JS 程式碼
– Babel
瀏覽器能夠支援的原生程式碼難以撰寫與維護,
因此我們先撰寫一些好維護但瀏覽器看不懂的程式碼與模組架構,
然後再交給工具來幫我們翻譯並打包成瀏覽器看的懂的,
以順利在使用者的瀏覽器上正常執行。
而這個工具就是 Webpack。
NPM(Node Package Manager)
• NPM 本身是 Node.js(後端)的套件管理系統
• 因為 Node.js 的逐漸熱門以及 NPM 的普及,前端的 JS 或 CSS 套件也被放
上了 NPM,逐漸也成為了前端的套件管理系統主流
• Bower 等純前端套件的管理系統漸漸式微
Package.json
Webpack 101
Why webpack?
• 性能優勢
• 可分拆的 bundle 個體
• 多樣性的插件
• HMR(React 開發神器)
webpack.config.js
webpack.config.js
• entry
• output
• resolve
• module - loaders
• devtool
• watch
• plugins
– ExtractTextPlugin
– BrowserSyncPlugin
– ProvidePlugin
– WebpackErrorNotificationPlugin
– UglifyJsPlugin
Demo
Thanks!
參考資料
• http://blog.visioncan.com/2011/sass-scss-
your-css/
• http://tw.peep-squirrel.com/itcontent-
2296114.html

More Related Content

What's hot

TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
Will Huang
 

What's hot (20)

TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
 
twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署twMVC#33玩轉 Azure 彈性部署
twMVC#33玩轉 Azure 彈性部署
 
twMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 Log
 
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波
 
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
 
twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1
 
Node.js 進攻桌面開發
Node.js 進攻桌面開發Node.js 進攻桌面開發
Node.js 進攻桌面開發
 
twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢twMVC#31網站上線了然後呢
twMVC#31網站上線了然後呢
 
twMVC#41 hololens2 MR
twMVC#41 hololens2 MRtwMVC#41 hololens2 MR
twMVC#41 hololens2 MR
 
twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解twMVC#43 Visual Studio 2022 新功能拆解
twMVC#43 Visual Studio 2022 新功能拆解
 
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
 
twMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvctwMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvc
 
SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17 SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17
 
课题二:Node.js那些事儿
课题二:Node.js那些事儿课题二:Node.js那些事儿
课题二:Node.js那些事儿
 
Angular 2 Taiwan 小聚 Forms 介紹
Angular 2 Taiwan 小聚 Forms 介紹Angular 2 Taiwan 小聚 Forms 介紹
Angular 2 Taiwan 小聚 Forms 介紹
 
以Code igniter為基礎的網頁前端程式設計
以Code igniter為基礎的網頁前端程式設計以Code igniter為基礎的網頁前端程式設計
以Code igniter為基礎的網頁前端程式設計
 
北護樂學程式冬令營 2017
北護樂學程式冬令營 2017北護樂學程式冬令營 2017
北護樂學程式冬令營 2017
 
twMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart FactorytwMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart Factory
 
Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web Framework
 
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
 

Similar to SITCON 2016 ─ Modern Front-End Workflow with Webpack

美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
pan weizeng
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
Scourgen Hong
 
从CI到CD[麻袋理财王天青]v1
从CI到CD[麻袋理财王天青]v1从CI到CD[麻袋理财王天青]v1
从CI到CD[麻袋理财王天青]v1
天青 王
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
Ailsa126
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
q3boy
 

Similar to SITCON 2016 ─ Modern Front-End Workflow with Webpack (20)

Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
美丽说的架构发展与变迁 New
美丽说的架构发展与变迁 New美丽说的架构发展与变迁 New
美丽说的架构发展与变迁 New
 
Yog Framework
Yog FrameworkYog Framework
Yog Framework
 
W3CTech美团react专场-React Native 初探
W3CTech美团react专场-React Native 初探W3CTech美团react专场-React Native 初探
W3CTech美团react专场-React Native 初探
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4
 
No sql@vip new
No sql@vip newNo sql@vip new
No sql@vip new
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
 
ServiceMesh-Runtime-FaaS三位一体.pdf
ServiceMesh-Runtime-FaaS三位一体.pdfServiceMesh-Runtime-FaaS三位一体.pdf
ServiceMesh-Runtime-FaaS三位一体.pdf
 
从CI到CD[麻袋理财王天青]v1
从CI到CD[麻袋理财王天青]v1从CI到CD[麻袋理财王天青]v1
从CI到CD[麻袋理财王天青]v1
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
網站上線了,然後呢?
網站上線了,然後呢?網站上線了,然後呢?
網站上線了,然後呢?
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 

SITCON 2016 ─ Modern Front-End Workflow with Webpack