V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
scienhub
V2EX  ›  程序员

腾讯云的 nodejs sdk 安装后 85M

  •  2
     
  •   scienhub ·
    batchfy · 31 天前 · 8106 次点击

    最近发现项目的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 了。

    第 1 条附言  ·  31 天前
    我这是后端项目,生产环境是在 docker 里面跑 node src/index.js
    第 2 条附言  ·  31 天前
    67 条回复    2025-02-06 13:01:05 +08:00
    hefish
        1
    hefish  
       31 天前
    大了说明高级啊。 反正是 sdk 嘛。问题不大。
    cj323
        2
    cj323  
       31 天前
    估计是机器生成的代码。不过 disk 反正不贵问题不大,主要关注 build 后多大就行了。
    scienhub
        3
    scienhub  
    OP
       31 天前
    @cj323 build 后是啥意思哦? 我这个 node_modules 就直接是生产环境的依赖, 生产环境里就是这么大哇?
    wunonglin
        4
    wunonglin  
       31 天前
    见怪不怪。在服务器跑的无所谓。
    crackidz
        5
    crackidz  
       31 天前   ❤️ 1
    都用 node 了还在乎这个...
    renmu
        6
    renmu  
       31 天前 via Android
    跑在服务端其实无所谓,在意的话自己 fork 改一下
    darkengine
        7
    darkengine  
       31 天前
    @scienhub 生产服务器上是直接 npm run dev 运行的?
    default996
        8
    default996  
       31 天前
    @scienhub build 后才是发布用的(通常是 npm run build ),一般打包发布后都不依赖 node_modules 了;你现在项目应该是开发阶段(通常是 npm run dev ),所以才需要 node_modules ,你说的“生产环境” 是指你现在开发的机器是线上的吧? 跟项目的生产发布不是一回事
    liaozzzzzz
        9
    liaozzzzzz  
       31 天前 via iPhone
    大概率只是 tx 这边发布到 npm 的时候没过滤掉多余的文件而已,实际你代码使用到的只是构建产物
    dingdangnao
        10
    dingdangnao  
       31 天前 via iPhone
    我咋记得腾讯云的包都是按业务分的?可能这个是总包?
    scienhub
        11
    scienhub  
    OP
       31 天前
    @darkengine 我这是后端项目,生产环境是 npx tsc && node src/index.js 的。
    npx tsc 过程并不会删除不需要的文件吧?
    scienhub
        12
    scienhub  
    OP
       31 天前
    @default996 我这是后端项目,生产环境是 npx tsc && node src/index.js 运行的。
    cj323
        13
    cj323  
       31 天前
    @scienhub 在 Node 项目里 build 主要就是 transpile/minify/treeshake 代码,你用 typescript 的话就是 tsc 那步,之后 build 出来的 index.js 体积就小了。不过后端项目没下载那一步应该没啥影响,除非你是上 serverless ,那不同的 runtime 可能会有体积限制。
    scienhub
        14
    scienhub  
    OP
       31 天前
    @cj323 影响倒是没有大影响,只不过进去一看 dependencies 的大小,吓一跳,tencentcloud 居然接近 100m 。
    eryajf
        15
    eryajf  
       31 天前
    对比 go 包更吓人,aws 的 go 语言 sdk ,来到了 2G 多
    subframe75361
        16
    subframe75361  
       31 天前
    只有 tencentcloud 这个文件夹是实际在跑的代码。。。
    subframe75361
        17
    subframe75361  
       31 天前   ❤️ 4
    虽然喷人不对,但是支持正义薄纱
    https://github.com/TencentCloud/tencentcloud-sdk-nodejs/issues/160
    JensenQian
        18
    JensenQian  
       31 天前
    下次给你安排虚幻引擎
    shuimugan
        19
    shuimugan  
       31 天前
    已经不用 Node 了,现在小项目在选 Deno 和 Bun 。Bun 在 1.2 内置了 S3 和 Postgres 客户端,可以给项目做不少减法 https://bun.sh/blog/bun-v1.2
    FightPig
        20
    FightPig  
       31 天前
    腾讯的 tencentcloud-sdk-ruby 也很搞,全是 java 的写法,看 21 年就有人给他们提过,结果到现在还是一样
    jinliming2
        21
    jinliming2  
       31 天前   ❤️ 3
    好奇去看了下,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
        22
    k9982874  
       31 天前 via Android
    @subframe75361 其它还好,版本号那里看笑了,是把前任发布工程师优化了,后来的野路子随便写了一个版本号吧,笑死
    jinliming2
        23
    jinliming2  
       31 天前   ❤️ 1
    然后,楼主的运行方法,tsc 只是把 ts 转成 js ,还是会依赖 node_modules 的。
    按需打包的话,相当于仅保留用到的代码,带上 tree shaking ,最终你用到多少代码就得到多少代码,还会去掉注释,这样 TSDoc 就都没了,最终产物不会很大。
    jsq2627
        24
    jsq2627  
       31 天前 via iPhone
    推荐后端项目也通过 webpack 等 bundle 之后再部署。除非有些依赖不支持 bundle
    scienhub
        25
    scienhub  
    OP
       31 天前 via iPhone
    @jinliming2 感谢大佬写的如此详细。
    我们只用了 typescript 转译,没有用其他的代码精简工具比如 rollup 。typescript 本身也会去掉注释之类的,但是不会动 node-modules 下面的东西。

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

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

    to 楼主,node 项目我以前用 pkg 打成二进制放容器里的,整个 Docker 镜像压缩后只有 60~70MB 左右,还挺好用
    MoGeJiEr
        36
    MoGeJiEr  
       31 天前
    op 满级贴吧老哥阿,喷的笑死我🤣
    yaott2020
        37
    yaott2020  
       31 天前 via Android
    腾讯好歹是国内 top3 的互联网公司,居然代码这么狗屎,世界还真是一个巨大的草台班子。。。😅😅😅
    liamzzh
        38
    liamzzh  
       31 天前
    笑死了,刚去围观了一下
    lysShub
        39
    lysShub  
       31 天前
    @eryajf 编译后增加了 2G ?
    Yadomin
        40
    Yadomin  
       31 天前 via Android
    Python 版本装完 238M 。。。
    LieEar
        41
    LieEar  
       30 天前
    原来是你发的,哈哈哈哈。这个 issue 彻底火了
    FightPig
        42
    FightPig  
       30 天前
    @scienhub 看了一圈,发现腾讯云的 sdk 全写的不怎么样,我看了下 go 的也有人吐槽他们写的。ruby 那语法,但凡写过几天 ruby 的人都写不出来 ,不知道他们怎么写的,而且三年前提的,看了下到现在也没改,他们可能觉得那么写比较帅?感觉腾讯里的技术人才也应该不少啊,怎么能写出这么多有问题的 sdk 来,难道是外包的?
    yagamil
        43
    yagamil  
       30 天前
    腾讯工程师和百度工程师 不少额外干着副业(虽然我很支持,提前给自己铺路)

    像鱼皮这种,写公众号写面经教程如何进鹅厂,最后被 hr 劝退的
    parthenon2007
        44
    parthenon2007  
       30 天前   ❤️ 1
    今天看了 Github 上的 Issue 之后,又回 V2 看了一下,果然是你,哈哈
    royzxq
        45
    royzxq  
       30 天前
    原来是你
    weijancc
        46
    weijancc  
       30 天前
    打包后的文件没有可读性, 所以很多 node 库也会把 src 打包进去, changelog 通常也是打包进去的, 只是这个 sdk 的文件体积实在太夸张了, 正常不会搞这么大.
    ddup
        47
    ddup  
       30 天前
    你这嘴也是有才,打工人不骂打工人,除非憋不住 哈哈哈
    capgrey
        48
    capgrey  
       30 天前
    哥们,你可能睡一觉醒来,发现爆火了😆
    b1t
        49
    b1t  
       30 天前
    算是过年最乐闹的一件事了
    tangAtang
        50
    tangAtang  
       30 天前   ❤️ 1
    他们甚至要追究法律责任,
    https://github.com/TencentCloud/tencentcloud-sdk-nodejs/issues/210
    > 腾讯云重视并欢迎反馈问题,同时坚决反对涉及人身攻击的恶意言论,相关帖子内容均已存证,我们保留随时追究法律责任的权利,希望大家共同维护良好的社区氛围。
    tencentcloud
        51
    tencentcloud  
       30 天前
    您好,抱歉 NodeJS SDK 的体积问题给大家造成疑惑,我们跟业界一样,SDK 提供了全产品总包和产品按需分包两种使用方式。原贴在 aws 使用的是按需分包方式,而在腾讯云使用了总包的方式,故体积显得较大。腾讯云也提供了类似的分包使用方案,可以支持较少体积的方式使用 SDK ,比如只安装 CVM 的包:https://www.npmjs.com/package/tencentcloud-sdk-nodejs-cvm ,按需分包的使用方式,比较适合体积敏感的场景。针对全产品总包的方式使用 SDK 比较大的问题,目前已紧急修复,包括移除 NPM 包中的测试用例、变更日志、使用示例等。
    腾讯云正视和欢迎问题反馈,同时坚决反对这种涉及人身攻击的粗俗不堪的恶意言论,希望大家一起共创良好的社区氛围。
    OnlineParty
        52
    OnlineParty  
       30 天前 via Android
    @tencentcloud 你们公关太幽默了,什么叫做

    “同时坚决反对涉及人身攻击的恶意言论,相关帖子内容均已存证,我们保留随时追究法律责任的权利”

    你的意思是
    OnlineParty
        53
    OnlineParty  
       30 天前 via Android
    @tencentcloud 你的意思是骂你们产品烂还不给骂了?骂两句就是存证追究法律责任,好大的官威啊
    OnlineParty
        54
    OnlineParty  
       30 天前 via Android
    @tencentcloud 骂马化腾怎么了,身为公众人物要有自觉,你公司下面的产品做不好,我不知道这产品谁做的,我就知道马化腾是老板
    allpass2023
        55
    allpass2023  
       30 天前
    @OnlineParty

    你可以骂马化腾, 马化腾不可以告你?
    Melting
        56
    Melting  
       30 天前
    😄,貌似用户的声音太尖锐了
    mrzhu
        57
    mrzhu  
       30 天前
    @tencentcloud #51 声音太尖锐了
    xuhuanzy
        58
    xuhuanzy  
       30 天前 via Android
    闹大了导致这几条东西急了吧
    YGHMXFAL
        59
    YGHMXFAL  
       29 天前 via Android
    为什么 issue 标题变***了?楼主自己改了还是 GITHUB 有这功能?
    scienhub
        60
    scienhub  
    OP
       29 天前 via iPhone
    @YGHMXFAL 我没改。也没管了。
    zhangzhi0000
        61
    zhangzhi0000  
       29 天前
    @scienhub 仓库主修改不会留下记录吗
    ae86
        62
    ae86  
       29 天前
    @zhangzhi0000 有记录的,你仔细找下
    klarkzh
        63
    klarkzh  
       29 天前   ❤️ 1
    虽然 op 的心情可以理解,但有点过激了,后面一堆人跟着发了好多毫无意义的 issue ,最后大家都是打工人互相伤害
    giter
        64
    giter  
       29 天前 via iPhone
    @klarkzh 菜,就得接受批评,而不是拿着高薪高高兴兴当菜鸡。
    amlee
        65
    amlee  
       28 天前
    @klarkzh 腾讯拉的屎你吃的还怪香咧,微信那逼样,张小龙的马换着花样死,人家就在你手机拉屎不改,占着垄断地位不改进,用户骂两声就算过激?
    kneo
        66
    kneo  
       28 天前
    我觉得 160 这 issue 有点过分了。

    https://github.com/TencentCloud/tencentcloud-sdk-nodejs/issues/160

    > 把 src 和 tencentcloud 都打包进去,两个 changelog 加起来快 10m 了也打包进去,
    > 还他妈把 test 打包进去, examples 也打包进去.
    > 你们写代码到底用了脑子没有啊??
    > 你们招聘要求这么高,搞这么多人天天加班,最后搞出这么个 b 玩意儿吗?
    > 真蠢真菜,活该天天加班啊菜 b 们。

    不确定和 OP 是不是同一个人,如果同一个人在 github 上狂飙脏话,到了 v2 却有理有节,只能说,封号的存在对提高人的素质还是有帮助的。
    n18255447846
        67
    n18255447846  
       26 天前
    p 大点事,缺这点流量和磁盘吗,你当 to c 还给混淆 shaking 呢。源码 debug 才爽,想怎么调就怎么调。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1089 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:56 · PVG 06:56 · LAX 14:56 · JFK 17:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.