记录vite项目中Cornerstone的兼容问题(持续更新)

news2024/9/25 15:26:52

🔎 在vite项目中打包提示错误

ESM integration proposal for Wasm" is not supported currently.

⛳️ 问题描述

Error: Could not load /home/xxx/xxx/node_modules/@icr/polyseg-wasm/dist/ICRPolySeg.wasm (imported by node_modules/@icr/polyseg-wasm/dist/index.js): “ESM integration proposal for Wasm” is not supported currently. Use vite-plugin-wasm or other community plugins to handle this. Alternatively, you can use .wasm?init or .wasm?url. See https://vitejs.dev/guide/features.html#webassembly for more details.

🎯 临时解决方案

import { defineConfig } from "vite";

export default defineConfig({
  resolve: {
    alias: {
      "@cornerstonejs/tools": "@cornerstonejs/tools/dist/umd/index.js"
    },
  },
});

📡 官方进度

关注:https://github.com/cornerstonejs/cornerstone3D/issues/1071


🔎 在vite项目中由于循环引用导致影像无法显示的问题

failed Error: loadImageFromImageLoader: no image loader for imageId

⛳️ 问题描述

在vite项目中安装1.4X.X+版本的Cornerstone时,一直会有以下报错信息:
在这里插入图片描述

📡 问题定位

在代码调试时,可以看到以下调试信息,在ImageLoader文件中,imageLoaders变量是一个模块内的全局变量,通过调用注册函数初始化

  • imageLoaders 变量声明(Cornerstone源码中实现)
// node_modules/@cornerstonejs/core/src/loaders/imageLoader.ts
export function registerImageLoader(
  scheme: string,
  imageLoader: ImageLoaderFn
): void {
  // imageLoaders 为全局变量,通过调用 registerImageLoader 这个函数初始化
  imageLoaders[scheme] = imageLoader;
}
  • imageLoaders 初始化(项目代码中实现,即调用上面声明的这个函数)
cornerstone.imageLoader.registerImageLoader('wadouri', cornerstoneDICOMImageLoader.wadouri.loadImage);

在执行完该步骤后,imageLoaders中应该含有’wadouri’属性的对象,但是在debugger中查看 imageLoaders 依旧为undefined
在这里插入图片描述

查看调试中的imageLoaders变量,发现文件指向 node_modules/@cornerstonejs/streaming-image-volume-loader/node_modules/@cornerstonejs/core/src/loaders/imageLoader.ts, 即 我们执行的上述【imageLoaders 初始化】过程是初始化了项目node_modules中的imageLoaders变量,但是在渲染dicom文件时,调用的是@cornerstonejs/streaming-image-volume-loader 库中自己node_modules下的imageLoaders变量。

✨✨✨ 结论:Vite 基于 ES 模块,每个模块都是在其自己的作用域中执行的所以在不同的目录中初始化的变量只能在自己的作用域中生效。

🎯 解决方案

  1. 确保两个库使用的是同一个 @cornerstonejs/core 实例:即@cornerstonejs/core 在整个项目中只被加载一次,可以通过设置 package.jsonresolutions 字段来强制使用同一版本。
{
  "resolutions": {
    "@cornerstonejs/core": "^版本号"
  }
}

  1. 配置 Vite 以确保正确的依赖解析
// vite.config.js
import { defineConfig } from 'vite';

export default defineConfig({
  resolve: {
    alias: {
      '@cornerstonejs/core': require.resolve('@cornerstonejs/core'),
    },
  },
});

通过以上配置解决循环依赖中,模块变量无法访问的问题

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

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

相关文章

【软件建模与设计】-02-UML图

目录 摘要 1、用例图(use case diagram) 2、类与对象 3、类图 3.1、四种关系 3.2、可见性 4、交互图 4.1、通信图 4.2、顺序图 5、状态机图 6、包图 7、并发通信图 8、部署图 9、UML扩展机制 9.1、构造型 9.2、标记值 9.3、约束 摘要 用…

log4j2的日志框架(详细,springboot和异步日志的实现)

目录 log4j2的介绍 Log4j2的性能 SpringBoot中的使用Log4j2 log4j2的进阶--异步日志 AsyncAppender方式 AsyncLogger方式 log4j2的介绍 Apache Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带 来…

韦东山嵌入式linux系列-驱动进化之路:总线设备驱动模型

1 驱动编写的 3 种方法 以 LED 驱动为例 1.1 传统写法 使用哪个引脚,怎么操作引脚,都写死在代码中。 最简单,不考虑扩展性,可以快速实现功能。 修改引脚时,需要重新编译。 应用程序调用open等函数最简单的方法是驱动…

ISO 45001:提升职业健康与安全管理水平的关键

在现代企业管理中,员工的职业健康与安全(OH&S)已经成为不可忽视的重要议题。ISO 45001作为国际标准化组织(ISO)制定的职业健康与安全管理体系标准,为企业提供了科学有效的管理规范和指南。实施这一标准…

C#中的反射

dll和exe文件的区别 用途: .exe(可执行文件):是可以直接运行的程序文件。当你双击一个 .exe 文件或在命令行中输入它的名字,操作系统会加载并执行这个程序。 .dll(动态链接库):包含…

