端技術範圍不斷髮展,前端開發不只限於直接編寫html,css和javascript,Web應用日益龐大,代碼也更加龐大,所以許多新的思想(例如模塊化和工程化等)和框架(React和Vue等),以及新的語言(Es6 TypeScript)隨之出現,而構建工具則承擔起了中間的橋樑做用。javascript
構建工具最直接的做用是:將源碼轉換成可執行的js
,css
和html
,具體包括:css
構建實際上是工程化和自動化思想的再前端的體現:將一系列流程用代碼自動去實現,解放生產力。html
npm是nodejs附帶的包管理器,npm script是npm內置的一個功能,容許在package.json
文件裏面使用script
字段定義任務:前端
{ "scripts":{ "dev":"node dev.js", "pub":"node build.js" } }
在這裏,一個屬性對應一段shell腳本,原理是經過調用shell去運行腳本命令。java
module.exports = function(grunt){ //插件的配置信息 grunt.initConfig({ uglify:{ app_task:{ files:{ 'build/app.min.js':['lib/index.js','lib/test.js'] } } } }) ... }
基於流的自動化構建工具。除了能夠管理和執行任務,還支持監聽讀寫文件。簡單例子:node
var gulp = require('gulp'); //引用基礎模塊 var uglify = require('gulp-uglify'); //js壓縮模塊 gulp.task('script',function(){ //啓動任務script gulp.src('js/*.js') //找到文件 .pipe(uglify()) //壓縮文件 .pipe(gulp.dest('dist/js')) //另存壓縮文件 }); //監聽 gulp.task('auto',function () { gulp.watch('js/*.js',['script']); //監聽script任務 gulp.watch('css/*.css',['css']); //監聽css任務 gulp.watch('images/*.*',['images']); //監聽images任務 });
fis3相對於前面的工具,集成了Web開發中經常使用的構建功能:webpack
match
配置壓縮器,實現前端工程優化CssSprite
(雪碧圖)配置,合併多個css導入的圖片到一個圖片,減小http請求webpack是一個打包模塊化js的工具,在webpack裏,一切文件都是模塊,經過Loader轉換文件,經過plugin注入鉤子,最後輸出由多個模塊組成的文件。webpack專一於構建模塊化項目。es6
Rollup是一個相似於Webpack模塊打包工具,但專一於ES6的模塊化。web
Tree Shaking
(簡單介紹剔除無效代碼,稍微詳細點就是能夠去除已經被定義卻沒被使用的代碼並進行Scope Hoisting
(做用域提高),以減少輸出文件的大小和提高運行性能。)code Spliting
(對打包生成的bundle.js文件進行分割成chunk
塊),因此沒有模塊加載、執行和緩存的代碼。好處是打包js庫時,文件更小,可是功能不夠完善parcel是一款剛誕生不久的新型打包器,而且短短几周內就得到大量贊同。shell
當項目比較龐大時,須要引入不一樣的庫,帶來了如下問題:
不一樣庫命名空間衝突(例如jq和zepto都使用了window.$)
庫之間有依賴,須要控制加載順序
須要管理庫的版本
這種狀況下,模塊化的思想出現了:將複雜系統分割成多個模塊以方便開發。 主要的模塊劃規範:
一種js模塊化規範,commonJS的核心是經過requrire
方法,同步加載所依賴的其餘模塊,經過module.exports
導出須要的接口,具體使用方式在此不深刻
另外一種js模塊化規範,與 commonJS的關鍵區別是異步加載所依賴的模塊。AMD主要針對瀏覽器環境的模塊化,表明實現是requirejs
ES6在語言層面實現模塊化,經過使用import
和export
導入和導出模塊。ES6的模塊化將要逐漸取代Commonjs和AND規範,是模塊化的終極解決方案。
前端工程化的意義,是爲了提升編碼->測試->維護 的運行效率,主要從開和部署兩方面來入手:開發方面須要作好代碼規範和開發模塊化;部署階段的主要流程包括:
工程化就是藉助構建工具實現流程自動化,而前端自動化能夠理解爲在工程化上作更進一步的自動化。
從前文對構建工具的介紹能夠看出,這裏的性能優化主要如下方面:
Sprite
(雪碧圖)技術熱重載也就是自動刷新,主要是監聽本地源代碼變化,自動從新構建和刷新瀏覽器,隨着新的技術框架的出現,例如Vue
,React
等,這門技術也基本成爲了開發標配。
若是內容有錯誤的地方歡迎指出(以爲看着不理解不舒服想吐槽也徹底沒問題);若是對你有幫助,歡迎點贊和收藏,轉載請徵得贊成後著明出處,若是有問題也歡迎私信交流,主頁有郵箱地址
參考資料,吳浩麟《深刻淺出 Webpack》