Webpack 4.X 配置cdn加载资源

2023-11-12

众所周知,SPA单页应用,首次访问需要加载近全部资源,从而导致首页渲染速度很慢。

继而,出现很多性能优化方案:图片/资源懒加载、减少http请求、减小请求资源大小,减少dom操作避免触发回流重绘,gzip压缩,cdn加载等等


今天,我们就具体介绍 cdn加载:
  1. 我们使用webpack 4.X打包配置cdn加载
  1. 在配置前,我们讲一个属性 :externals

按照官方文档的解释,如果我们想引用一个,但是又不想让webpack打包,并且又不影响我们在程序中CMDAMDES6等方式进行使用,那就可以通过配置externals

我们项目开发中可以使用 externals的方式,将这些不需要打包的资源从构建逻辑中剔除出去,而使用 cdn的方式引用它们

  • 因为浏览器是多进程,多线程,http请求又是独立线程,可以并发加载资源

接下来,我们根据需求配置webpack.config.js

安装:

npm i html-webpack-plugin -D // 打包生成html

webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  mode: 'development', // 模式,可选为 development 和 production 默认为produciton
  entry: './src/index.js', // 入口文件
  output: {
    filename: 'js/build.js', // 出口路径
    publicPath: './', // 公共路径
    path: path.resolve(__dirname, 'dist') // 出口目录
  },
  module: {
  	rules: [
      {
        test: /\.(js|jsx)$/,
        use: {
          loader: 'babel-loader',
          options: {
            include: path.join(__dirname, 'src'),
            exclude: '/node_modules/', // 排除node_modules,第三方代码已经处理,不需要二次处理
            presets: ['@babel/preset-env']
          }
        },
      },
  	]
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'Webpack 4.X', // 文件标题
      filename: 'index.html', // 文件名
      template: path.resolve(__dirname, 'index.html'), // 依赖模板
      inject: true, // js放置位置: true -- body 底部 | head -- head标签 | false -- 不加载js
      hash: true, // 添加hash
      minify: {
        collapseWhitespace: true, // 移除空格
        removeAttributeQuotes: true, // 移除引号
        removeComments: true // 移除注释
      },
      cdn: {
        js: [
          'https://cdn.bootcss.com/axios/0.18.0/axios.min.js', // 配置cdn资源
        ]
      }
    }),
  ],
  externals: {
    axios: 'axios' // 这里以axios库为示例
  },
}

这里webpack基本上配置完成

// src/index.js
import axios from 'axios'
console.log(axios)

// index.html 模板
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <!--ejs模板语法 引入title-->
  <title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<section id="root"></section>
  <!--ejs模板语法 cdn加载-->
  <% for (let i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
    <script type="text/javascript" src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
  <% } %>
</body>
</html>

:::测试效果 :::

不开启cdn加载:
在这里插入图片描述
我们可以看到axios已经打包进入vender.main.js中

开启cdn加载:
在这里插入图片描述
我们可以看到打包忽略axios,并且http请求线程请求 axios.min.js,并且代码中可以正常引入/使用axios
在这里插入图片描述
附cdn资源分发站:

BootCDN:https://www.bootcdn.cn/
UNPKG:https://unpkg.com/

附文章:

webpack 4.X 从零配置SPA单页应用

浏览器是多进程还是单进程?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webpack 4.X 配置cdn加载资源 的相关文章

