V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zackzergzeng
V2EX  ›  Node.js

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

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

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

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

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

    npm install --production

    然後,用 docker 打包下,上綫就沒什麽特別要部署的了
    humbass
        23
    humbass  
       214 days ago
    @Projection 多谢! 用 bun 跑了下 斐波那契数列,非常接近 c 编译出来的速度,神奇
    asen001
        24
    asen001  
       207 days ago
    可以试试 ncc ,直接打包成一个 js 文件
    nodejsexpress
        25
    nodejsexpress  
       194 days ago
    这个年代, 一般不会缺这点空间吧.
    About   ·   Help   ·   Blog   ·   API   ·   FAQ   ·   Mission   ·   Tools   ·   768 Online   Highest 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:31 · PVG 04:31 · LAX 13:31 · JFK 16:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.