关于使用Vue3+Vite+Lib库模式下Vue-router在外层项目中获取不到实例问题

本文主要是介绍关于使用Vue3+Vite+Lib库模式下Vue-router在外层项目中获取不到实例问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题介绍

我正在使用Vue3+Vite开发一款共享组件库来供多个项目使用,当我在封装一个侧边导航栏组件的时候,使用到了路由跳转相关逻辑,即:

const $route = useRoute();

而我并没有将 vue-router 打入到我的库中去,而是打算依赖于外层项目的 vue-router,即 package.json 中是这样的:

"peerDependencies": {"ant-design-vue": "~3.2.0","vue-i18n": "^9.2.0","vue-router": "^4.0.0"
},

可是当该库编译之后并在外层项目中引用的时候,发现此时的 $routeundefined

解决方法

Google了一阵之后发现,在 这里 发现了遇到了一样的问题

最终发现,只要在 vite.config.ts 中的 rollupOptions 中指定 vue-router 即可正常打包使用,即:

rollupOptions: {// 确保外部化处理那些你不想打包进库的依赖external: ['vue', 'vue-router'],output: {// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量globals: {vue: 'Vue',},},
},

猜测如下:
当不设置 external 属性时编译库的时候,将 vue-router 相关引用打包到了index中,但由于该依赖是放在 peerDepenencies 中,导致编译的部分无法正常运行,因此外部引用的时候拿到的为 undefined
而将其指定 external 属性后,编译的时候会自动引入外层的 vue-router,此时可正常执行到相关代码,编译后的index首部如下:

(function(se,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("vue"),require("vue-router")):typeof define=="function"&&define.amd?define(["exports","vue","vue-router"],d):(se=typeof globalThis<"u"?globalThis:se||self,d(se.SharedFrontEndVite={},se.Vue,se.vueRouter))})(this,function(se,d,Fn){"use strict";const ct=d.defineComponent({name:"SharedExample",__name:"Example",setup(e){return(t,n)=>(d.openBlock(),d.createElementBlock("div",null,"这个是示例组件"))}});/*!

可以看到此处 require('vue-router'),因此可以正常执行代码
当然,因为本身对于 rollup 和 Vite 的 lib 模式不太了解,所以该说法也不一定正确,有懂的大佬可以交流讨论下,不对的问题烦请您指出

这篇关于关于使用Vue3+Vite+Lib库模式下Vue-router在外层项目中获取不到实例问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/485005

相关文章

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.