webpack
做爲前端最火的構建工具,是前端自動化工具鏈最重要的部分,使用門檻較高。本系列是筆者本身的學習記錄,比較基礎,但願經過問題 + 解決方式的模式,之前端構建中遇到的具體需求爲出發點,學習webpack
工具中相應的處理辦法。(本篇中的參數配置及使用方式均基於webpack4.0版本
)htmlwebpack4.0中級教程專題
下文摘自webpack
中文網:前端
首先咱們要消除一個常見的誤解,
webpack
是一個模塊打包工具(module bundler),它不是一個任務執行工具,任務執行器是用來自動化處理開發中常見任務的,例如檢查(lint),構建(build),測試(test)等。相對於打包器,任務執行器所面對的邏輯問題更爲上層,你可使用上層的工具來管理整個持續集成(CI),而把打包的部分交給webpack
。node
webpack
在工具鏈中的角色定位是很是清晰的,那麼爲了與其餘流程進行合做,就須要使用任務管理工具來啓動webpack
,本文介紹兩種常見的方法。webpack
webpak
暴露了一些方法,使得開發者能夠經過調用他們而在腳本中啓動webpack
,使用的方法較爲簡單:web
//webpack-node.js const webpack = require('webpack'); const webpackConfig = require('./webpack.config.html.js'); const cowsay = require('cowsay'); const compiler = webpack(webpackConfig); compiler.run((err, stats)=>{ if (!err) { console.log(stats.toJson().assets); console.log(cowsay.say({text:'Congratulations!'})); } });
運行結果:gulp
這裏解釋一下上面代碼的基本邏輯,引入了webpack
模塊以及webpack.config.html.js
的配置文件(從這裏就很容易理解爲何webpack
的配置文件能夠導出爲一個函數或多個配置,它實際上也是做爲一個模塊參與到整個運行過程的),經過調用webpack([Object config])
方法獲得一個compiler
實例,調用compiler.run
方法就啓動了webpack
的構建功能,run方法的回調函數中若是有運行錯誤,能夠經過err
來獲取,與構建過程有關的信息都掛載在stats
對象(例如stats。toJson().assets
)。這樣便實現了以非命令行的方式啓動webpack
。緩存
gulp
是基於流的任務管理工具,實際上webpack
的細分功能使用gulp
也能夠作到,並且不少功能型插件都會提供針對grunt
,gulp
和webpack
等不一樣工具的集成方式。gulp
的確更適合作宏觀意義上的任務流管理,仍是那句老話,工具是提供便利的,而不是提供束縛的。官方文檔也提供了以下代碼示例:前端構建
//gulpfile.js var gulp = require('gulp'); var webpack = require('webpack-stream'); gulp.task('default',function(){ return gulp.src('src/entry.js') .pipe(webpack({ //...configs })).pipe(gulp.dest('dist/')); })
至此,webpack
已經被集成進了自動化工具鏈,開發者能夠按本身的需求來定製構建之後須要執行的任務,但webpack
的使命尚未結束,構建的結束距離用戶可以訪問站點和使用功能還須要很是多的工做要作,有不少問題並非在構建中出現的,可是卻須要在構建時加以處理,這個時候開發者又須要回過頭來爲webpack
增長配置。ide
例如不少開發者最初不理解構建過程當中爲何要使用hash
,chunkhash
等佔位符來把文件名變得醜陋無比,直到不一樣版本的產品上線時出現不強制刷新頁面就沒法訪問新資源的問題時,纔會開始關注版本更新和緩存策略的問題,而後纔會理解爲了標記版本而啓用hash
,爲了不重複構建而使用chunkhash
,爲了減少體積而使用tree-shaking
等等。函數
《webpack
4.0各個擊破》全系列文章就連載結束了,感謝您的關注,但願對你有所幫助,你也能夠經過如下方式查看個人其餘博文。