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

如何缩小使用node-adapter部署的SvelteKit应用的打包体积

SvelteKit部署体积过大问题解决方案

体积异常原因

  • Bundlephobia标注的是包的客户端压缩后最小体积,本地安装的node_modules包含大量冗余内容:未拆分的开发依赖、嵌套重复依赖、包自带的文档、测试文件、类型定义等都会计入总容量
  • @prisma/client默认会下载全平台的Query Engine二进制文件,单份二进制大小就超过30MB,多平台版本累计可占上百MB空间,是体积异常的核心原因之一
  • 未拆分开发依赖与生产依赖,node_modules中包含SvelteKit构建工具、TypeScript、Lint工具等仅开发阶段需要的包,这部分占比极高

问题1:打包依赖仅保留必要代码方案

SvelteKit原生支持将生产依赖打包进最终产物,操作步骤如下:

  1. 拆分依赖:将所有仅开发阶段用到的包(包括@svletejs/kit、vite、prisma CLI、typescript、eslint等)全部移入package.json的devDependencies字段,dependencies仅保留你列出的5个生产依赖
  2. 修改svelte.config.js配置,开启服务端依赖打包:
import adapter from '@sveltejs/adapter-node';

/** @type {import('@sveltejs/kit').Config} */
const config = {
  kit: {
    // 使用对应node环境的适配器
    adapter: adapter(),
    vite: {
      ssr: {
        // 配置需要打包进服务端bundle的生产依赖,打包后无需再读取node_modules
        noExternal: ['@prisma/client', '@supercharge/request-ip', 'axios', 'ramda', 'sprintf-js']
      }
    }
  }
};

export default config;
  1. 优化Prisma体积:在prisma.schema中配置仅生成部署平台对应的二进制文件:
generator client {
  provider = "prisma-client-js"
  // 根据AlwaysData的系统环境选择对应二进制目标,常见为debian-openssl-1.1.x或debian-openssl-3.0.x
  binaryTargets = ["debian-openssl-1.1.x"]
}
  1. 构建完成后可直接删除根目录的node_modules文件夹,所有运行需要的代码都已经打进build产物内,仅保留build文件夹和Prisma生成的引擎文件即可,最终总体积不会超过10MB。如果确实需要保留部分node_modules内容,可执行npm prune --production删除所有开发依赖,再清理冗余文件进一步压缩容量。

问题2:生产环境自动导入dist目录压缩版本

SvelteKit的生产构建流程本身已经实现该能力:

  • 客户端侧代码会自动完成Tree Shaking、压缩、混淆,输出到dist目录的对应路径,内部导入路径已经自动映射到压缩后的产物,无需额外配置
  • 服务端侧代码按照前述配置完成依赖打包后,会直接使用打包压缩后的代码,不会访问node_modules内的源文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:54:02