nuxt3采用传统scipt标签使用第3方库

背景:

我们经常需要使用到诸如swiper的第3方库,这种第3方库,有的提供相应的npm引入方式,有的没有,对于没有的,我们又想像传统web开发一样使用script引入,在nuxt3下面如何处理?

解决方式:

1.在nuxt.config.ts下面配置对应的js和css
 

app: {baseURL: "/路径名称/",//head: {title: "",link: [{rel: "icon",type: "images/x-icon",href: "网站ico图标",},],script: [{src: "导入需要的内容文件", type: "text/javascript" },],meta: [{ charset: "utf-8" },{ name: "viewport", content: "width=device-width, initial-scale=1" },{ hid: "keywords", name: "keywords", content: "" },{ hid: "description", name: "description", content: "" },],},},

这种配置方式是全局,就是页面本身没有使用到的js可能会引用到,这就影响首页的加载体验

2.使用useHead在具体的组件动态加载,例如:

useHead({link: [{rel: "stylesheet",type: "text/css",href: "https://unpkg.com/swiper@8.4.7/swiper-bundle.css",},],script: [{type: "text/javascript",src: "https://unpkg.com/swiper@8.4.7/swiper-bundle.js",},],
});

这种配置确实可以在使用组件的时候进行加载,但有个问题就是什么时候加载完是不清楚的,没找到有相关的api,这样就会导致,功能可能出现时而正常时而异常的问题。
使用setTimeout等方式延迟渲染可能可以缓解,但延迟多久合适?所以也不是个靠谱的方案,建议官方useHead要么做成promise的要么去掉加载js和css的配置,避免出问题。

3.实现个函数完成加载的事情


在utils/index.ts里面写这2个函数,后续添加新的第3方库可参考修改

export async function loadJsCss({js = [],css = [],
}: {js?: string[];css?: string[];
}) {const loadScript = (src: string) => {return new Promise((resolve, reject) => {const script = document.createElement("script");script.type = "text/javascript";script.src = src;script.onload = resolve;script.onerror = reject;document.head.appendChild(script);});};const loadStyle = (href: string) => {return new Promise((resolve, reject) => {const link = document.createElement("link");link.rel = "stylesheet";link.href = href;link.onload = resolve;document.head.appendChild(link);});};const loadResources = async () => {const promises: Promise<any>[] = [];for (const jsSrc of js) {promises.push(loadScript(jsSrc));}for (const cssHref of css) {promises.push(loadStyle(cssHref));}await Promise.all(promises);};await loadResources();
}export async function loadSwiperLib() {if (!window.Swiper) {await loadJsCss({css: ["https://unpkg.com/swiper@8.4.7/swiper-bundle.css"],js: ["https://unpkg.com/swiper@8.4.7/swiper-bundle.js"],});}return window.Swiper;
}

调用方式:

onMounted(async () => {
const Swiper = await loadSwiperLib();
let swiper = new Swiper(".mySwiper", {...})
})

其他补充

window.Swiper在ts环境下可能会报错找不到,需要添加个evn.d.ts定义下

declare module "@wangeditor/editor-for-vue";interface Window {Swiper: any;
}

采用正常vue方式引入swiper的一些参考:

Nuxt.js 3.x 套件應用-Swiper 製作輪播動畫 - Claire's Notes

Swiper · Nuxt Modules 

Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 

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

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

相关文章

最大的游戏交流社区Steam服务器意外宕机 玩家服务受影响

易采游戏网6月3日消息&#xff1a;众多Steam游戏玩家报告称&#xff0c;他们无法访问Steam平台上的个人资料、好友列表和社区市场等服务。同时&#xff0c;社区的讨论功能也无法正常使用。经过第三方网站SteamDB的确认&#xff0c;&#xff0c;这一现象是由于Steam社区服务器突…

新奇css模板

引言 (csscoco.com)https://csscoco.com/inspiration/#/./init

ardupilot开发 --- 机载计算机-软件方案 篇

马儿跑马儿不吃草 0. 概述APSyncBlueOSDroneKitFlytOSMaverickROSRpanion-server结论 0. 概述 The Companion Computer software refers to the programs and tools that run on the Companion Computer. They will take in MAVLink telemetry from the Flight Controller and…

Swift 中 @preconcurrency 修饰符使用浅谈

概述 Swift 6.0 与我们越来越近了&#xff0c;如何将旧范儿的并发代码装换为严格遵守 Swift 6.0 并发模型&#xff08; Strict Concurrency&#xff09;的新代码&#xff0c;这往往使得秃头码农们又要多抓掉几根头发了。 所以&#xff0c;为了最大限度的保持新旧两个并发世界暂…

在Spring Boot项目中使用Redisson实现延迟执行

提供一个完整的示例&#xff0c;演示如何在Spring Boot项目中使用Redisson实现延迟执行。 1. 添加Redisson依赖&#xff1a; 在你的pom.xml文件中添加Redisson的依赖&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson-s…

模拟人为操作并获取数据

问题 假设需要获取一个微信公众号h5应用的某些数据&#xff0c;而这个应用存在如下一些反爬措施&#xff0c;从而决定了获取数据的方式。 每一个操作都有类似埋点行为&#xff0c;这样即可收集每个用户的操作轨迹。通过轨迹正常与否&#xff0c;很容易判断一个用户是否在恶意获…

【Spring Cloud Alibaba】开源组件Nacos及安装与配置

目录 什么是NacosNacos的关键特性服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元数据管理 Nacos的架构Nacos的用户Nacos的安装预备环境准备安装方式有两种&#xff1a;源码安装和下载编译好的安装包Nacos 支持三种部署模式&#xff0c;分别是单机、集群和多集群。…

性能飙升50%,react-virtualized-list如何优化大数据集滚动渲染

在处理大规模数据集渲染时&#xff0c;前端性能常常面临巨大的挑战。本文将探讨 react-virtualized-list 库如何通过虚拟化技术和 Intersection Observer API&#xff0c;实现前端渲染性能飙升 50% 的突破&#xff01;除此之外&#xff0c;我们一同探究下该库还支持哪些新的特性…

【Git篇 二】idea中使用git合并分支(拉取分支)

idea中使用git合并分支 前言idea使用git合并分支1) 将主分支&#xff08;master&#xff09;更新到自己的分支&#xff08;dev&#xff09;① checkout到自己分支② 目标分支&#xff08;dev&#xff09;更新到当前分支&#xff08;dev_KC240524&#xff09;③ 当前分支出现“绿…