随机推荐

  • 制作基于XKT-510和T3168芯片的无线供电模块

    制作基于XKT 510和T3168芯片的无线供电模块 制作无线供电模块 进展记录更新 简书上更新比较快 链接 2017年9月6日 19 27 56 还是简书的Markdown编辑器好用啊可以直接粘贴图片不用一张张上传所以先发布在这了再搬到c
  • vscode 画流程图

    文章目录 1 安装插件 draw 2 新建文件 3 开始画图 4 另存为图片 vscode可以画流程图了 只需要安装插件就可以了 1 安装插件 draw 2 新建文件 3 开始画图 4 另存为图片
  • js声明函数(function)和变量(variable)不得不防的坑

    在工作中初级程序员容易忽略的细节就是函数和变量的声明都存在提升 而且他们之间的提升是不同的 请看下面的演示 function funa console log funa 函数声明 function funb console log funb
  • ChatGPT + MindShow搞定PPT制作

    一 获取PPT内容大概 1 进入chatgpt 官网 http chat openai com 账号密码登录 2 获取PPT内容 向他提问 提问格式如下 整理一份PPT大纲 主题是 如何使用热门AI工具 回答内容采用Markdown的形式
  • 【简单又有趣】Python五个迷你小项目,即学即用,还不赶紧码住(附源码)

    目录 前言 一 猜数字游戏 二 骰子模拟器 三 故事生成器 四 自动发送邮件 五 Hangman 总结 前言 Python编程语言中 我最喜欢的就是Python的各种第三方库 能够完成很多操作 下面就给大家介绍5个通过Python构建的项目
  • 2013年11月26日星期二(四元数)

    这一节 应该是个一点点进行 QUAT q1 0 0 0 0 先看下QUAT数据类型 四元数 typedef struct QUAT TYP union float M 4 struct float q0 VECTOR3D qv struct
  • 若依前后端分离代码生成

    去代码生成器界面 点击导入按钮 选择你想生成的数据库表 选择好之后 生成 会下载一个文件夹 包括SQL 前端代码和后端代码 只需要放到相应文件夹下面就可以了 vue是前端代码 放到ruoyi ui文件中 main是后端代码 那些mapper
  • vue.js鼠标移入变换样式,鼠标移出去除样式(active)实现方法

    鼠标移入添加class样式 HTML HTML绑定事件 加入或者移出class为active span class things 报事 span span class things 报修 span 注意这里v on不能直接省略为 我也不知道
  • Javascript数组与字典用法分析

    http www 68idc cn help makewebs javascript 20141214142024 html 这篇文章主要介绍了Javascript数组与字典用法 以实例形式较为详细的分析了Array作为数组与字典的不同用法
  • Chrome 扩展程序开发

    按chrome开发规范 我们首先建一个文件夹 如D AutoClickDemo 在该文件夹下新建一个名为manifest json的文本文件 并按实际情况放一个图片文件 作为插件的图标 然后新建一个名为myscript js的js脚本文件
  • SQL查询一个表中根据其中一个列的属性来拼接多个列并SELECT INTO 新表显示

    将同一个表中 不同 Group 属性的添加列分成一整行 SELECT INTO VP Temp FROM SELECT DISTINCT A ID A TypeName A ItemType A isBad A sNo sNo1 A Che
  • C++ 类的静态成员详细讲解

    在C 中 静态成员是属于整个类的而不是某个对象 静态成员变量只存储一份供所有对象共用 所以在所有对象中都可以共享它 使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则 保证了安全性还可以节省内存 静态成员的定义或声明要加个关键st
  • C++控制台输入

    我们在刷牛客网的题目时 经常遇到多组输入 执行到文件结束 下面介绍几种写法 1 C语言的输入多个整数 while scanf d n EOF 为End Of File的缩写 通常在文本的最后存在此字符表示资料结束 code 2 C 输入字符
  • PyQt实现图形化界面的视频播放

    PyQt实现图形化界面的视频播放 PyQt是一款流行的Python GUI库 它可以与Python的许多其他工具和库结合使用 OpenCV是一个功能强大的计算机视觉库 可以处理图像和视频 本文将介绍如何结合使用PyQt和OpenCV来创建一
  • SSL单双向认证

    一 TLS SSL协议 HTTPS协议是在HTTP TLS SSL协议组成的可进行加密传输 身份认证的网络协议 旨在保证数据传输过程中的保密性 完整性和安全性 HTTPS在HTTP和TCP之间 增加了TLS SSL协议 正是通过TLS协议
  • Property xxx was accessed during render but is not defined on instance

    vue3 x版本在结合element plus使用如果使用了表单元素以及v model指令会在控制台看到类似的警告 虽然不影响js运行 但是对于强迫症玩家难受的不行 下面我们来看一下这个问题是如何产生的 应该怎么解决 原因 vue3 x版本
  • HDFS加密区加密过程

    HDFS加密区 encryption zone 中的每个文件都使用唯一的数据加密密钥 data encryption key DEK 进行加密 明文DEK被区域级加密密钥 加密区密钥 encryption zone key EZK 加密成加
  • 灵感爆发:An/flash 影片剪辑动画播放一遍后,摆脱paly()的控制

    有一个影片剪辑我只想让他播放一次就停下来 但是我的播放按钮 就一个命令 this play 现在有个矛盾 播放按钮和暂停按钮都在 暂停在影片剪辑动画的中间还好 但是不小心暂停在最后一帧 在播放就会从头 播放按钮只有一个功能就是从当前帧继续播
  • MySQL高阶语句(三)

    一 NULL值 在 SQL 语句使用过程中 经常会碰到 NULL 这几个字符 通常使用 NULL 来表示缺失 的值 也就是在表中该字段是没有值的 如果在创建表时 限制某些字段不为空 则可以使用 NOT NULL 关键字 不使用则默认可以为空
  • Webpack 4.X 配置cdn加载资源

    众所周知 SPA单页应用 首次访问需要加载近全部资源 从而导致首页渲染速度很慢 继而 出现很多性能优化方案 图片 资源懒加载 减少http请求 减小请求资源大小 减少dom操作避免触发回流重绘 gzip压缩 cdn加载等等 今天 我们就具体