# Loaders
webpack 内置支持 js 和 json 两种文件类型,通过 loaders 去支持其他文件类型(比如 css, less, html 等),并且把他们转化成有效的模块。loader 本身是一个函数,接收源文件作为参数,返回转换的接口,供下一个 loader 使用。
# 常用 Loaders
- babel-loader: 转换 ES6、ES7 等 JS 新特性语法
- css-loader: 支持.css 文件的加载和解析
- less-loader: 将 less 文件转换成 css
- ts-loader: 将 TS 转换成 JS
- file-loader: 进行图片、字体等打包
- raw-loader: 将文件以字符串的形式导入
- thread-loader: 多进程打包 JS 和 CSS
# babel-loader (opens new window)
解析 js
- 安装
yarn add @babel/core @babel/preset-env babel-loader -D
配置
- test: 指定匹配规则
- use: 指定使用的 loader 名称
//webpack.config.js
const path = require(path);
module.exports = {
output: {
filename: "bundle.js",
},
module: {
rules: [
{
test: /\.js$/,
use: "babel-loader",
},
],
},
};
// .babelrc
{
"presets": ["@babel/preset-env"]
}
# css-loader (opens new window)
解析 css
- 安装
yarn add style-loader css-loader -D
配置
css-loader 用于加载.css 文件,并且转换成 commonjs 对象
style-loader 将样式通过
<style>
标签插入到 head 中
module.exports = {
output: {
filename: "bundle.js",
},
module: {
rules: [
{
test: /\.css$/,
use: ["style-loader", "css-loader"],
},
],
},
};
# less-loader (opens new window)
解析 less
- 安装
yarn add less less-loader -D
配置
- less-loader 将 less 语法转换为 css 语法
module.exports = {
output: {
filename: "bundle.js",
},
module: {
rules: [
{
test: /\.css$/,
use: ["style-loader", "css-loader", "less-loader"],
},
],
},
};
# file-loader (opens new window)
解析 图片、字体
- 安装
yarn add file-loader -D
// 资源转换成 base64
yarn add url-loader -D
- 配置
module.exports = {
output: {
filename: "bundle.js",
},
module: {
rules: [
{
test: /\.(png|jpg|gif|jpeg)$/,
use: ["file-loader"],
// 使用 base64
// use: [{
// loader: 'url-loader',
// options: {
// limit: 10240
// }
// }]
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: ["file-loader"],
// 使用 base64
// use: [{
// loader: 'url-loader',
// options: {
// limit: 10240
// }
// }]
},
],
},
};
# thread-loader (opens new window)
多进程构建,每次 webpack 解析一个模块,thread-loader (opens new window) 会将它及它的依赖分配给 worker 线程中
# 安装
yarn add thread-loader -D
# 代码示例
module.exports = {
entry: entry,
output: {
path: path.join(__dirname, "dist"),
filename: "[name].bundle.js",
},
mode: "development",
module: {
rules: [
{
test: /.js$/,
use: [
{
loader: "thread-loader",
options: {
workers: 3,
},
},
"babel-loader?cacheDirectory=true",
],
exclude: "node_modules",
},
],
},
};
← Introduction Plugins →