如何在SpringCloud中使用Kafka Streams实现实时数据处理

使用Kafka Streams在Spring Cloud中实现实时数据处理可以帮助我们构建可扩展、高性能的实时数据处理应用。Kafka Streams是一个基于Kafka的流处理库,它可以用来处理流式数据,进行流式计算和转换操作。 下面将介绍如何在Spring Cloud中使用Kafka Streams实…

从零开学C++:类和对象(中)

引言:在我们学习了类和对象(上)的基础知识后,我们就需要进入类和对象(中)的学习。本篇博客将会介绍C的几个默认成员函数,它们的存在虽然难以理解,但也是C如此简单实用的原因之一。相…

C++学习指南(一)——C++入门基础

欢迎来到繁星的CSDN,本期内容主要包括C第一个程序,命名空间,缺省参数,函数重载,引用、inline以及nullptr这些基础概念。 在进入正题之前,我需要先阐述一下。本系列涉及的内容为C部分,可以理解为…

The Open Group 爱丁堡大会高光集锦——企业架构、人工智能和可持续发展的创新交叉点

4月底,The Open Group峰会在英国爱丁堡顺利举办。活动邀请到数十位领域专家、技术、论坛成员、工作组和联合组织等相聚在一起,围绕生态系统架构和人工智能标准、可持续性、企业架构、数字转型等话题进行了对话与探讨。大会吸引了来自30个国家的400位观众…

bi项目笔记

1.bi是什么 bi项目就是商业智能系统,也就是数据可视画、报表可视化系统,如下图的就是bi项目了 2.技术栈

Mysql数据库的备份与恢复以及索引操作

一,备份与恢复操作 1,创建数据库booksDB CREATE DATABASE booksDB; use booksDB; 2,建表 (1)创建表books CREATE TABLE books ( bk_id INT NOT NULL PRIMARY KEY, bk_title VARCHAR(50) NOT NUL…

MYSQL--第八次作业

MYSQL–第八次作业 一、备份与恢复 环境搭建: CREATE DATABASE booksDB; use booksDB;CREATE TABLE books ( bk_id INT NOT NULL PRIMARY KEY, bk_title VARCHAR(50) NOT NULL, copyright YEAR NOT NULL );CREATE TABLE authors ( auth_id INT NOT NULL PRI…

SpringCloud第三篇(服务中心与OpenFeign)

p 文章目录 一、服务中心二、Nacos注册中心 一、服务中心 在上一章我们实现了微服务拆分,并且通过Http请求实现了跨微服务的远程调用。不过这种手动发送Http请求的方式存在一些问题。 试想一下,假如商品微服务被调用较多,为了应对更高的并发…

【JavaEE】AOP实现原理

概述 Spring AOP 是基于动态代理来实现AOP的, 此处主要介绍代理模式和Spring AOP的源码剖析 一.代理模式 代理模式是一种常用的设计模式,它允许为其他对象提供代理,以控制对这个对象的访问。这种结构在不改变原始类的基础上,通过引入代理类…

前端的页面代码

根据老师教的前端页面的知识&#xff0c;加上我也是借鉴了老师上课所说的代码&#xff0c;马马虎虎的写出了页面。如下代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</ti…

Gitea 仓库事件触发Jenkins远程构建

文章目录 引言I Gitea 仓库事件触发Jenkins远程构建1.1 Jenkins配置1.2 Gitea 配置引言 应用场景:项目部署 I Gitea 仓库事件触发Jenkins远程构建 Gitea支持用于仓库事件的Webhooks 1.1 Jenkins配置 高版本Jenkins需要关闭跨域限制和开启匿名用户访问 在Jenkins启动前加入…

微前端基础知识

1. 前言 随着Web应用程序规模的日益扩大和复杂性的增加&#xff0c;传统的前端开发模式逐渐显现出其在维护、扩展以及团队协作方面的局限性。微前端作为一种新兴的前端架构模式&#xff0c;正是为了应对这些挑战而诞生的。 微前端&#xff08;Micro-Frontends&#xff09;并没有…

matine组件库踩坑日记 --- react

Mantine实践 一 禁忌核心css样式二 添加轮播图扩展组件 一 禁忌核心css样式 import React from react import ReactDOM from react-dom/client import { BrowserRouter } from react-router-dom; import App from ./App.jsx import ./index.css import mantine/core/styles.cs…

收银系统源码-会员功能

随着新零售时代不断更新迭代&#xff0c;私域会员已经成为很多连锁门店必要的选择。自然离开不了一套能高效管理会员的收银系统。今天给大家推荐一下&#xff0c;智慧新零售收银系统的会员功能。 了解更多查看下文&#xff1a; 门店收银系统源码-CSDN博客文章浏览阅读2.6k次&…

开源项目:机遇与挑战共存的创新之路

开源项目&#xff1a;机遇与挑战共存的创新之路 开源&#xff08;Open Source&#xff0c;开放源码&#xff09;被非盈利软件组织&#xff08;美国的Open Source Initiative协会&#xff09;注册为认证标记&#xff0c;并对其进行了正式的定义&#xff0c;用于描述那些源码可以…