【Python】 Python网络请求库大比拼:urllib、urllib2、urllib3与requests

基本原理 在Python中&#xff0c;进行网络请求是常见的任务之一&#xff0c;无论是下载网页内容、获取API数据还是进行文件上传。Python社区提供了多种库来帮助开发者完成这些任务。其中&#xff0c;urllib、urllib2、urllib3和requests是最为流行的几个。了解它们之间的区别对…

促进设备缺陷闭环管理,引入智能巡检系统正当时

经过近些年的应用与发展&#xff0c;智能巡检系统的功能与可操作性已经非常成熟&#xff0c;在巡检工作整合管理、与其他系统调用对接、促进设备缺陷闭环管理方面的优秀表现&#xff0c;使其在安全管理工作中的发挥了超预期的工具价值。 一、巡检工作整合管理 设备巡检管理、安…

QT 编译Lua 动态库,使用Lua脚本混合编程

一,编译Lua动态库 1,下载lua源码 地址:Lua: downloadhttps://www.lua.org/download.html 2,配置 解压lua源码压缩包,里面有个src文件夹,里面的代码就是lua的源码

Paper Survey——3DGS-SLAM

之前博客对多个3DGS SLAM的工作进行了复现及代码解读 学习笔记之——3DGS-SLAM系列代码解读_gs slam-CSDN博客文章浏览阅读1.9k次&#xff0c;点赞15次&#xff0c;收藏45次。最近对一系列基于3D Gaussian Splatting&#xff08;3DGS&#xff09;SLAM的工作的源码进行了测试与…

广东肇庆mes系统服务商 盈致科技

广东肇庆MES系统服务商盈致科技为企业提供专业的MES系统解决方案&#xff0c;帮助企业实现生产过程的数字化管理和优化。盈致科技的服务包括但不限于以下方面&#xff1a;MES系统定制开发&#xff1a;盈致科技可以根据企业的实际需求定制开发MES系统&#xff0c;满足企业特定的…

《猎杀:对决》是适合什么样的人玩 Mac电脑怎么玩《猎杀:对决》

《猎杀&#xff1a;对决》是一款集合了生存、竞技和恐怖元素的多人在线游戏&#xff0c;自推出以来受到了广大玩家的热爱。本文将详细探讨《猎杀&#xff1a;对决》适合什么样的人玩以及Mac电脑怎么玩《猎杀&#xff1a;对决》。本文将一一解析&#xff0c;帮助你了解这款游戏是…

maven中央仓库手动下载到本地仓库

1.maven中央仓库网址 maven中央仓库 2.搜索需要的jar包 3.点击坐标mybatis坐标进入 4.winR输入cmd打开命令窗口 mvn dependency:get -DremoteRepositoriesurl -DgroupIdgroupId -DartifactIdartifactId -Dversionversion5.maven本地仓库

判断JavaScript对象是否为空,最佳方法与性能对比

引言&#xff1a;在日常开发中&#xff0c;你是否经常需要判断一个对象是否为空&#xff1f;你知道有哪些高效的方法可以做到这一点吗&#xff1f;今天&#xff0c;我们不仅要探讨这些方法&#xff0c;还要通过性能对比找出最优解。快来看看&#xff0c;你平常用的方法是最佳选…

Python基础教程 第2版 PDF下载

Python基础教程 第2版 PDF下载 在数字时代的浪潮中&#xff0c;Python已成为众多程序员和数据分析师的首选编程语言。对于初学者来说&#xff0c;一本好的Python教程无疑是开启编程之门的金钥匙。本文将为您介绍如何下载《Python基础教程 第2版》的PDF版本&#xff0c;并从四个…

02_初识Nginx

文章目录 一、基础知识1.1 什么是代理服务器1.2 正向代理概述1.3 反向代理概述1.4 负载均衡1.5 动静分离 二、Nginx2.1 Nginx是什么2.2 Nginx的特点2.3 Nginx负载均衡策略2.4 Nginx的Master-Worker模式 参考链接 一、基础知识 1.1 什么是代理服务器 在最简单的场景下&#xf…

Linux安装gpu驱动

安装rpm包 进入官网 &#xff0c;选择机器的配置和环境。 下载完rpm之后&#xff0c;运行下面的命令。 i) sudo rpm -i nvidia-driver-local-repo-rhel8-550.54.15-1.0-1.x86_64.rpm ii) sudo dnf clean all iii) sudo dnf -y module install nvidia-driver:latest-dkms 安…