SvelteKit/Vite重复运行应仅执行一次的导入代码问题
更新
全新安装的基础版SvelteKit不会出现此问题。推测该问题可能源于ComLink依赖或Web Worker本身。保留此问题并添加webworker标签,若找到解决方案会反馈或删除问题。
问题
我有两个核心代码一致的应用,分别基于Svelte+Vite和SvelteKit+Vite搭建(均使用TypeScript 5.0)。SvelteKit应用会在每次导入时重复运行导入代码,这不符合预期。将Svelte应用的Vite配置迁移到SvelteKit应用后,问题仍未解决。我计划从Svelte切换到SvelteKit,但此问题阻碍了进程,恳请提供指导、方向或搜索关键词。
示例
我在State.ts中定义应用状态,并在多个脚本文件中导入它。在State.ts顶部添加了console.log("STATE setup")语句。在Svelte应用中,尽管被多个文件导入,"STATE setup"仅打印一次;而在SvelteKit应用中,该语句会打印约8次(每次导入打印一次),且每隔几秒循环打印一次(推测是导入时代码重复运行导致)。
State.ts代码如下:
console.log("State imported"); export const state = "My State";
当auth.ts、config.ts和根目录+layout.svelte三个文件通过以下方式导入State.ts时:
import { state } from `$lib/app/State.ts`
Svelte应用的日志为:
State imported
而SvelteKit应用的日志为:
State imported State imported State imported
Vite配置
vite.config.ts中的配置如下:
import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig, searchForWorkspaceRoot } from 'vite'; import { nodePolyfills } from "vite-plugin-node-polyfills" export default defineConfig({ plugins: [ nodePolyfills(), sveltekit() ], resolve: { alias: { './runtimeConfig': './runtimeConfig.browser' } }, server: { fs: { allow: [ searchForWorkspaceRoot(process.cwd()), "/build-scripts" ] } }, build: { sourcemap: true, target: "es2020" }, optimizeDeps: { esbuildOptions: { target: "es2020" } } });
附加信息(可能无关)
- "vite": "^4.3.0"
- "typescript": "^5.0.0"
- "svelte": "^3.54.0"
- "@sveltejs/adapter-static": "^2.0.2"
- "@sveltejs/kit": "^1.5.0"
- 使用
@sveltejs/adapter-static——虽削弱了SvelteKit部分特性,但看中其路由管理和项目结构 - 直到尝试实现长期运行的Web Worker后问题才变得严重,该Worker会被循环实例化多次直至应用崩溃
- 插件中的
nodePolyfills()用于解决Web Worker环境中AWS Cognito的global is not defined及global、window未定义错误
内容的提问来源于stack exchange,提问作者Jacob Runge
相关产品推荐
相关产品推荐

