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

使用vite-node运行服务端目录下的数据库迁移脚本时遇到导入错误的求助

使用vite-node运行服务端目录下的数据库迁移脚本时遇到导入错误的求助

看起来你遇到的问题是Vite的环境上下文限制导致的——vite-node默认会以客户端环境来执行脚本,而你的$lib/server/migrate.ts属于服务端专属文件(比如在SvelteKit这类框架中,server目录下的文件会被Vite标记为仅服务端可导入),所以触发了框架的保护机制,禁止客户端代码导入它。

下面给你几个可行的解决方案:

  • 方案一:用vite-node的SSR模式运行脚本
    vite-node自带了--ssr参数,能强制脚本在服务端(SSR)上下文中执行,这样就能绕过客户端的导入限制。直接修改你的运行命令即可:

    npx vite-node --ssr src/lib/server/migrate.ts
    

    这是最直接的解决办法,适配大多数基于Vite的服务端框架(比如SvelteKit、Nuxt)。

  • 方案二:自定义Vite配置文件指定服务端环境
    如果方案一没有解决问题,你可以创建一个专门用于迁移的Vite配置,明确声明以服务端模式运行:

    1. 在项目根目录新建vite.migrate.config.ts文件:
    import { defineConfig } from 'vite';
    // 如果你用的是SvelteKit,需要导入对应的Vite插件
    import { sveltekit } from '@sveltejs/kit/vite';
    
    export default defineConfig({
      plugins: [sveltekit()], // 非SvelteKit项目可以移除这一行
      ssr: {
        enabled: true, // 启用服务端渲染模式
        noExternal: true // 确保所有依赖都能被服务端正确处理
      },
      resolve: {
        // 确保$lib别名在服务端环境下能正确解析
        alias: {
          '$lib': './src/lib'
        }
      }
    });
    
    1. 运行脚本时指定这个配置文件:
    npx vite-node --config vite.migrate.config.ts src/lib/server/migrate.ts
    
  • 方案三:临时替换别名为相对路径(权宜之计)
    如果你只是临时需要运行迁移,可以暂时把脚本里的$lib别名换成相对路径,比如把import { foo } from '$lib/utils'改成import { foo } from '../utils'。不过这只是应急方案,不推荐长期使用,因为会破坏项目的别名统一配置。

额外注意事项

  • 如果你使用的是SvelteKit,要确认src/lib/server目录确实是服务端专属路径,没有被误配置为客户端可访问;
  • 运行脚本时可以指定环境变量,避免环境不匹配的问题:
    NODE_ENV=development npx vite-node --ssr src/lib/server/migrate.ts
    

备注:内容来源于stack exchange,提问作者Elijah M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:09:48