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

在Svelte项目中使用vis.js时遭遇Unexpected token 'export'错误求助

问题描述

在创建展示网络图的Svelte应用时,使用vis.js的vis-data和vis-network包时出现解析错误,在Next.js应用中测试也无法正常运行。报错信息如下:

Unexpected token 'export'
/home/walenty/Code/diagram/my-app/node_modules/vis-data/peer/index.js:1
export * from "./esm";
^^^^^^

SyntaxError: Unexpected token 'export'
    at Object.compileFunction (node:vm:360:18)
    at wrapSafe (node:internal/modules/cjs/loader:1055:15)
    at Module._compile (node:internal/modules/cjs/loader:1090:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10)
    at Module.load (node:internal/modules/cjs/loader:1004:32)
    at Function.Module._load (node:internal/modules/cjs/loader:839:12)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:170:29)
    at ModuleJob.run (node:internal/modules/esm/module_job:193:25)
    at async Promise.all (index 0)
    at async ESMLoader.import (node:internal/modules/esm/loader:533:24)

相关代码:
+page.svelte

<svelte:head>
    <title>About</title>
    <meta name="description" content="About this app" />
</svelte:head>

<script>
    
import { DataSet } from "vis-data/peer";
import { Network } from "vis-network/peer";
import "vis-network/styles/vis-network.css";
</script>

<div class="text-column">

</div>

+page.ts

import { dev } from '$app/environment';

// we don't need any JS on this page, though we'll load
// it in dev so that we get hot module replacement
export const csr = dev;

// since there's no dynamic data here, we can prerender
// it so that it gets served as a static asset in production
export const prerender = false;

已确认node_modules中的vis包使用ESM导出,但不清楚为何触发该错误。

解决方案

1. 配置SvelteKit转译第三方ESM包

SvelteKit的SSR环境默认会尝试用CommonJS加载第三方包,而vis.js的peer版本是纯ESM,需要配置让SvelteKit直接处理这些包:

修改svelte.config.js:

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

/** @type {import('@sveltejs/kit').Config} */
const config = {
	preprocess: vitePreprocess(),
	kit: {
		adapter: adapter(),
		ssr: {
			noExternal: ['vis-data', 'vis-network']
		}
	}
};

export default config;

或者在vite.config.js中添加优化配置:

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

export default defineConfig({
	plugins: [sveltekit()],
	optimizeDeps: {
		include: ['vis-data', 'vis-network']
	}
});

2. 替换导入路径为标准版本

你当前使用的是vis-data/peer和vis-network/peer(peer依赖版本),尝试换成标准导入路径,避免peer依赖带来的加载问题:

修改+page.svelte中的导入:

import { DataSet } from "vis-data";
import { Network } from "vis-network";
import "vis-network/styles/vis-network.css";

3. Next.js环境的适配方案

如果在Next.js中测试,需要配置next.config.js让Next.js转译这些ESM包:

/** @type {import('next').NextConfig} */
const nextConfig = {
  transpilePackages: ['vis-data', 'vis-network'],
};

module.exports = nextConfig;

4. 重新安装依赖

清理现有依赖后重新安装,确保依赖版本匹配:

rm -rf node_modules package-lock.json
npm install

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:55:29