初识 webpack (二)
初识 webpack (二)
基于 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 协议》,转载必须注明作者和本文链接