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

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

如题
看到 node_modules 占用空间太大了,感觉放在线上项目里不太合适
之前考虑过放入全局依赖里,但是不止到改怎么在 js 文件中引用
还有 webpack 打包可行吗?
求助 Nodejs 开发的网友们,js 后台项目或者脚本的 node_modules 依赖你们是怎么处理的呢?

26 回复

不处理,一般不缺这点空间。真要处理的话建议用 pkg 打包成单个文件


基本没法弄,我最近在玩 nestjs ,这个也是不能打包,或者说打包完了有问题。直接源码部署的。好像 python 也是这样的,没有打包的概念,源码部署。只能说对服务端要求高,还是上传统的 java

nodejs 当然能用 webpack 。。。。。。。

python 我可以将依赖包直接全局安装,然后文件中就可以直接引入了,我按照这个概念是这在 nodejs 这里套用,发现找不到依赖路径,所以不知道我的思路对不对,还是有什么遗漏的地方

补充一下,我的项目是一个命令行运行,用 d3 和 jsdom 生成 png 图片的工具

pnpm 小一些,但是不应该全局安装,

我用 docker 部署的,源码不用装 node_modules

这个看起来不错,能甩掉 node_modules

这是什么原理?

用 pkg 直接打包成一个命令行程序就好了

直接打包成 Docker 即可,或者使用打包器,打包成单一入口的 js ,只需要 node 或者 边缘计算节点的 js runtime 就能跑了

esbuild 打包成单文件 js

都用脚本语言了,就不要在意这个了。。。

pkg 似乎还不支持 ESM ,然而很多包现在只提供原生 ESM 支持了。

如果是个人项目,用 Bun 就很方便:
bun build --compile 可以选择将运行时和代码一起打包成单个可执行文件,就像 pkg 一样;
也可以用 bun build 将源代码打包为单个 JS 文件,部署好 Bun 就可以直接运行了。

考虑下 npx ,写完直接发 npm 上,用户安装时会自动处理依赖

参见:NodeJS 后端编译打包全攻略: https://cnodejs.org/topic/5dfa4f02ba8f6d46c4ede156

bun.js 如何使用 npm 包?

看一下文档就明白了,bun add d3 xxx 添加依赖

还是 node_modules 那一套,基本可以无缝迁移

如果依賴都是純 JS 模塊,用 esbuild 打包是最理想的了,速度快,默認的 iife 目標格式兼容性很好

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

npm install --production

然後,用 docker 打包下,上綫就沒什麽特別要部署的了

多谢! 用 bun 跑了下 斐波那契数列,非常接近 c 编译出来的速度,神奇

可以试试 ncc ,直接打包成一个 js 文件

这个年代, 一般不会缺这点空间吧.

在Node.js项目中,node_modules目录是存放所有通过npm(或yarn)安装的依赖包的。管理这些依赖有几个关键步骤和最佳实践:

  1. 使用package.jsonpackage-lock.json: 确保你的项目根目录有一个package.json文件,它列出了所有项目依赖及其版本。package-lock.json是自动生成的,用于确保所有开发者安装相同版本的依赖。

    // package.json 示例
    {
      "dependencies": {
        "express": "^4.17.1",
        "mongoose": "^5.11.15"
      }
    }
    
  2. 安装依赖: 使用npm install(或yarn install)根据package.json安装依赖。这将在本地创建node_modules目录。

    npm install
    
  3. 版本控制: 通常不将node_modules目录添加到版本控制(如git)中,因为它包含大量二进制文件和可能很大的文件。只需提交package.jsonpackage-lock.json

  4. 清理和更新: 使用npm outdated查看哪些依赖可以更新,然后用npm update或手动更改package.json中的版本号后运行npm install

  5. CI/CD集成: 在持续集成/持续部署(CI/CD)流程中,确保构建脚本包含npm install步骤,以便在每次部署时安装正确的依赖。

通过这些步骤,你可以有效地管理和维护Node.js项目的依赖,确保项目的稳定性和一致性。

回到顶部