腾讯云的 nodejs sdk 安装后 85M

2025 年 2 月 1 日
 scienhub

最近发现项目的node_modules打包越打越大,不看不知道,一看吓一跳。 腾讯云的 sdk 85M ,为了对比,还特地看了下@aws-sdk

cd node_modules && du -sh * | sort -h

13M	    @aws-sdk
.
.
.
12M     prisma
13M     @types
17M     @sentry
23M     typescript
29M     @opentelemetry
38M     @prisma
85M     tencentcloud-sdk-nodejs

进一步去里面看了下cd node_modules/tencentcloud-sdk-nodejs && du -sh * | sort -h

537K	examples
3.9M	test
4.9M	SERVICE_CHANGELOG.md
5.1M	CHANGELOG.md
28M	src
34M	tencentcloud

srctencentcloud 是不是重复了? 还有一个 CHANGELOG 和 SERVICE_CHANGELOG 都快 10M 了。

10969 次点击
所在节点    程序员
67 条回复
jinliming2
2025 年 2 月 1 日
好奇去看了下,src 目录和 tencentcloud 目录是大头。
src 下是 ts 源码,tencentcloud 下是编译过给 Node.JS 用的 CommonJS 代码。
然后里面主要内容在 services 里,有各种服务,平均 100k 左右,整个合起来就那么大。
然后 services 里面具体的有的会带日期命名的多个版本,应该是对应给不同版本的服务用的?如果确实不同版本同时有人用的话,那保留多个版本也还算合理?虽然更常见的做法是拆分不同版本的包,但是对于这种云服务 SDK 来说,我觉得放在一起问题不大。
然后里面最大的文件大部分都是 models 文件,是数据类型字段定义。然后大头是字段的 TSDoc 文档注释。

然后 CHANGELOG 有 5M 大小,内容大头是 commit history 。

src 和 tencentcloud 同时提供我觉得没什么问题,有些人倾向于直接 Node.JS require 使用,就用 tencentcloud 下的 CommonJS ,而有些人倾向于按需打包,用 src 会好一些(用 CommonJS 也不是不行,但 ts 源码更好)。
不过他们 src 下的导出方法有点问题,有多个版本的时候是 import 两个版本,然后 export 一个对象包含两个版本的 key ,这导致按需引用会出问题,总是会把所有版本都导入。
examples 和 tests 目录不算大,大部分库也会带着提供,提供不提供都行的。一般闭源的库会提供,开源的库你可以在项目托管的地方找到,就没必要提供。
CHANGELOG 也是大部分项目都会提供的,但开源的也确实同样没必要。
k9982874
2025 年 2 月 1 日
@subframe75361 其它还好,版本号那里看笑了,是把前任发布工程师优化了,后来的野路子随便写了一个版本号吧,笑死
jinliming2
2025 年 2 月 1 日
然后,楼主的运行方法,tsc 只是把 ts 转成 js ,还是会依赖 node_modules 的。
按需打包的话,相当于仅保留用到的代码,带上 tree shaking ,最终你用到多少代码就得到多少代码,还会去掉注释,这样 TSDoc 就都没了,最终产物不会很大。
jsq2627
2025 年 2 月 1 日
推荐后端项目也通过 webpack 等 bundle 之后再部署。除非有些依赖不支持 bundle
scienhub
2025 年 2 月 1 日
@jinliming2 感谢大佬写的如此详细。
我们只用了 typescript 转译,没有用其他的代码精简工具比如 rollup 。typescript 本身也会去掉注释之类的,但是不会动 node-modules 下面的东西。

后面可能会用 rollup 处理一下,不过暂时应该就将就了。
scienhub
2025 年 2 月 1 日
@FightPig 他们这 nodejs sdk 基本没文档,全靠看源码加猜来调试。
GoNtte
2025 年 2 月 1 日
tencentcloud-sdk-nodejs 这个是主包,装对应产品的分包体积小很多。aws-sdk 下的应该没有包含所有产品,所以体积小很多
GoNtte
2025 年 2 月 1 日
@scienhub 腾讯云有个 api explorer,可以查看每个产品接口的示例代码,看起来会方便点
jinliming2
2025 年 2 月 1 日
@scienhub #26 文档的话,简单看了下他们的 TSDocs 貌似挺详细的?每个字段、函数的含义都有说明,在编辑器里鼠标移上去应该都有文档提示?
也有工具能够根据 TSDocs 生成统一文档站的。
datou
2025 年 2 月 1 日
@shuimugan 没啥区别,你用 deno 或者 bun 调用腾讯云 sdk 也照样要用这个 85M 的 node_modules
Kokororin
2025 年 2 月 1 日
JensenQian
2025 年 2 月 1 日
JensenQian
2025 年 2 月 1 日
[img][/img]
[img][/img]

https://t.me/zaihuanews/30564
Vvictor
2025 年 2 月 1 日
哥们儿,你火了哈哈哈
slowgen
2025 年 2 月 1 日
@datou 看走眼了,还以为只用了腾讯云的 cos 。要是用 deno 的话在代码目录就可以没有 node_modules 了,眼不见为净。

to 楼主,node 项目我以前用 pkg 打成二进制放容器里的,整个 Docker 镜像压缩后只有 60~70MB 左右,还挺好用
MoGeJiEr
2025 年 2 月 1 日
op 满级贴吧老哥阿,喷的笑死我🤣
yaott2020
2025 年 2 月 2 日
腾讯好歹是国内 top3 的互联网公司,居然代码这么狗屎,世界还真是一个巨大的草台班子。。。😅😅😅
liamzzh
2025 年 2 月 2 日
笑死了,刚去围观了一下
lysShub
2025 年 2 月 2 日
@eryajf 编译后增加了 2G ?
Yadomin
2025 年 2 月 2 日
Python 版本装完 238M 。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1108471

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX