Vite + Vue3 使用 cdn 引入依赖,并且把外部 css、js 文件内联引入

news2025/1/18 10:55:15
  1. 安装插件
pnpm i element-plus echarts axios lodash -S
  1. 在 vite.config.js 引用

注意事项:element-plus 不能在 vite.config.js 中使用按需加载,需要在 main.js 中全局引入;

import { resolve } from 'path'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// 引入 vite-plugin-cdn-import 插件
import { Plugin as importToCDN } from 'vite-plugin-cdn-import'

const pathSrc = resolve(__dirname, 'src')
// https://vitejs.dev/config/
export default defineConfig({
  // 打包base访问地址,和webpack 的base一样,默认 ./ 就好了
  base: './',
  plugins: [
    vue(),
    // 配置 CDN
    importToCDN({
      modules: [
        {
          name: 'vue',
          var: 'Vue',
          path: 'https://cdn.jsdelivr.net/npm/vue@3.5.10/dist/vue.global.min.js'
        },
        {
          name: 'element-plus', // 依赖名称,
          var: 'ElementPlus', // 全局变量名
          path: 'https://cdn.jsdelivr.net/npm/element-plus@2.8.4/dist/index.full.min.js', // CDN 链接
          css: 'https://cdn.jsdelivr.net/npm/element-plus@2.8.4/dist/index.min.css' // 依赖有css就填,没有就去掉这个
        },
        {
          name: 'axios',
          var: 'axios',
          path: 'https://cdn.jsdelivr.net/npm/axios@1.7.7/dist/axios.min.js'
        },
        {
          name: 'echarts',
          var: 'echarts',
          path: 'https://cdn.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js'
        },
        {
          name: 'lodash',
          var: '_',
          path: 'https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js'
        }
      ]
    }),
    {
      name: 'inline-js-css',
      apply: 'build', // 仅在构建阶段生效
      enforce: 'post', // 在其他插件之后执行
      generateBundle(outputOptions, bundle) {
        for (const fileName in bundle) {
          const asset = bundle[fileName]
          // 获取HTML文件
          const htmlFile = bundle['index.html']
          if (!htmlFile) return
          // 删除原始JS/CSS文件代码
          if (fileName.endsWith('.html')) {
            // console.log(asset)
            // 删除原始JS/CSS文件引入
            htmlFile.source = htmlFile.source.replace(
              /<script type="module".*<\/script>/g,
              ''
            )
            htmlFile.source = htmlFile.source.replace(
              /<link rel="stylesheet".*\.css">/g,
              ''
            )
          } else if (fileName.endsWith('.js')) {
            // 将JS内联到HTML文件中
            htmlFile.source += `\n<script>\n${asset.code}\n</script>\n`
            // 删除原始JS文件
            delete bundle[fileName]
          } else if (fileName.endsWith('.css')) {
            // 将CSS内联到HTML文件中
            htmlFile.source += `\n<style>\n${asset.source}\n</style>\n`
            // 删除原始CSS文件
            delete bundle[fileName]
          }
        }
      }
    }
  ],
  server: {
    host: '0.0.0.0',
    .......
  }
})
  1. main.js 引入

CDN 引入只有在 build 打包出来的才是 CDN 引入,本地开发走的还是 NPM 本地包引入, 所以先使用 NPM 方式引入

import { createApp, provide } from 'vue'
import ElementPlus from 'element-plus'
import './style.scss'
import App from './App.vue'

createApp(App)
  .provide('global', {
    theme: 'theme-white'
  })
  .use(ElementPlus)
  .mount('#app')
  1. 打包测试

执行打包 命令npm run build,依赖变为 CDN 引入,外部的 js 文件和 css 文件集成到 index.html 中

打包结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2214294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

晶振电路的设计一定要和单片机靠近,路线尽量短

晶振作为同步单片机全部工作的核心&#xff0c;首先要求高度可靠和稳定&#xff0c;所以离芯片越近&#xff0c;引线越短&#xff0c;受外来干扰就越小&#xff1b; 其次&#xff0c;一般晶振部分是整个电路板中频率最高的部分&#xff0c;也就是高频辐射最严重的部分&#xf…

Redis集群相关

目录 一、Redis主从集群 主从数据同步原理 全量同步 1&#xff09;为什么是基本一致而不是完全一致呢&#xff1f; 2&#xff09;上述过程还有一个问题&#xff0c;怎么判断是不是第一次同步&#xff1f; 增量同步 1&#xff09;master节点怎么知道slave节点与自己的数据…

关于Git Bash中如何定义alias

一、在一次临时Bash会话中使用alias 在Bash中直接输入alias xxdddd&#xff0c;xx为对应要执行的命令的缩写&#xff0c;dddd为要执行的命令&#xff0c;如alias ddcd /d&#xff0c;输入完成后&#xff0c;在Bash中输入dd&#xff0c;即可切换至D盘。 此种设置方式&#xff…

JavaSE——集合2:List(Iterator迭代器、增强for、普通for循环遍历集合)

目录 一、List (一)List接口基本介绍 二、List接口的常用方法 三、List集合的三种遍历方式 四、小练习——使用冒泡排序遍历集合 一、List (一)List接口基本介绍 List接口是Collection接口的子接口 public interface List<E> extends Collection<E> List集…

华大基因与NRL完成技转合作,为中东家庭提供更优质的产前筛查方案

