Skip to content

建议:build 改用 tsc --noEmit + esbuild 单文件打包,减小安装包体积 #42

Closed

Description

@WuJunkai2004

背景

感谢这个插件,非常实用 🎉

看了下 v1.7.4 的 package.json,当前构建脚本是:

"build": "tsc && node build.tui.mjs"

同时 files 里把 dist、src、tui 都发到了 npm 包里,加上ts相关工具,约121mb

Image

建议

把 build 改为:

"build": "tsc --noEmit && node build.tui.mjs"

让 tsc 只负责类型检查(仓库里已有 typecheck: tsc --noEmit 脚本,二者可以合并),产物统一交给 esbuild 打包成单文件——build.tui.mjs 已经在做这件事,dist/tui.js、dist/v2.js 就是单文件 bundle。

这样打包出来的产物:

  1. 去掉了 tsc 编译出的散装 js 部分,包内不再携带依赖库的引用;
  2. src 源码目录也可以顺便从 files 里移除;
  3. 在 opencode 里安装时不会携带这些依赖库,可以明显减少包体积。

备注

  • 如果 ./server 入口需要保留,也可以一并交给 esbuild 打成单文件;
  • 如需保留类型提示,可用 tsc --emitDeclarationOnly 只产出 .d.ts 声明文件,不影响上面的体积优化。

仅供参考,感谢维护!

Activity

  1. self-assigned this
    on Sep 30, 2026
  2. Hotakus commented on Sep 30, 2026

    @Hotakus
    Owner

    感谢你对 package.json 的分析, 通过 --noEmit 等手段确实可以令包本体体积减少,这确实是我的问题。并且我也发现了包体积过大的根因

    根据我本机实测由于依赖导致安装插件时包体积过大的问题(安装后 121MB,即使通过 --noEmit 貌似仍然无法解决),这个问题貌似是由于 peer 依赖包未进行 optional 声明导致的,若未进行 optional 声明,在安装插件时则会尝试全量安装依赖,导致体积膨胀,进行 optional 声明后,仅仅安装必要依赖,安装体积可以减少到个位 MB 量级,具体修改可以查看关联 PR ,后续我会合并入主线版本进行发布,感谢你的支持,如果后续还有什么使用问题,欢迎再提。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions