vue项目中使用CDN引入

2023-11-16

前言

CDN(内容分发网络)指请求资源的方式,即通过script头去请求对应的脚本资源的一种方式,项目里配置之后不需要通过npm包管理工具去下载配置的包。
目的:将引用的外部js、css文件剥离开来,不编译到vendor.js中,而是用资源的形式引用,这样浏览器可以使用多个线程异步将vendor.js、外部的js等加载下来,达到加速首页展示效果。

1. 在vue.config.js进行配置

本人对vuevuexvue-routeraxioselement-uiecharts进行了cdn引用。(请求element-uiecharts的cdn较慢)

//生产环境标记
const IS_PRODUCTION = process.env.NODE_ENV === 'production'
//配置引用cdn的js、css地址
const cdn = {
    css: [
        'https://unpkg.com/element-ui@2.13.2/lib/theme-chalk/index.css'
    ],
    js: [
        'https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.min.js',
        'https://cdn.bootcdn.net/ajax/libs/vue-router/3.0.2/vue-router.min.js',
        'https://cdn.bootcdn.net/ajax/libs/vuex/3.1.0/vuex.min.js',
        'https://cdn.bootcdn.net/ajax/libs/axios/0.18.1/axios.min.js',
        'https://unpkg.com/element-ui@2.13.2/lib/index.js',
        'https://cdn.bootcdn.net/ajax/libs/echarts/5.0.1/echarts.min.js'
    ]
}
//配置打包时使用CDN节点(加入externals外部扩展), 忽略打包的第三方库
//左面放package.json中的扩展的名称,右面放项目依赖的名称(项目初始化要用的名称)
const externals = {
  // 属性名称 vue, 表示遇到 import xxx from 'vue' 这类引入 'vue'的,不去 node_modules 中找,而是去找全局变量 Vue(其他的为VueRouter、Vuex、axios、ELEMENT、echarts,注意全局变量是一个确定的值,不能修改为其他值,修改为其他大小写或者其他值会报错,若有异议可留言)
    vue: 'Vue',
    'vue-router': 'VueRouter',
    vuex: 'Vuex',
    axios: 'axios',
    'element-ui': 'ELEMENT',
    'echarts': 'echarts'
}
chainWebpack(config) {
        if (IS_PRODUCTION) {
            config.plugin('html').tap(args => {
                args[0].cdn = cdn
                return args
            })
            //视为一个外部库,而不将它打包进来
            config.externals(externals)
        }
    }      

2.在public/index.html文件配置

使用 webpack中自带的插件 html插件进行配置,在 index.html 中增加判断,是否使用 CDN, htmlWebpackPlugin.options 使用的是vue.config中的config.plugin('html')的插件属性。

  <!-- 使用CDN的CSS文件 -->
     <% for (var i in
     htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %>
     <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="preload" as="style" />
     <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet" />
   <% } %>
    <!-- 使用CDN加速的JS文件,配置在vue.config.js下 -->
   <% for (var i in
     htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %>
     <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
   <% } %>

3.易出错点

1、Router is not defined

 

 

 解决方案: 将Router 改为 ‘VueRouter’

2、Uncaught TypeError: Illegal constructor

 解决方案:修改externals 中‘'element-ui’的value

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

vue项目中使用CDN引入 的相关文章

