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

使用Svelte引入transformers.js库报错的原因及解决方法

Svelte中导入transformers.js CDN模块报错的原因与解决方法

报错原因

SvelteKit依赖Vite作为构建工具,Vite默认会将模块中的HTTP/HTTPS URL导入视为本地模块路径处理,而非直接请求CDN资源。所以你写的顶层静态导入import { pipeline } from 'https://cdn.jsdelivr.net/npm/@xenova/transformers@2.3.0'会被Vite解析成本地文件查找,导致找不到模块的错误。

解决方法

方法1:使用动态await import(推荐)

动态导入是运行时加载,Vite不会在构建阶段解析CDN URL,而是由浏览器直接请求资源,这也是你看到的svelte-qrcode示例可行的原因。适配你的需求的代码如下:

<script>
  import { onMount } from 'svelte';
  let pipeline;

  async function initTransformer() {
    // 动态导入CDN模块
    const transformerModule = await import('https://cdn.jsdelivr.net/npm/@xenova/transformers@2.3.0');
    pipeline = transformerModule.pipeline;
    
    // 这里可以初始化你的任务,比如文本分类
    // const classifier = await pipeline('text-classification');
  }

  // 组件挂载后加载模块
  onMount(async () => {
    await initTransformer();
  });
</script>

方法2:配置Vite允许顶层CDN导入

如果你坚持使用顶层静态导入,可以修改Vite配置,告诉它不要处理这个CDN模块:

在项目根目录的vite.config.js(或vite.config.ts)中添加optimizeDeps.exclude配置:

import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';

export default defineConfig({
  plugins: [sveltekit()],
  optimizeDeps: {
    // 排除transformers模块,让Vite保留原CDN导入
    exclude: ['@xenova/transformers']
  }
});

之后就可以在组件中使用顶层导入:

<script>
  import { pipeline } from 'https://cdn.jsdelivr.net/npm/@xenova/transformers@2.3.0';
  
  async function init() {
    const classifier = await pipeline('text-classification');
    // 后续逻辑
  }
</script>

注意:transformers.js依赖WebAssembly,动态导入的方式更适合处理加载过程中的异步逻辑,避免阻塞组件渲染,推荐优先使用方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:27:12