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

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

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

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

    还是 node_modules 那一套,基本可以无缝迁移
    bobguo
        22
    bobguo  
       206 天前   ?? 1
    如果依賴都是純 JS 模塊,用 esbuild 打包是最理想的了,速度快,默認的 iife 目標格式兼容性很好

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

    npm install --production

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


    http://www.vxiaotou.com