腾讯云的 nodejs sdk 安装后 85M

230 天前
 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 了。

9825 次点击
所在节点    程序员
67 条回复
jinliming2
229 天前
好奇去看了下,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
229 天前
@subframe75361 其它还好,版本号那里看笑了,是把前任发布工程师优化了,后来的野路子随便写了一个版本号吧,笑死
jinliming2
229 天前
然后,楼主的运行方法,tsc 只是把 ts 转成 js ,还是会依赖 node_modules 的。
按需打包的话,相当于仅保留用到的代码,带上 tree shaking ,最终你用到多少代码就得到多少代码,还会去掉注释,这样 TSDoc 就都没了,最终产物不会很大。
jsq2627
229 天前
推荐后端项目也通过 webpack 等 bundle 之后再部署。除非有些依赖不支持 bundle
scienhub
229 天前
@jinliming2 感谢大佬写的如此详细。
我们只用了 typescript 转译,没有用其他的代码精简工具比如 rollup 。typescript 本身也会去掉注释之类的,但是不会动 node-modules 下面的东西。

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

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

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

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

https://www.v2ex.com/t/1108471

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

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

© 2021 V2EX