僅針對初中級,大概梳理下面幾個css
webpack是一個靜態模塊處理器,當它處理應用程序時,它會遞歸地構建一個關係依賴圖,其中包含應用程序須要的每一個模塊,而後把全部這些模塊打包成一個或多個包。前端
告訴webpack要使用哪些模塊,做爲內部依賴圖的開始webpack
告訴webpack在哪裏輸出它所構建的bundles,以及如何命名這些文件web
處理非JS文件,把文件轉換成webpack能處理的模塊gulp
loader 有兩個屬性:segmentfault
- test 屬性,用於標識出應該被對應的 loader 進行轉換的某個或某些文件。
- use 屬性,表示進行轉換時,應該使用哪一個 loader。
複製代碼
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); //引入plugin
module.exports = {
// JavaScript 執行入口文件
entry: './main.js',
output: {
// 把全部依賴的模塊合併輸出到一個 bundle.js 文件
filename: 'bundle.js',
// 輸出文件都放到 dist 目錄下
path: path.resolve(__dirname, './dist'),
},
module: {
rules: [
{
// 用正則去匹配要用該 loader 轉換的 CSS 文件
test: /\.css$/,
use: [
{loader: MiniCssExtractPlugin.loader},
'css-loader',
],
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: `[name]_[contenthash:8].css`,
chunkFilename: '[id].css',
})
]
};
複製代碼
模塊,在 Webpack 裏一切皆模塊,一個模塊對應着一個文件。Webpack 會從配置的 Entry 開始遞歸找出全部依賴的模塊。bash
代碼塊,一個 Chunk 由多個模塊組合而成,用於代碼合併與分割。babel
有大量現成的插件封裝了常見的任務,也能管理任務之間的依賴關係,自動化執行依賴的任務前端構建
是一個基於流的自動化構建工具。 除了能夠管理和執行任務,還支持監聽文件、讀寫文件。Gulp 被設計得很是簡單,只經過下面5個方法就能夠勝任幾乎全部構建場景:模塊化
Gulp 的最大特色是引入了流的概念,同時提供了一系列經常使用的插件去處理流,流能夠在插件之間傳遞。Gulp 的優勢是好用又不失靈活,既能夠單獨完成構建也能夠和其它工具搭配使用。
grunt和gulp是基於任務和流(Task、Stream)的。相似jQuery,找到一個(或一類)文件,對其作一系列鏈式操做,更新流上的數據, 整條鏈式操做構成了一個任務,多個任務就構成了整個web的構建流程。其缺點是集成度不高,要寫不少配置後才能夠用,沒法作到開箱即用。
webpack是基於入口的。webpack會自動地遞歸解析入口所須要加載的全部資源文件,而後用不一樣的Loader來處理不一樣的文件,用Plugin來擴展webpack功能。
因此總結一下:
從構建思路來講 gulp和grunt須要開發者將整個前端構建過程拆分紅多個Task
,併合理控制全部Task
的調用關係 webpack須要開發者找到入口,並須要清楚對於不一樣的資源應該使用什麼Loader作何種解析和加工
file-loader:把文件輸出到一個文件夾中,在代碼中經過相對 URL 去引用輸出的文件
source-map-loader:加載額外的 Source Map 文件,以方便斷點調試
image-loader:加載而且壓縮圖片文件
babel-loader:把 ES6 轉換成 ES5
css-loader:加載 CSS,支持模塊化、壓縮、文件導入等特性
eslint-loader:經過 ESLint 檢查 JavaScript 代碼
define-plugin:定義環境變量
commons-chunk-plugin:提取公共代碼
uglifyjs-webpack-plugin:經過UglifyES壓縮ES6代碼
一、初始化:啓動構建,讀取和合並參數,加載plugin,實例化complier
二、編譯:從 Entry 發出,針對每一個 Module 串行調用對應的 Loader 去翻譯文件內容,再找到該 Module 依賴的 Module,遞歸地進行編譯處理。
三、輸出:對編譯後的 Module 組合成 Chunk,把 Chunk 轉換成文件,輸出到文件系統。