今年年初&#xff0c;华大基因与中东地区最大的美国病理学家学会&#xff08;CAP&#xff09;认证实验室集团National Reference Laboratory&#xff08;NRL&#xff09;&#xff0c;顺利完成了无创产前基因检测技术&#xff08;NIPT&#xff09;技转合作&#xff0c;并向NRL实…

AI先行者工具撰写的烧脑短篇,你不可错过

以下文字是我用ai先行者所创造的文字。我就输入烧脑故事四个关键字 昨晚&#xff0c;我像往常一样刷着朋友圈&#xff0c;准备结束一天的工作前放松一下。突然间&#xff0c;我的好友小林发了一条状态&#xff1a;“如果有人发现我不见了&#xff0c;请不要报警。”这句话配上…

【JAVA毕业设计】基于Vue和SpringBoot的加油站管理系统

本文项目编号 T 003 &#xff0c;文末自助获取源码 \color{red}{T003&#xff0c;文末自助获取源码} T003&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

金蝶云星空与金蝶云星空对接集成采购订单查询连通采购订单新增(采购订单)

金蝶云星空与金蝶云星空对接集成采购订单查询连通采购订单新增(采购订单) 对接系统金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应用…

Prometheus+Grafana 监控 Kubernetes

文章目录 一、Prometheus介绍二、Prometheus组件与监控三、Prometheus基本使用&#xff1a;怎么来监控四、Kubernetes监控指标五、Prometheus的基本使用&#xff1a;部署1.基于docker部署prometheusgrafana2. 查看prometheus配置文件3. 监控Linux服务器3.1找到自己相应的系统去…

php外卖霸王餐独立小程序 霸王餐源码 功能用户分销 会员系统 自用/推广私域运营

前言 外卖霸王餐小程序是一种结合了外卖点餐和优惠返利功能的微信小程序&#xff0c;旨在为用户提供一种便捷的点餐体验和优惠福利。 用户以5-10元吃到原价15-25元的外卖&#xff0c;底层逻辑是帮外卖商家做店铺推广&#xff0c;解决新店基础销量、老店增加单量、品牌打万单店…

Apache Kafka 使用示例

Kafka快速入门指南 微信公众号&#xff1a;阿俊的学习记录空间小红书&#xff1a;ArnoZhangwordpress&#xff1a;arnozhang1994博客园&#xff1a;arnozhangCSDN&#xff1a;ArnoZhang1994 第一步&#xff1a;获取Kafka 下载2.13-3.8.0版本的Kafka版本并解压&#xff1a; $…

2d实时数字人聊天语音对话使用案例,对接大模型

参看: https://github.com/wan-h/awesome-digital-human-live2d 电脑环境: ubuntu 1060ti 下载: git clone https://github.com/wan-h/awesome-digital-human-live2d.gitdocker部署; cd awesome-digital-human-live2d docker-compose -f docker-compose-quickStart.ya…

React 子组件调用父组件的方法,以及互相传递数据

<script type"text/babel" data-type"module"> import React, { StrictMode, useState } from react; import { createRoot } from react-dom/client;const ParentComponent () > {const [message, setMessage] useState("")//父组件…

代理模式、BigDecimal详解

代理模式 代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问&#xff0c;这样就可以在不修改原目标对象的前提下&#xff0c;提供额外的功能操作&#xff0c;扩展目标对象的功能 代理模式的主要作用是扩展目标对象的功…

kali(专业的渗透测试虚拟机)|kali下载链接地址 |kali安装 |kali部署指南

介绍 kali 是Debian开源linux系统体系下的子分支之一 Debian-kali 扩展&#xff1a;Ubuntu也是Debian开源linux系统体系下的子分支之一 Debian-ubuntu 安装kali 2023.03 稳定版 Index of /kali-images/kali-2023.1/ 安装可以参考他的教程&#xff0c; 写的很详细了…

编程练习5 转盘寿司

#include<iostream> #include<vector>using namespace std;//字符分割函数 //把字符串中的字符c剔除 同时将字符串中的其他内容以合适的类型保存 vector<int> split(string str_input, char c) {vector<int> result;while(str_input.find(c) ! -1){//…

阿拉伯语技术翻译的特点

将技术内容翻译成阿拉伯语具有独特的挑战和要求&#xff0c;这源于阿拉伯语复杂的结构、文化差异及其在全球科学技术领域中的地位。翻译人员需要具备深厚的语言专业知识&#xff0c;关注不断发展的科学技术术语&#xff0c;并了解阿拉伯语世界中的地区差异&#xff0c;以确保专…

安卓开发中实现可滑动区域触顶的提示

这篇博客记录在开发中使用 CoordinatorLayout、AppBarLayout 、CollapsingToolbarLayout实现监听滑动悬停的触顶提示&#xff0c;有不理解的小伙伴可移步之前的文章——安卓开发中上滑触顶悬停 上述三个控件的结构图如下&#xff0c;在滑动时需要触顶的部分需要在 AppBarLayo…

培训学校小程序开发

我是【码云数智】平台的黄导&#xff0c;今天分享&#xff1a;培训学校小程序开发 知识付费小程序能够实现线上音频课程、视频课程、直播课程以及专栏课程和图文课程&#xff0c;并且我们也针对营销端做了很多营销功能&#xff0c;可以精准触达目标用户&#xff0c;实现内容的…

软件设计之Redis(3)

软件设计之Redis(3) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷Redis零基础到进阶&#xff0c;最强redis7教程&#xff0c;阳哥亲自带练&#xff08;附redis面试题&#xff09; 资料可以去尚硅谷官网免费领取 感谢学习笔记提供&#xff1a…