打包时循环依赖(circular dependency)警告

2023-10-28 20:20

本文主要是介绍打包时循环依赖(circular dependency)警告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我在打包构建我的vue3项目的时候,有这么一个警告信息:

Export “useProjectStore” of module “src/store/modules/user.js” was reexported through module “src/store/index.js” while both modules are dependencies of each other and will end up in different chunks by current Rollup settings. This scenario is not well supported at the moment as it will produce a circular dependency between chunks and will likely lead to broken execution order.

这个警告信息表明在你的项目中存在循环依赖的情况,可能会导致执行顺序混乱或出现错误。具体来说,警告信息指出了 useUserStore 在模块 src/store/modules/user.js 中被重新导出,并且同时被模块 src/store/index.js 依赖,而这两个模块可能会被打包到不同的块(chunks)中。

一般项目的依赖,或者是自己写的组件、函数等等向外界暴露接口或服务的时候,都是作为一个封装模块提供给另外的服务一些基础功能,所以在构建项目的时候一般不会碰到循环依赖的情况。

但是某些时候,就像我的项目中,有两个文件,他们有这么一种关系:一个是 pinia 的状态管理文件,管理着用户相关的状态,并含有初始化函数,在初始化函数中发送了请求;另一个是封装 axios 的请求相关文件,需要根据用户状态在请求的时候有一些不同的行为。这两个文件中都有互相需要的东西,所以他们都 import 了对方。

那么为什么在循环依赖的时候,模块可能会打包到不同的块?
在构建工具(如Rollup、Webpack等)处理循环依赖时,它们会尝试将模块拆分到不同的块(chunks)中以确保正确的执行顺序。

循环依赖的情况下,两个模块相互依赖,构建工具需要确保它们之间的依赖关系被正确处理,以避免在运行时出现错误。

为了解释为什么它们可能会被打包到不同的块,让我们来看一个简单的例子:

假设有两个模块,A 和 B,它们相互依赖:

模块 A:

Copy code
import { somethingFromB } from './B';
// ...

模块 B:

Copy code
import { somethingFromA } from './A';
// ...

如果构建工具将它们放在同一个块中,就可能会导致问题。因为在运行时,模块 A 和 B 会在加载时相互等待,造成死锁或者其他执行错误。

将它们放在不同的块中可以避免这种情况。当然,这也会导致新的问题,比如需要确保在加载时正确地解析它们的依赖关系。

在我的代码中,我是这么解决的:
各个 pinia 都导出到同一个 js 文件(index.js),再通过 index.js 统一暴露各个状态管理入口:

- store- modules- user.js // pinia- ... // 其余的 pinia- index.js // 将 modules 下的所有 pinia 都导入到这里再暴露出去

所有地方导入 pinia 只需要从@/store下导入即可,而封装着 axios 的文件在引入的时候,不能直接通过 index.js 引入,而是需要把路径写完整:@/store/modules/user.js

给大家参考一下,这种对函数、状态的封装可能出现循环依赖,组件倒不是很可能出现这种情况。

这篇关于打包时循环依赖(circular dependency)警告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1