wepback風頭正火 ,可是公司一直在用gulp,正好遇上年末活動,藉此機會第一次嘗試了webpack,說實話webpack真的很強大,內容一層一層遞進。css
這幾天跟着官網跑了一遍,而後寫了本身的配置文件,由於活動內容很少,不少強大的功能沒有用上,可是相信對於入門來講足夠了。html
下面來總結並附上源碼前端
ES6,CommonJs,Amdnode
Webpack能夠經過衆多loader和plugin完成許多gulp上的功能,但Webpack本質在於模塊打包,而gulp的本質在於執行任務;使用webpack-stream包能夠實現gulp和webpack的搭配使用jquery
核心概念webpack
1.入口:指定使用哪一個模塊來做爲構建內部依賴圖的開始,隨後打包成bundleweb
2.輸出:定義輸出生產的bundle的位置及文件名;npm
3.loader:讓webpack能夠處理非js模塊;loader 能夠將全部類型的文件轉換爲webpack 可以處理的有效模塊。json
4. 插件:執行的任務範圍包括從打包優化和壓縮,一直到從新定義環境中的變量,目的在於完成一些loader沒法完成的任務。gulp
經常使用配置項
1.mode: ‘development’|| ‘production’ || ‘none’
2.entry: array || obj
3.output: {
path: path.resolve(__dirname, "dist"), // 輸出文件的目標路徑
filename:’bundle.js’,// 打包後的文件名
publicPath: ‘static’// 輸出解析文件目錄,url相對於html
}
4.module: {
rules: [
{
test: /\.js$/, // 指定使用此loader的文件
use: ‘babel-loader’,
options: { },
include: /src/, // 匹配項
exclude: /node_modules/ // 非匹配項
}
]
}
5.plugins: […instance]
6.devServer: {
host: ‘localhost’,
port: ‘8080’,
contentBase: Boolean|| string || array, // 服務器從哪裏獲取內容
hot:boolean, // 是否開啓webpack模塊熱替換
open: Boolean, // 是否自動打開瀏覽器
proxy: { path: targetUrl}, // 代理
…others
}
7.resolve: {
alias: {
test: url
},
extensions: [.js, .json]
}
8.devtool: string || false
可選值:
cheap-eval-source-map
eval-source-map
cheap-source-map
source-map
cheap-module-eval-source-map
…others
經常使用loader及plugin
loader
Css-loader:解析css中資源路徑;
Sass-loader:sass轉碼爲css
Postcss-loader:使webpack能夠用postcss處理css
Px2rem-loader: px轉換爲rem
Style-loader:將css以style標籤的形式插入到dom中
Babel-loader:轉碼js以提升兼容性
url-loader:圖片轉base64
webpack imagemin-webpack-plugin 壓縮圖片
file-loader:將文件輸出到輸出目錄並返回文件路徑
html-loader:處理html中資源路徑
eslint-loader:使js支持eslint
plugin
html-webpack-plugin:根據模板導出html文件,並注入bundle
DinePlugin: 建立編譯時能夠進行配置的全局變量。
HashedModuleIdsPlugin: 根據模塊的相對路徑生成一個四位數的hash做爲模塊id
extract-text-webpack-plugin:分離css
mini-css-extract-plugin:分離css
uglifyjs-webpack-plugin:壓縮js
optimize-css-assets-webpack-plugin:壓縮css
clean-webpack-plugin: 清空某個目錄
cli經常使用命令
--config 使用指定的配置文件
--env.key=value 指定環境變量
--mode=production 指定模式
--progress 打印編譯進度的百分比
--display-error-details 展現錯誤細節
--define 定義環境變量
-w 觀察文件變化,變化後從新執行構建流程
--hot 開啓模塊熱替換
--json > stats.json 將編譯結果的各類信息輸出爲json文件
--profile
捕獲編譯時每一個步驟的時間信息
配置文件編寫
前端常見需求:
1) Js壓縮
2) Css壓縮
3) Css提取
4) 小圖片轉base64
5) Px轉rem
6) Css前綴添加
7) Sass轉碼
8) Babel轉碼
9) 文件名加hash
10) 文件編碼格式轉換(常見utf-8與gbk互轉)
11) 代碼分離
12) Eslint
13) 模塊熱替換
14) 配置編譯過程的全局變量
15) 打包後的代碼注入html中
1. 經常使用模塊變量
__dirname:當前文件夾路徑
2. 經常使用佔位符
[hash]:模塊標識符的hash(後拼接:‘:n’可指定長度)
[chunkhash]: chunk內容的hash(後拼接:‘:n’可指定長度)
[name]:模塊名稱
[id]: 模塊標識符
3. 配置文件使用commonjs編寫的,配置類型有下面幾種:
1) 導出一個配置對象
2) 導出一個函數
3) 導出一個promise
代碼分離
該功能能夠把代碼分離到不一樣的 bundle 中,而後能夠按需加載或並行加載這些文件。代碼分離能夠用於獲取更小的 bundle,以及控制資源加載優先級,若是使用合理,會極大影響加載時間。
代碼分離的方式:
1.手動配置多個入口文件
2.使用webpack自帶的splitChunks功能
3.使用import()動態導入
下面附上本身的web.config.js