随机推荐

  • SpringMVC增删改查(CRUD)的实现

    目录 前言 一 前期准备 1 pom xml 依赖与插件的导入 2 jdbc properties 数据库连接 3 log4j2 xml 日志文件 4 spring mybatis mybatis与spring整合文件 5 spring c
  • 解决AttributeError: module 'tensorflow' has no attribute 'ConfigProto'

    使用CUDA10 1加上Tensorflow 2 0会出现AttributeError module tensorflow has no attribute ConfigProto 这个问题 这个是由于现在新版本中一些1 0版本的函数被和2
  • Android自动化测试中操作技巧合集(建议收藏)

    Android自动化测试中短信验证码的操作技巧 一 内容提供器机制简介 Android 系统采用了内容提供器 ContentProvider 机制来管理不同应用的数据访问 内容提供器为不同应用间的数据共享提供了接口 它们像是一个中央数据仓库
  • 快速中值求取算法

    中值 顾名思义 就是指一个从小到大的序列的中间的那一个数 一般的讲 中值比平均值还要更加稳定 如一个序列中的某一个值被误乘以了100 平均值则会有很大的波动 但是中位数则不会发生太大的变化 但是如果对数据先排序 然后再进行取中值 则比较耗时
  • Spring3与安全框架apache shiro的整合

    shiro是一个很不错的安全框架 相对Spring security 来说要简单易用的多 使用shiro来做web的权限子系统是不错的选择 下面记录一下shiro和Spring整合的过程 Applicationcontext shiro x
  • k-近邻算法

    k 近邻算法 k 近邻算法概述 k 近邻算法 k NearestNeighor Algorithm 是采用测量不同特征值之间的距离方法进行分类 简称kNN 这里用到的距离计算是欧几里德距离 工作原理 存在一个样本数据集合 i 0 n 也称作
  • 《Ansible Playbook扩展:block块》

    一 用块分组任务 block任务块就是一组逻辑的tasks 使用block可以将多个任务合并为一个组 示例如下 block name 检查 service 服务 role 节点端口 shell nc vz MYSQL MASTER HOST
  • OpenGL 超级宝典笔记 —— 纹理高级(三)

    纹理组合器 OpenGL 的纹理组合器可以控制多重纹理的片段是如何组合的 一般情况下 我们可以简单的为每个纹理单元设置一个纹理环境模式 GL REPLACE GL DECAL GL ADD 和 GL MODULATE 把每个纹理应用的结果添
  • LNMP1.3 phpMyAdmin 打开空白的问题

    如果你找了很多方法 比如修改配置文件等等 都没有办法的话 或许我这里可以解决这个问题 请回忆一下 你 是否 安装了 eAccelerator 这个东西 如果有 卸载掉就好了 坑人的eAccelerator addons sh uninsta
  • ug装配绕轴旋转_UG模具设计培训就到新科教育

    培训内容 1 机械CAD精品班 CAD初级 制图 CAD基础及简单施工图 建筑剖面图 立面图 机械剖面 立面图等绘制CAD三维制图 面域 实体建模 曲面拉伸成形 剖切 三维实体运算 平移曲面 旋转曲面等方法建模 灯光设置 材质表现 工程出图
  • C++动态内存管理

    动态内存 在C C 程序中 线程 栈空间是有限的 大部分变量使用的都是动态分配来的堆内存 这些动态申请来的堆内存是需要开发者通过代码去自行管理的 如何管理好这些动态申请来的内存 是C C 开发中的一个重点难点问题 malloc是开空间 ca
  • Mysql:如果数据存在则更新,不存在则插入

    文章目录 ON DUPLICATE KEY UPDATE 语法 特点 REPLACE INTO 语法 语句1 不存在则插入 语句2 存在则先删除后插入 特点 REPLACE 语法 参考 DUPLICATE REPLACE INTO REPL
  • 前端如何使用vue实现excel的上传解析与导出功能

    前端如何使用vue实现excel的上传解析与导出功能 要使用Vue实现Excel上传解析与导出功能 你需要做以下几步 安装依赖 首先 你需要安装xlsx和file saver这两个库 用于Excel文件的读取与导出 你可以在你的Vue项目中
  • DNS详解

    DNS详解 DNS解析 实验目的 通过实验 理解DNS解析原理 掌握windows下DNS服务器的安装与配置过程 理解DNS下不同的记录类型 实验环境 服务器 windows server 2012 用于安装DNS服务器 客户端 windo
  • Mybatis分页方式及实现原理

    一 mybatis的4种分页方式 物理分页 逻辑分页 1 借助Sql语句Q进行分页 物理分页 2 拦截器分页 物理分页 通过拦截器给sq语句末尾加Eimt语句来查询 3 借助 数组Q进行分页 逻辑分页 4 RowBounds分页插件实现分页
  • 【数据结构】Trie 字典树

    数据结构源码 实现类 import java util TreeMap public class Trie private class Node public boolean isWord public TreeMap
  • tomcat全局配置错误页面详解(404页面)

    前言 花了两个小时 配置了下 在网上查了诸多攻略 没有一个是讲清楚的 我就随手写下 以备后期查用 版本 tomcat 7 0 75 过程 大家可以看下 这是我按网上的步骤搞的 把错误页面放到了ROOT页面下 然后去测试 结果如下 看到没 是
  • Text to image论文精读DF-GAN:A Simple and Effective Baseline for Text-to-Image Synthesis一种简单有效的文本生成图像基准模型

    目录 一 原文摘要 二 为什么提出DF GAN 三 DF GAN 3 1 模型结构 3 2 鉴别器 Target Aware Discriminator 3 2 1 匹配感知梯度惩罚 Matching Aware Gradient Pena
  • Java controller参数接收json字符串

    前后端分离以后 发现参数有时候需要统一 有时候前端传回来的参数格式不是我们controller方法参数需要的格式 个人感觉用对象接受能解决一些问题 假如前端传过来的json数据如下 loginCode 111111 postCode 111
  • vue项目中使用CDN引入

    前言 CDN 内容分发网络 指请求资源的方式 即通过script头去请求对应的脚本资源的一种方式 项目里配置之后不需要通过npm包管理工具去下载配置的包 目的 将引用的外部js css文件剥离开来 不编译到vendor js中 而是用资源的