首页 > 其他分享 >webpack4升级到webpack5后部分页面出现Uncaught (in promise) ReferenceError: Cannot access '__WEBPACK_DEFAUL

webpack4升级到webpack5后部分页面出现Uncaught (in promise) ReferenceError: Cannot access '__WEBPACK_DEFAUL

时间:2024-08-22 09:48:18浏览次数:8  
标签:__ webpack5 依赖 js access 循环 模块 import

循环依赖

当两个或多个模块相互引用时,就会发生 JavaScript 中的循环依赖(也称为循环依赖)。

这可以是直接引用(A -> B -> A):

直接依赖,即 A 从 B 进口,而 B 又从 A 进口。

或间接 ( A -> B -> C -> A):

直接依赖,即 A 从 B 进口,B 从 C 进口,C 从 A 进口。

虽然循环依赖可能不会直接导致错误,但它们几乎总是会带来意想不到的后果。这可能表现为TypeScript类型检查缓慢或开发服务器频繁出现“JavaScript 堆内存不足”崩溃,但很可能会引入运行时错误。Node.js 确实支持模块之间的循环 require/import 语句,但它很快就会变得混乱。在 Node.js 文档中:

需要仔细规划才能使循环模块依赖关系在应用程序内正常工作。

处理循环依赖的最佳方法是完全避免它们。循环依赖通常是代码设计不良的标志,需要应尽可能重构和删除它们。

检查循环依赖

我使用circular-dependency-plugin来进行检查:

JavaScript
// webpack.config.js
const CircularDependencyPlugin = require("circular-dependency-plugin");

module.exports = {
  entry: "./src/index",
  plugins: [
    new CircularDependencyPlugin({
      // exclude detection of files based on a RegExp
      exclude: /a\.js|node_modules/,
      // add errors to webpack instead of warnings
      failOnError: true,
      // allow import cycles that include an asyncronous import,
      // e.g. via import(/* webpackMode: "weak" */ './file.js')
      allowAsyncCycles: false,
      // set the current working directory for displaying module paths
      cwd: process.cwd(),
    }),
  ],
};

会发现项目引入的各种循环依赖关系。循环依赖插件的输出

修复循环依赖

修复大型项目中的循环依赖关系可能要投入大量时间。因此,最好从一开始就使用循环依赖检查器,因为这样可以完全防止引入循环依赖关系。

实践

解决循环依赖导入问题并不总是有一个万能的解决方案。你只需要撸起袖子开始行动即可。

最终,归结为打破导入链。有几种方法可以消除循环依赖。对于较长的链,A -> B -> C -> D -> A如果删除其中一个引用(例如,引用D -> A),则循环引用模式将被打破。

对于更简单的模式,例如A -> B -> A,可能需要重构。也许可以将 中的模块B移至A。或者,可以将必要的代码提取到和引用的C中。如果两个模块执行类似的行为,也可以将它们组合成单个模块。这需要根据每个导入的独特因素逐案确定,但一般行为应该保持不变。AB

修复大量循环依赖可能需要投入大量时间,但可以提高代码库的可维护性,并减少将来的错误。通过将循环依赖插件保留在 webpack 中,可以频繁运行该插件,并且在引入循环依赖后会立即发现它。

标签:__,webpack5,依赖,js,access,循环,模块,import
From: https://www.cnblogs.com/AzrDream/p/18373134

相关文章

  • [VS Code扩展]写一个代码片段管理插件(二):功能实现
    @目录创建和插入代码片段代码片段列表代码片段预览代码片段编辑自定义映射默认映射自动完成项目地址创建和插入代码片段VSCode扩展提供了数据存储,其中globalState是使用全局存储的Key-Value方式来保存用户状态,支持在不同计算机上保留某些用户状态,详情请参考官方文档若在编辑器......
  • 多模态学习之论文阅读:《Pre-gating and Contextual Attention Gate — A new fusion m
    《Pre-gatingandContextualAttentionGate—Anewfusionmethodformulti-modaldatatasks》 -2024.11 影响因子7.9  (一)要点提出一种新的多模态数据融合方法,即PCAG(Pre-gatingandContextualAttentionGate),以解决现有跨模态交互学习中的噪声问题和不确定性问......
  • YC327A [ 20240821 CQYC NOIP 模拟赛 T1 ] 最值(minmax)
    题意对于一个序列\({b_n}\),规定:\[f_min(b)=\prod_{i=1}^n(min_{j=1}^ib_j)\]\[f_max(b)=\prod_{i=1}^n(max_{j=1}^ib_j)\]给定一个序列\(a\),求\(a\)所有的排列\(p\)的\(f_min(p)\)与\(f_max(p)\)之和。\(n\le5000\)Sol不难想到一个简......
  • 使用 JsonSchema 校验 JSON数据
    有时候JSON数据格式需要校验是否合法,我们可以使用JsonSchema来校验数据是否合法。引入pom.xmlhttps://json-schema.org/<dependency><groupId>com.networknt</groupId><artifactId>json-schema-validator</artifactId><versio......
  • 编写类A03,实现数组的复制功能copyArr,输入旧数组,返回一个新数组,元素和旧数组一样
    1publicclassHomework04{2//编写一个main方法3publicstaticvoidmain(String[]args){45int[]oldArr={10,30,50};6A03a03=newA03();7int[]newArr=a03.copyArr(oldArr);8//遍历newArr,验证9......
  • 零基础学习人工智能—Python—Pytorch学习(七)
    前言本文主要讲神经网络的下半部分。其实就是结合之前学习的全部内容,进行一次神经网络的训练。神经网络下面是使用MNIST数据集进行的手写数字识别的神经网络训练和使用。MNIST数据集,是一个常用的手写数字识别数据集。MNIST数据集包含60,000张28x28像素的灰度训练图像和......
  • 【原创软件】第10期:PDFCrossMergeV1.0-实现两个PDF交叉合并,适用于PDF扫描件合并,单文件
    解决问题:扫描件合并,由于大部分扫描件是正面一个pdf,反面一个pdf,尤其是正面顺序,反面逆序的pdf,需要交叉合并,也就是说适合单面扫描文件合并。即解决【正面顺序,反面逆序】文件A,扫描文件页码顺序:1、3、5、7、9。文件B,扫描文件页码顺序:10、8、6、4、2。这种合并问题。合并结果是1、2、3......
  • SLAB:华为开源,通过线性注意力和PRepBN提升Transformer效率 | ICML 2024
    论文提出了包括渐进重参数化批归一化和简化线性注意力在内的新策略,以获取高效的Transformer架构。在训练过程中逐步将LayerNorm替换为重参数化批归一化,以实现无损准确率,同时在推理阶段利用BatchNorm的高效优势。此外,论文设计了一种简化的线性注意力机制,其在计算成本较低的情况下......
  • 4. 格式约定(Format conventions)
    4.Formatconventions格式约定笔记:把待传输的数据当成C语言的结构体:低字节先行字节中的低位先行4.1.GeneralThroughoutthisstandard,unlessotherwisestated,datastructuresexposedininterfacesarerepresentedusingtheconventionsandformatsdefine......
  • 「对比评测」标准WPF DataGrid与DevExpress WPF GridControl有何不同?(一)
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......