基於 webpack 4
1. ES6 語法解析
Babel 中文網: https://www.babeljs.cn/
npm i -D @babel/core @babel/preset-env babel-loader
兩種方式:
- 建立
.babelrc
檔案, 然後編寫 webpack 配置 - 直接在 webpack 配置中配置
方式一:
# .babelrc 檔案內容
{
"presets": [
"@babel/preset-env"
]
}
# webpack.config.js 中
module: {
rules: [
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
}
]
}
]
}
方式二:
# webpack.config.js 中
module: {
rules: [
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
options: {
"presets": [
"@babel/preset-env"
]
}
}
]
}
]
}
2. 解析 css, less 和 sass
# 解析 css
npm i -D css-loader style-loader
css-loader: 用於載入 .css 檔案, 並轉換為 commonJS 物件
style-loader: 用於將樣式通過 <style> 標籤插入到 head 頭中
# webpack.config.js[module.rules 中]
{
test: /\.css/,
use: ['style-loader', 'css-loader']
}
# 解析 less
npm i less less-loader -D
# webpack.config.js[module.rules 中]
{
test: /\.less/,
use: ['style-loader', 'css-loader', 'less-loader']
}
# 解析 sass
npm i sass-loader node-sass -D
# webpack.config.js[module.rules 中]
{
test: /\.(scss|sass)/,
use: ['style-loader', 'css-loader', 'sass-loader']
}
3. 解析 圖片 和 字型
有兩種 loader: file-loader 和 url-loader. url-loader 可以將小於某個值的圖片變為 base64
npm i -D file-loader
# webpack.config.js[module.rules 中]
{
test: /\.(jpg|png|gif|jpeg)/,
use: ['file-loader']
}
npm i -D url-loader
# webpack.config.js[module.rules 中]
{
test: /\.(jpg|png|gif|jpeg)/,
use: [
{
loader: 'url-loader',
options: {
limit: 10240
}
}
]
},
4. 檔案監聽
在原始碼發生變化時, 自動重新構建. 缺點: 需要手動重新整理瀏覽器
webpack 開啟監聽有兩種方式:
webpack --watch
- 在配置
webpack.config.js
中 設定watch: true
5. 熱更新
優點: 不用手動重新整理瀏覽器
不會輸出檔案, 而是放在記憶體中
npm i -D webpack-dev-server
# webpack.config.js 中
devServer: {
contentBase: './dist',
hot: true
}
# 命令
webpack-dev-server --open
原理
6. 檔案指紋
css 檔案一般使用 contenthash, js 檔案一般使用 chunkhash
7. 提取 css 檔案
npm i -D mini-css-extract-plugin
# webpack.config.js[module.rules 中]
{
test: /\.css/,
use: [MiniCssExtractPlugin.loader, 'css-loader']
},
# webpack.config.js[plugins 中]
new MiniCssExtractPlugin({
filename: '[name]_[contenthash:8].css'
})
8. 程式碼壓縮
型別 | 外掛 | 說明 |
---|---|---|
js 壓縮 | uglifyjs-webpack-plugin | webpack 4 內建了此外掛, 所以不需要做額外的操作, mode 為 production 預設打包出來的 js 檔案就是壓縮的 |
css 壓縮 | optimize-css-assets-webpack-plugin | 需要同時使用 cssnano |
html 壓縮 | html-webpack-plugin | minify 選項 |
8.1 css 壓縮
# webpack.config.js 中
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');
# webpack.config.js [plugins 中]
new OptimizeCssAssetsWebpackPlugin({
assetNameRegExp: /\.css$/,
cssProcessor: require('cssnano')
})
8.2 html 壓縮
# webpack.config.js 中
const HtmlWebpackPlugin = require('html-webpack-plugin');
# webpack.config.js [plugins 中]
new HtmlWebpackPlugin({
template: path.join(__dirname, 'src/search.html'),
filename: 'search.html',
chunks: ['search'],
inject: true,
minify: {
html5: true,
collapseWhitespace: true,
preserveLineBreaks: false,
minifyCSS: true,
minifyJS: true,
removeComments: false
}
})
本作品採用《CC 協議》,轉載必須註明作者和本文連結