react打包优化【第三方库使用cdn】
2023-02-25 18:27:43 时间
前言
对于 react、react-router、redux、axios和antd等等这些不经常改动的库、我们让webpack不对他们进行打包,通过cdn引入,可以减少代码的大小、也可以减少服务器的带宽,网站首次加载会更快。
为什么说是首次,因为只有首次进入一个网站需要请求服务器获取资源,需要一定时间下载,完后就会变成缓存。等第二次加载就会直接读取缓存,就不存在快慢一说了
webpack配置
这里以creat-react-app为例
webpack的配置文件默认是隐藏的,yarn eject可将配置文件暴露出来.
1. 打开 config 文件夹下的 webpack.config.js 文件
2. 找到 plugins 的 new HtmlWebpackPlugin 配置项,新增红框内的内容(用于配置CDN)
1 files: {
2 js: [],
3 css: [],
4 },
3. 新增 externals 配置项,和第三步的 plugins 同级(用于配置webpack排除打包的模块)
1external: {},
4.配置 scripts 文件夹下的 build.js
1// 配置cdn引入,这里只列举一些,可以更多
2config.plugins[0].userOptions.files.js = [
3 "https://unpkg.com/react@18.2.0/umd/react.production.min.js",
4 "https://unpkg.com/react-dom@18.2.0/umd/react-dom.production.min.js",
5 "https://lib.baomitu.com/redux/4.1.2/redux.min.js",
6 "https://lib.baomitu.com/axios/0.27.2/axios.min.js",
7 "https://lib.baomitu.com/lodash.js/4.17.21/lodash.min.js",
8 "https://lib.baomitu.com/antd/4.21.4/antd.min.js",
9 "https://lib.baomitu.com/aplayer/1.10.1/APlayer.min.js",
10];
11
12config.plugins[0].userOptions.files.css = [];
13
14// 配置不进行webpack打包的文件
15config.externals = {
16 react: "React",
17 "react-dom": "ReactDOM",
18 redux: "Redux",
19 "redux-thunk": "ReduxThunk",
20 axios: "axios",
21 antd: "antd",
22 lodash: "_",
23 aplayer: "APlayer",
24};
因为react开发环境和生产环境使用的是不同文件(可查看package.json的scripts字段),所以直接配置 build.js 文件就可以,不用特意写环境判断代码
**5. 配置 index.html **
配置 index.html ,引入配置的CDN js css链接。使用for循环
1 <head>
2 <!-- require cdn assets css -->
3 <% for (var i in htmlWebpackPlugin.options.files &&
4 htmlWebpackPlugin.options.files.css) { %>
5 <link
6 rel="stylesheet"
7 href="<%= htmlWebpackPlugin.options.files.css[i] %>"
8 />
9 <% } %>
10 </head>
11
12 <body>
13 <!-- require cdn assets js -->
14 <% for (var i in htmlWebpackPlugin.options.files &&
15 htmlWebpackPlugin.options.files.js) { %>
16 <script
17 type="text/javascript"
18 crossorigin
19 src="<%= htmlWebpackPlugin.options.files.js[i] %>"
20 ></script>
21 <% } %>
22 </body>
23</html>
24
最终效果
可以看到这些库都在body里单独引入,且各开了一条进程去加载。而并非都怼到一个js文件里加载
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023