# html-loader
**Repository Path**: mini-tiger/html-loader-withhook
## Basic Information
- **Project Name**: html-loader
- **Description**: Webpack HTML loader with extensible tag/attribute hooks
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-04-13
- **Last Updated**: 2025-05-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# html-loader-withhook
Enhanced HTML loader with Hooks support for webpack.
## 新增功能
- 支持标签处理器 Hook
- 支持属性处理器 Hook
- 继承原 html-loader 所有功能
## 安装
```bash
npm install --save-dev html-loader-withhook
```
## 基础配置
```javascript
module.exports = {
module: {
rules: [
{
test: /\.html$/i,
loader: "html-loader-withhook",
},
],
},
};
```
## Hook 选项
### `sources.tags`
类型:
```typescript
type TagHandler = (
params: {
value: string;
startOffset: number;
endOffset: number;
resourcePath: string;
},
sources: Array,
) => boolean | void;
type tags = {
[tagName: string]: TagHandler;
};
```
允许为特定标签注册处理器:
```javascript
module.exports = {
module: {
rules: [
{
test: /\.html$/i,
loader: "html-loader-withhook",
options: {
sources: {
tags: {
// 处理 img 标签
img: (params, sources) => {
sources.push({
name: "data-src",
value: params.value,
isValueQuoted: false,
startOffset: params.startOffset,
endOffset: params.endOffset,
});
return true; // 返回 true 表示处理完成,阻断后续处理
},
},
},
},
},
],
},
};
```
### `sources.attributes`
类型:
```typescript
type AttributeHandler = (
params: {
tagName: string;
value: string;
startOffset: number;
endOffset: number;
resourcePath: string;
},
sources: Array,
) => boolean | void;
type attributes = {
[attributeName: string]: AttributeHandler;
};
```
允许为特定属性注册处理器:
```javascript
module.exports = {
module: {
rules: [
{
test: /\.html$/i,
loader: "html-loader-withhook",
options: {
sources: {
attributes: {
// 处理 src 属性
src: (params, sources) => {
if (params.tagName === "img") {
sources.push({
name: "data-src",
value: params.value,
isValueQuoted: true,
startOffset: params.startOffset,
endOffset: params.endOffset,
});
return true; //返回 true 表示处理完成,阻断后续处理
}
},
},
},
},
},
],
},
};
```
## 示例
### 图片懒加载处理
```javascript
module.exports = {
module: {
rules: [
{
test: /\.html$/i,
loader: "html-loader-withhook",
options: {
sources: {
tags: {
img: (params, sources) => {
// 将 src 转换为 data-src
sources.push({
name: "data-src",
value: params.value,
isValueQuoted: true,
startOffset: params.startOffset,
endOffset: params.endOffset,
});
return true;
},
},
},
},
},
],
},
};
```
### 自定义属性处理
```javascript
module.exports = {
module: {
rules: [
{
test: /\.html$/i,
loader: "html-loader-withhook",
options: {
sources: {
attributes: {
"custom-src": (params, sources) => {
sources.push({
name: "src",
value: `/assets/${params.value}`,
isValueQuoted: true,
startOffset: params.startOffset,
endOffset: params.endOffset,
});
return true;
},
},
},
},
},
],
},
};
```
## Hook 执行流程
1. 解析HTML注释忽略标记
2. 执行标签级hook(返回true则跳过后续处理)
3. 执行属性级hook(返回true则跳过默认处理)
4. 应用原始处理规则
## 错误处理机制
Hook 执行过程中的错误会被收集并通过 webpack 的错误系统报告。每个错误都包含:
- Hook 的类型(标签/属性)
- Hook 的名称
- 错误信息
## 继承功能
html-loader-withhook 完全兼容原版 html-loader 的所有功能,包括:
- 源码处理
- 预处理器
- 后处理器
- 最小化
- ES 模块支持
详细说明请参考原版 [html-loader 文档](https://github.com/webpack-contrib/html-loader)。
## License
MIT