打包时循环依赖(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

相关文章

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

Spring Boot项目打包和运行的操作方法

《SpringBoot项目打包和运行的操作方法》SpringBoot应用内嵌了Web服务器,所以基于SpringBoot开发的web应用也可以独立运行,无须部署到其他Web服务器中,下面以打包dem... 目录一、打包为JAR包并运行1.打包为可执行的 JAR 包2.运行 JAR 包二、打包为WAR包并运行

Python将字库文件打包成可执行文件的常见方法

《Python将字库文件打包成可执行文件的常见方法》在Python打包时,如果你想将字库文件一起打包成一个可执行文件,有几种常见的方法,具体取决于你使用的打包工具,下面就跟随小编一起了解下具体的实现方... 目录使用 PyInstaller基本方法 - 使用 --add-data 参数使用 spec 文件(

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1