Webpack 的 loader 配置
加载 CSS
所需依赖
🎉 LOADERS
less-loader/sass-loader/stylus-loader
postcss-loader
css-loader
style-loader/
MiniCssExtractPlugin.loader
🎉 PLUGINS
mini-css-extract-plugin
autoprefixer
1. 加载 CSS 的两种形式
通过 style-loader 加载到
<style>
标签中{ test: /\.css$/, use: [ { loader: 'style-loader', options: { insertAt: 'top' }, }, 'css-loader', ], },
通过 mini-css-extract-plugin 将所有 css 提取到
<link>
标签的 CSS 文件中{ test: /\.styl$/, use: [ { loader: MiniCssExtractPlugin.loader, options: { publicPath: './dist/', }, }, 'css-loader', 'postcss-loader', 'stylus-loader', ], },
2. 为 CSS 添加浏览器引擎前缀
在匹配到 css 文件时需要添加 postcss-loader
, 上方已有示例
此外还需要在根目录下新建 postcss.config.js
module.exports = {
plugins: [
require('autoprefixer'),
]
}
加载 Images
所需依赖
🎉 LOADERS
file-loader
html-loader
url-loader
1. 加载 Images 的三种方式
通过 JavaScript 加载
// index.js import Pic from './webpack01.png'; const newImage = new Image(); newImage.src = Pic; // 赋予 // webpack.config.js rules: [ { test: /\.(png|svg|jpg|gif)$/, use: [ { loader: 'file-loader' } ] } ]
通过 CSS 加载
#app { color: orangered; font-size: 0.5rem; width: 200px; height: 300px; background: url('./webpack01.jpg') }
其余的按照上方的配置即可
通过 HTML 加载
// index.html <img src="./webpack01.jpg" alt=""> // webpack.config.js rules: [ { test: /\.html$/, use: [ { loader: 'html-loader', options: { attrs: ['img:src'], // 此处匹配上方的 img 标签 src 属性 } } ] } ]
2. 优化 Images 加载
针对一些晓得图片没必要发送 HTTP 请求获取图片, 直接将图片转为 base64 的形式即可
// webpack.config.js
rules: [
// 需要注释掉 file-loader 这个匹配否则还会继续匹配然后生成图片
// {
// test: /\.(png|svg|jpg|gif)$/,
// use: [
// {
// loader: 'file-loader'
// }
// ]
// },
{
test: /\.(png|svg|jpg|gif)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 20*1024 // 小于 20k 的图片转为 base64
}
}
]
}
]
加载 Font(字体)
所需依赖
🎉 LOADERS
file-loader
url-loader
1. 加载 Font 的两种方式
使用
file-loader
// webpack.config.js rules: [ { test: /\.(woff|woff2|eot|ttf|otf)$/, use: [ { loader: 'file-loader', } ] } ]
/* style.css */ @font-face { font-family: 'ShanFont'; src: url('./ShanHunTianGeMoJi-2.ttf'); font-weight: 600; font-style: normal; } .shan { font-family: 'ShanFont'; color: blueviolet; }
使用
url-loader
url-loader
更进一步可以对资源的大小进行判断, 然后是否转成 base64 的资源