webpack、gulp、rollup 使用對比和適用場景

主要對三種打包工具使用對比,還有一些場景的分析

一、webpack

webpack是資源模塊打包工具,根據我們的資源依賴樹,分不同類型打包成靜態資源,支持熱更新,代碼模塊切分,three-shaking、異步加載等、

特性:

不同資源的模塊打包 熱更新 代碼分割 靜態資源壓縮 異步加載 three-shaking

適用場景

應用程序打包

二、rollup

Rollup 是一個模塊打包工具, 可以將我們按照 ESM (ES2015 Module) 規範編寫的源碼構建輸出如下格式:

  • IIFE: 自執行函數, 可通過 <script> 標籤加載
  • AMD: 通過 RequireJS 加載
  • CommonJS: Node 默認的模塊規範, 可通過 Webpack 加載
  • UMD: 兼容 IIFE, AMD, CJS 三種模塊規範
  • ESM: ES2015 Module 規範, 可用 Webpack, Rollup 加載-

特性:

支持動態導入。

支持tree shaking。僅加載模塊裏用得到的函數以減小文件大小。

Scope Hoisting。 rollup可以將所有小文件生成到一個大文件中,所有代碼都在同一個函數作用域裏:, 不會像 Webpack 那樣用很多函數來包裝模塊。

沒有其他冗餘代碼, 執行很快。除了必要的 cjs, umd 頭外,bundle 代碼基本和源碼差不多,也沒有奇怪的 webpack_require, Object.defineProperty 之類的東西,

缺點:

不支持熱更新功能;對於commonjs模塊,需要額外的插件將其轉化爲es2015供rollup 處理;無法進行公共代碼拆分。 運行時態的動態導入 dynamic imports at runtime.

rollup 通過插件來編譯處理各類靜態資源:

  • rollup-plugin-typescript2
  • rollup-plugin-babel
  • rollup-plugin-uglify
  • rollup-plugin-commonjs
  • rollup-plugin-postcss
  • rollup-plugin-img
  • rollup-plugin-json

適用場景:

由純js開發的第三方庫; 需要生成單一的umd文件的場景

三、gulp

自動化構建工具,把項目工作抽象成自動化任務 用gulp構建自動化工作流,處理項目中的資源,基於流式操作。

特性 gulp文檔簡單,學習成本低,使用簡單;對大量源文件可以進行流式處理,藉助插件,可以對文件類型進行多種操作處理。

適用場景 靜態資源密集操作型場景,主要用於css、圖片等靜態資源的處理操作。 文件處理:

gulp通過各種中間件處理靜態資源的編譯:

  • gulp-load-plugins:自動加載 package.json 中的 gulp 插件
  • gulp-rename: 重命名
  • gulp-uglify:文件壓縮
  • gulp-concat:文件合併
  • gulp-less:編譯 less
  • gulp-sass:編譯 sass
  • gulp-clean-css:壓縮 CSS 文件
  • gulp-htmlmin:壓縮 HTML 文件
  • gulp-babel: 使用 babel 編譯 JS 文件
  • gulp-jshint:jshint 檢查
  • gulp-imagemin:壓縮jpg、png、gif等圖片
  • gulp-livereload:當代碼變化時,它可以幫我們自動刷新頁面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章