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

腾讯云的 nodejs sdk 安装后 85M

  •  2
     
  •   scienhub ·
    batchfy · 11 天前 · 7557 次点击

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

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

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

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

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

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

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

    你可以骂马化腾, 马化腾不可以告你?
    Melting
        56
    Melting  
       9 天前
    😄,貌似用户的声音太尖锐了
    mrzhu
        57
    mrzhu  
       9 天前
    @tencentcloud #51 声音太尖锐了
    xuhuanzy
        58
    xuhuanzy  
       9 天前 via Android
    闹大了导致这几条东西急了吧
    YGHMXFAL
        59
    YGHMXFAL  
       9 天前 via Android
    为什么 issue 标题变***了?楼主自己改了还是 GITHUB 有这功能?
    scienhub
        60
    scienhub  
    OP
       9 天前 via iPhone
    @YGHMXFAL 我没改。也没管了。
    zhangzhi0000
        61
    zhangzhi0000  
       8 天前
    @scienhub 仓库主修改不会留下记录吗
    ae86
        62
    ae86  
       8 天前
    @zhangzhi0000 有记录的,你仔细找下
    klarkzh
        63
    klarkzh  
       8 天前   ❤️ 1
    虽然 op 的心情可以理解,但有点过激了,后面一堆人跟着发了好多毫无意义的 issue ,最后大家都是打工人互相伤害
    giter
        64
    giter  
       8 天前 via iPhone
    @klarkzh 菜,就得接受批评,而不是拿着高薪高高兴兴当菜鸡。
    amlee
        65
    amlee  
       7 天前
    @klarkzh 腾讯拉的屎你吃的还怪香咧,微信那逼样,张小龙的马换着花样死,人家就在你手机拉屎不改,占着垄断地位不改进,用户骂两声就算过激?
    kneo
        66
    kneo  
       7 天前
    我觉得 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  
       5 天前
    p 大点事,缺这点流量和磁盘吗,你当 to c 还给混淆 shaking 呢。源码 debug 才爽,想怎么调就怎么调。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4349 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:02 · PVG 09:02 · LAX 17:02 · JFK 20:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.