You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SvelteKit中导入@cornerstonejs/core报错,寻求解决方法

在SvelteKit中使用Cornerstone3D解决"self is not defined"错误

问题根源

Cornerstone3D是专为浏览器环境设计的库,依赖浏览器全局对象self,但SvelteKit默认启用服务端渲染(SSR),在Node.js服务端环境中不存在self,因此导入库时会抛出ReferenceError。


解决方案

方案1:仅在客户端环境导入库(推荐)

利用Svelte的onMount钩子(仅在浏览器端执行)或SvelteKit提供的browser变量,确保库只在客户端加载:

修改src/routes/+page.svelte:

<script lang="ts">
    import { onMount } from 'svelte';
    let utilities;

    onMount(async () => {
        // 仅在客户端异步加载库
        const cornerstone = await import('@cornerstonejs/core');
        utilities = cornerstone.utilities;
        // 此处可编写依赖utilities的业务逻辑
    });
</script>

或者使用browser变量判断环境:

<script lang="ts">
    import { browser } from '$app/environment';
    let utilities;

    if (browser) {
        const { utilities: csUtilities } = await import('@cornerstonejs/core');
        utilities = csUtilities;
    }
</script>

方案2:配置Vite排除SSR处理

在svelte.config.js中修改Vite配置,告诉构建工具在服务端渲染时跳过Cornerstone3D的处理:

import adapter from '@sveltejs/adapter-auto';
import { vitePreprocess } from '@sveltejs/kit/vite';

/** @type {import('@sveltejs/kit').Config} */
const config = {
    preprocess: vitePreprocess(),
    kit: {
        adapter: adapter(),
        vite: {
            ssr: {
                // 将Cornerstone3D标记为客户端专属依赖
                noExternal: ['@cornerstonejs/core']
            }
        }
    }
};

export default config;

配置后仍需结合onMount或browser变量确保在客户端使用库。


无框架环境错误补充

你在无框架HTML中遇到的Cannot use import statement outside a module错误,是因为普通<script>标签默认采用CommonJS模块规范,需添加type="module"属性:

<script type="module" src="test.js"></script>

内容的提问来源于stack exchange,提问作者kwong22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:07:49