Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
385f1640
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看板
提交
385f1640
编写于
5月 22, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
1a291e55
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
234 addition
and
1 deletion
+234
-1
blog/webpack/index.md
blog/webpack/index.md
+234
-1
未找到文件。
blog/webpack/index.md
浏览文件 @
385f1640
...
...
@@ -6,6 +6,9 @@ https://www.bilibili.com/video/BV1e7411j7T5
尚硅谷前端Webpack5教程(高级进阶篇)
https://www.bilibili.com/video/BV1cv411C74F
尚硅谷2022版Webpack5入门到原理
https://www.bilibili.com/video/BV14T4y1z7sw
笔记分享:
https://lab.puji.design/webpack-getting-started-manual/
...
...
@@ -2320,4 +2323,234 @@ module.exports = {
};
```
https://www.bilibili.com/video/BV1e7411j7T5?p=24&spm_id_from=pageDriver
\ No newline at end of file
### 6.6、tree shaking 树摇
去除无用代码,减少代码体积
前提:
1.
必须使用ES6模块化
2.
开启production环境
pagekage.json配置
```
js
// 所有代码都没有副作用(都可以运行)
sideEffects
:
false
```
可能会把css / @babel/polyfill文件干掉
处理方式
```
js
// 要保留的文件
sideEffects
:
[
"
*.css
"
]
```
### 6.7、code split 代码分割
方式一:入口起点
指定不同的入口
```
js
module
.
exports
=
{
entry
:
{
// 多入口
index
:
'
./index.js
'
,
home
:
'
./home.js
'
,
},
output
:
{
filename
:
'
[name].[contenthash:4].js
'
}
}
```
方式二 防止重复
作用
1.
将node_modules中的代码单独打包一个chunk最终输出
2.
自动分析多入口chunk中,如果有公共的问题件,会打包成单独一个chunk
```
js
module
.
exports
=
{
optimization
:
{
splitChunks
:
{
chunks
:
'
all
'
}
}
}
```
方式三 动态导入
import动态引入语法,能将文件单独打包
```
js
import
(
/* webpackChunkName: 'test' */
'
./test.js
'
).
then
(()
=>
{
// 加载成功
}).
catch
(()
=>
{
// 加载失败
})
```
### 6.8、懒加载和预加载
1、懒加载
当文件需要时才加载
index.html
```
html
<button
id=
"btn"
>
点击加载代码
</button>
```
index.js
```
js
document
.
querySelector
(
"
#btn
"
).
addEventListener
(
"
click
"
,
function
()
{
import
(
/* webpackChunkName: 'print' */
"
./print.js
"
)
.
then
(()
=>
{
// 加载成功
})
.
catch
(()
=>
{
// 加载失败
});
});
```
print.js
```
js
console
.
log
(
"
print load
"
);
```
2、预加载
prefetch 会在使用前,提前加载js文件
正常加载可以认为是并行加载(同一时间加载多个文件)
预加载 prefetch:等其他资源加载完毕,浏览器空闲了,再偷偷加载资源
```
js
document
.
querySelector
(
"
#btn
"
).
addEventListener
(
"
click
"
,
function
()
{
import
(
/* webpackChunkName: 'print', webpackPrefetch: true */
"
./print.js
"
)
.
then
(()
=>
{
// 加载成功
})
.
catch
(()
=>
{
// 加载失败
});
});
```
-
prefetch(预获取):将来某些导航下可能需要的资源
-
preload(预加载):当前导航下可能需要资源
```
js
import
(
/* webpackChunkName: 'print', webpackPrefetch: true */
"
./print.js
"
)
import
(
/* webpackChunkName: 'print', webpackPreload: true */
"
./print.js
"
)
```
### 6.9、PWA 离线可访问
progressive web application 渐进式网络开发应用程序(离线可访问)
添加 workbox-webpack-plugin 插件
```
bash
npm
install
workbox-webpack-plugin
--save-dev
```
webpack.config.js
```
js
const
WorkboxPlugin
=
require
(
'
workbox-webpack-plugin
'
);
module
.
exports
=
{
plugins
:
[
new
WorkboxPlugin
.
GenerateSW
({
// 这些选项帮助快速启用 ServiceWorkers
// 不允许遗留任何“旧的” ServiceWorkers
clientsClaim
:
true
,
skipWaiting
:
true
,
}),
]
};
```
注册 Service Worker
index.js
```
js
// 处理兼容性
if
(
'
serviceWorker
'
in
navigator
)
{
window
.
addEventListener
(
'
load
'
,
()
=>
{
navigator
.
serviceWorker
.
register
(
'
/service-worker.js
'
).
then
(
registration
=>
{
console
.
log
(
'
SW registered:
'
,
registration
);
}).
catch
(
registrationError
=>
{
console
.
log
(
'
SW registration failed:
'
,
registrationError
);
});
});
}
```
修改 package.json ESLint配置
让其支持浏览器变量(window、navigator等全局变量)
```
json
{
"eslintConfig"
:
{
"extends"
:
"airbnb-base"
,
"env"
:
{
"browser"
:
true
}
}
}
```
快速启动一个本地服务器
```
bash
npm
install
http-server
--save-dev
$
npx http-server dist
# 或者
npm i serve
$
npx serve dist
```
### 6.10、多进程打包
```
bash
npm
install
--save-dev
thread-loader
```
webpack.config.js
```
js
module
.
exports
=
{
module
:
{
rules
:
[
{
test
:
/
\.
js$/
,
include
:
path
.
resolve
(
'
src
'
),
use
:
[
"
thread-loader
"
,
// 耗时的 loader (例如 babel-loader)
],
},
],
},
};
```
https://www.bilibili.com/video/BV1e7411j7T5?p=29&spm_id_from=pageDriver
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录