Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
03b95744
C
Coding Tree
项目概览
檀越@新空间
/
Coding Tree
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coding Tree
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
03b95744
编写于
5月 29, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
9e3117d2
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
141 addition
and
37 deletion
+141
-37
blog/php-mysql/index.md
blog/php-mysql/index.md
+1
-1
blog/webpack/img/loader1.png
blog/webpack/img/loader1.png
+0
-0
blog/webpack/img/loader2.png
blog/webpack/img/loader2.png
+0
-0
blog/webpack/webpack-loader.md
blog/webpack/webpack-loader.md
+139
-35
package.json
package.json
+1
-1
未找到文件。
blog/php-mysql/index.md
浏览文件 @
03b95744
...
...
@@ -34,7 +34,7 @@
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/webpack/img/loader1.png
0 → 100644
浏览文件 @
03b95744
51.0 KB
blog/webpack/img/loader2.png
0 → 100644
浏览文件 @
03b95744
57.9 KB
blog/webpack/webpack-loader.md
浏览文件 @
03b95744
...
...
@@ -2,13 +2,48 @@
loader 将不同类型的文件转换为 webpack 可识别的模块
使用loader的方式
## loader 使用方式
1.
配置方式: pre、normal、post (推荐使用)
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
pre: 前置 loader
...
...
@@ -17,7 +52,9 @@ inline: 内联 loader
post: 后置 loader
```
相同优先级:从右到左,从下到上
### 相同优先级
从右到左,从下到上
```
js
// 此时loader执行顺序:loader3 - loader2 - loader1
...
...
@@ -39,7 +76,7 @@ module: {
},
```
指定优先级
###
指定优先级
```
js
// 此时loader执行顺序:loader1 - loader2 - loader3
...
...
@@ -61,31 +98,14 @@ module: {
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
$
tree
.
...
...
@@ -100,9 +120,8 @@ $ tree
项目文件
```
js
// loaders/test-laoder.js
// loaders/test-laoder.js
/**
*
* @param {*} content 源文件的内容
...
...
@@ -114,19 +133,17 @@ module.exports = function loader(content, map, meta) {
console
.
log
(
"
hello loader
"
);
return
content
;
};
```
package.json
```
json
{
"dependencies"
:
{
"webpack"
:
"^5.72.1"
,
"webpack-cli"
:
"^4.9.2"
}
"dependencies"
:
{
"webpack"
:
"^5.72.1"
,
"webpack-cli"
:
"^4.9.2"
}
}
```
```
js
...
...
@@ -155,13 +172,11 @@ module.exports = {
mode
:
"
development
"
,
};
```
```
js
// src/index.js
console
.
log
(
"
Hello World
"
);
```
编译打包
...
...
@@ -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执行顺序

loader提前返回

## 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
package.json
浏览文件 @
03b95744
...
...
@@ -7,7 +7,7 @@
"scripts"
:
{
"dev"
:
"~/.nvm/versions/node/v12.22.6/bin/docsify serve --open ./"
,
"live"
:
"live-server"
,
"start"
:
"http-server"
"start"
:
"http-server
-o /
"
},
"repository"
:
{
"type"
:
"git"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录