提交 03b95744 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 9e3117d2
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
16. [高级数据操作-更新数据](blog/php-mysql/sql-senior-update.md) 16. [高级数据操作-更新数据](blog/php-mysql/sql-senior-update.md)
[高级数据操作-删除数据](blog/php-mysql/sql-senior-delete.md) 17. [高级数据操作-删除数据](blog/php-mysql/sql-senior-delete.md)
[高级数据操作-查询数据](blog/php-mysql/sql-senior-select.md) [高级数据操作-查询数据](blog/php-mysql/sql-senior-select.md)
......
...@@ -2,13 +2,48 @@ ...@@ -2,13 +2,48 @@
loader 将不同类型的文件转换为 webpack 可识别的模块 loader 将不同类型的文件转换为 webpack 可识别的模块
## loader 使用方式
使用loader的方式
1. 配置方式: pre、normal、post (推荐使用) 1. 配置方式: pre、normal、post (推荐使用)
2. 内联方式: inline 2. 内联方式: inline
loader 执行优先级: ### 配置方式
```js
module: {
rules: [
{
test: /\.js$/,
loader: "babel-loader",
},
]
}
```
### 内联方式
使用 `!` 将资源中的 loader 分开
```js
import style from "style-loader!css-loader?modules!./style.css";
```
内联方式跳过配置方式的 loader
```js
// ! 跳过 normal loader。
import style from "!style-loader!css-loader?modules!./style.css";
// -! 跳过 pre 和 normal loader。
import style from "-!style-loader!css-loader?modules!./style.css";
// !! 跳过 pre、 normal 和 post loader。
import style from "!!style-loader!css-loader?modules!./style.css";
```
## loader 执行优先级
### 默认优先级
```bash ```bash
pre: 前置 loader pre: 前置 loader
...@@ -17,7 +52,9 @@ inline: 内联 loader ...@@ -17,7 +52,9 @@ inline: 内联 loader
post: 后置 loader post: 后置 loader
``` ```
相同优先级:从右到左,从下到上 ### 相同优先级
从右到左,从下到上
```js ```js
// 此时loader执行顺序:loader3 - loader2 - loader1 // 此时loader执行顺序:loader3 - loader2 - loader1
...@@ -39,7 +76,7 @@ module: { ...@@ -39,7 +76,7 @@ module: {
}, },
``` ```
指定优先级 ### 指定优先级
```js ```js
// 此时loader执行顺序:loader1 - loader2 - loader3 // 此时loader执行顺序:loader1 - loader2 - loader3
...@@ -61,31 +98,14 @@ module: { ...@@ -61,31 +98,14 @@ module: {
loader: "loader3", loader: "loader3",
}, },
], ],
}, }
```
内联方式
```js
import style from 'style-loader!css-loader?modules!./style.css'
```
内联方式跳过配置方式的 loader
```js
// ! 跳过 normal loader。
import style from '!style-loader!css-loader?modules!./style.css'
// -! 跳过 pre 和 normal loader。
import style from '-!style-loader!css-loader?modules!./style.css'
// !! 跳过 pre、 normal 和 post loader。
import style from '!!style-loader!css-loader?modules!./style.css'
``` ```
开发一个 loader ## 开发一个 loader
项目结构 项目结构
```bash ```bash
$ tree $ tree
. .
...@@ -100,9 +120,8 @@ $ tree ...@@ -100,9 +120,8 @@ $ tree
项目文件 项目文件
```js ```js
// loaders/test-laoder.js // loaders/test-laoder.js
/** /**
* *
* @param {*} content 源文件的内容 * @param {*} content 源文件的内容
...@@ -114,19 +133,17 @@ module.exports = function loader(content, map, meta) { ...@@ -114,19 +133,17 @@ module.exports = function loader(content, map, meta) {
console.log("hello loader"); console.log("hello loader");
return content; return content;
}; };
``` ```
package.json package.json
```json ```json
{ {
"dependencies": { "dependencies": {
"webpack": "^5.72.1", "webpack": "^5.72.1",
"webpack-cli": "^4.9.2" "webpack-cli": "^4.9.2"
} }
} }
``` ```
```js ```js
...@@ -155,13 +172,11 @@ module.exports = { ...@@ -155,13 +172,11 @@ module.exports = {
mode: "development", mode: "development",
}; };
``` ```
```js ```js
// src/index.js // src/index.js
console.log("Hello World"); console.log("Hello World");
``` ```
编译打包 编译打包
...@@ -176,4 +191,93 @@ hello loader ...@@ -176,4 +191,93 @@ hello loader
``` ```
## loader 分类
### 同步 loader
```js
module.exports = function (content, map, meta) {
return content;
};
```
callback方式
```js
module.exports = function (content, map, meta) {
// 第一个参数:err 错误
this.callback(null, content, map, meta);
};
```
### 异步 loader
```js
module.exports = function (content, map, meta) {
const callback = this.async();
// 进行异步操作
setTimeout(() => {
callback(null, content, map, meta);
}, 1000);
};
```
### Raw Loader
通常用于处理图片资源
```js
module.exports = function (content) {
// content是一个Buffer数据
return content;
};
// 开启 Raw Loader
module.exports.raw = true;
```
### Pitching Loader
```js
module.exports = function (content) {
return content;
};
module.exports.pitch = function (remainingRequest, precedingRequest, data) {
console.log("do somethings");
};
```
webpack完整的loader执行顺序
![](./img/loader1.png)
loader提前返回
![](./img/loader2.png)
## loader API
|方法名 | 含义 | 用法
|- | - | -
this.async| 异步回调 loader。返回 this.callback | const callback = this.async()
this.callback |可以同步或者异步调用的并返回多个结果的函数 |this.callback(err, content, sourceMap?, meta?)
this.getOptions(schema) |获取 loader 的 options |this.getOptions(schema)
this.emitFile |产生一个文件 |this.emitFile(name, content, sourceMap)
this.utils.contextify |返回一个相对路径 |this.utils.contextify(context, request)
this.utils.absolutify |返回一个绝对路径 |this.utils.absolutify(context, request)
文档:[https://webpack.docschina.org/api/loaders/](https://webpack.docschina.org/api/loaders/)
## 手写示例
### clean-log-loader
```js
// console-log-laoder.js
module.exports = function (content, map, meta) {
return content.replace(/console\.log\(.*\);?/g, '');
};
```
https://www.bilibili.com/video/BV14T4y1z7sw?p=67&spm_id_from=pageDriver https://www.bilibili.com/video/BV14T4y1z7sw?p=67&spm_id_from=pageDriver
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
"scripts": { "scripts": {
"dev": "~/.nvm/versions/node/v12.22.6/bin/docsify serve --open ./", "dev": "~/.nvm/versions/node/v12.22.6/bin/docsify serve --open ./",
"live": "live-server", "live": "live-server",
"start": "http-server" "start": "http-server -o /"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册