V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zackzergzeng
V2EX  ›  Node.js

求助 nodejs 开发的网友们, js 后台项目或者脚本的 node_modules 依赖你们是怎么处理的呢?

  •  
  •   zackzergzeng · 2023-09-28 13:19:16 +08:00 · 2669 次点击
    这是一个创建于 406 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题
    看到 node_modules 占用空间太大了,感觉放在线上项目里不太合适
    之前考虑过放入全局依赖里,但是不止到改怎么在 js 文件中引用
    还有 webpack 打包可行吗?
    第 1 条附言  ·  2023-09-28 14:11:33 +08:00
    补充一下,我的项目是一个命令行运行,用 d3 和 jsdom 生成 png 图片的工具
    25 条回复    2023-10-24 09:22:57 +08:00
    ysc3839
        1
    ysc3839  
       2023-09-28 13:28:21 +08:00 via Android
    不处理,一般不缺这点空间。真要处理的话建议用 pkg 打包成单个文件
    bianhui
        2
    bianhui  
       2023-09-28 13:30:35 +08:00
    pnpm
    LandCruiser
        3
    LandCruiser  
       2023-09-28 13:44:43 +08:00
    基本没法弄,我最近在玩 nestjs ,这个也是不能打包,或者说打包完了有问题。直接源码部署的。好像 python 也是这样的,没有打包的概念,源码部署。只能说对服务端要求高,还是上传统的 java
    BeautifulSoap
        4
    BeautifulSoap  
       2023-09-28 13:51:25 +08:00 via Android
    nodejs 当然能用 webpack 。。。。。。。
    zackzergzeng
        5
    zackzergzeng  
    OP
       2023-09-28 14:07:40 +08:00
    @LandCruiser python 我可以将依赖包直接全局安装,然后文件中就可以直接引入了,我按照这个概念是这在 nodejs 这里套用,发现找不到依赖路径,所以不知道我的思路对不对,还是有什么遗漏的地方
    zackzergzeng
        6
    zackzergzeng  
    OP
       2023-09-28 14:10:59 +08:00
    补充一下,我的项目是一个命令行运行,用 d3 和 jsdom 生成 png 图片的工具
    estk
        7
    estk  
       2023-09-28 14:11:32 +08:00   ❤️ 1
    npm i @vercel/ncc
    lbunderway
        8
    lbunderway  
       2023-09-28 15:55:44 +08:00
    pnpm 小一些,但是不应该全局安装,
    624144061
        9
    624144061  
       2023-09-28 16:55:27 +08:00
    我用 docker 部署的,源码不用装 node_modules
    zackzergzeng
        10
    zackzergzeng  
    OP
       2023-09-28 17:37:27 +08:00
    @estk 这个看起来不错,能甩掉 node_modules
    zackzergzeng
        11
    zackzergzeng  
    OP
       2023-09-28 17:38:02 +08:00
    @624144061 这是什么原理?
    renmu123
        12
    renmu123  
       2023-09-28 18:08:54 +08:00
    用 pkg 直接打包成一个命令行程序就好了
    a632079
        13
    a632079  
       2023-09-28 18:20:14 +08:00
    直接打包成 Docker 即可,或者使用打包器,打包成单一入口的 js ,只需要 node 或者 边缘计算节点的 js runtime 就能跑了
    pengtdyd
        14
    pengtdyd  
       2023-09-28 18:48:52 +08:00
    pnpm + 1
    BugCry
        15
    BugCry  
       2023-09-29 00:47:14 +08:00 via Android
    esbuild 打包成单文件 js
    IvanLi127
        16
    IvanLi127  
       2023-09-29 02:52:04 +08:00 via Android
    都用脚本语言了,就不要在意这个了。。。
    Projection
        17
    Projection  
       2023-09-29 10:33:00 +08:00   ❤️ 1
    pkg 似乎还不支持 ESM ,然而很多包现在只提供原生 ESM 支持了。

    如果是个人项目,用 Bun 就很方便:
    `bun build --compile` 可以选择将运行时和代码一起打包成单个可执行文件,就像 pkg 一样;
    也可以用 `bun build` 将源代码打包为单个 JS 文件,部署好 Bun 就可以直接运行了。
    SchneeHertz
        18
    SchneeHertz  
       2023-09-29 14:42:44 +08:00
    考虑下 npx ,写完直接发 npm 上,用户安装时会自动处理依赖
    zhennann
        19
    zhennann  
       2023-10-01 17:06:12 +08:00
    参见:NodeJS 后端编译打包全攻略: https://cnodejs.org/topic/5dfa4f02ba8f6d46c4ede156
    humbass
        20
    humbass  
       2023-10-03 18:48:20 +08:00
    @Projection bun.js 如何使用 npm 包?
    Projection
        21
    Projection  
       2023-10-03 19:37:19 +08:00   ❤️ 1
    @humbass 看一下文档就明白了,`bun add d3 xxx` 添加依赖

    还是 node_modules 那一套,基本可以无缝迁移
    bobguo
        22
    bobguo  
       2023-10-04 09:56:24 +08:00   ❤️ 1
    如果依賴都是純 JS 模塊,用 esbuild 打包是最理想的了,速度快,默認的 iife 目標格式兼容性很好

    如果需要依賴一些帶二進制的模塊,也可以用 esbuild 打包,但是
    1. package.json 裏面要區分 dependence 和 devDependence ,綫上只安裝 dependence 即可
    2. esbuild 注意要配置這些二進制模塊到 external 裏

    npm install --production

    然後,用 docker 打包下,上綫就沒什麽特別要部署的了
    humbass
        23
    humbass  
       2023-10-04 16:08:30 +08:00
    @Projection 多谢! 用 bun 跑了下 斐波那契数列,非常接近 c 编译出来的速度,神奇
    asen001
        24
    asen001  
       2023-10-11 14:11:14 +08:00
    可以试试 ncc ,直接打包成一个 js 文件
    nodejsexpress
        25
    nodejsexpress  
       2023-10-24 09:22:57 +08:00
    这个年代, 一般不会缺这点空间吧.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:39 · PVG 05:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.