Skip to content

collabor8-withme/gemstone

Repository files navigation

什么是DepAnlz 📦

DepAnlz 📦 (或者说DepAnlz ToolKit)项目包括了许多工具,这些工具帮助我们分析某一个NodeJS项目里的依赖关系。

动机

NodeJS 的包管理逻辑非常复杂,直观感受是 npm install 后常常会安装许多不明所以的包。可能仅仅声明了一个依赖,却会带来不计其数个子包,那么,项目变大,依赖变多之后,这种依赖关系会变得非常非常复杂,常常让我们看不清:

  • 为什么会安装某个特定 package;
  • 为什么某些 package 会安装多个版本;
  • 子 package 之间形成了怎样的父子依赖关系;
  • 是否存在循环依赖;
  • 等等。

因此期望实现一个工具,用于从 package.json 出发,递归遍历所有 node_modules 中的 package.json,通过生成模块依赖关系图或者输出JSON文件等形式来分析依赖关系。

优势

轻量化、零依赖

我们分析依赖的核心模块,即@depanlz/core,它是一个不依赖于任何外部模块的自成体系。这种独立性使得我们的核心模块能够以最纯净的形式提供功能,无需受其他外部因素的影响。

此外,我们还为开发者提供了 @depanlz/cli 工具,这个工具的设计同样保持了简洁性。它仅仅依赖于我们的核心模块进行分析和操作,而没有引入任何第三方依赖。这意味着如果开发者使用我们的CLI工具,可以放心地进行项目依赖分析,无需担心不必要的复杂性或者引入额外的依赖。

松耦合、可插拔

@depanlz/core 模块中,我们不仅仅提供了基础功能,还设计了类似于生命周期钩子的函数,旨在让开发过程更加灵活且具备可拓展性。致力于实现一种插件化的开发方式,来呈现出一个真正可插拔且高度可拓展的项目。

通过提供类似生命周期的钩子函数,可以赋予开发者在关键阶段介入代码流程的能力,使得定制化开发变得更加高效和直观。

这种可插拔性意味着可以根据项目需求选择性地启用或禁用特定功能模块,而不必担心影响其他部分的正常运行。同时,这也为项目的未来发展提供了巨大的灵活性。随着新功能的添加和业务的变化,可以通过扩展或插件来快速适应变化的市场需求,而无需对核心代码进行大幅度的修改。

总之,我们希望@depanlz/core 项目不仅仅是一个功能框架,更是一个开放的平台,鼓励创新和个性化定制。

兼容性,生态环境

我们的依赖分析工具,与业界主流的三大包管理器(npmyarnpnpm)相兼容。无论开发者选择使用哪个包管理器,我们的工具都能够轻松而精准地进行依赖分析。

不论是 NPMYarn 还是 Pnpm,我们的工具都可以无缝地分析开发者的项目依赖关系。这种广泛的兼容性确保了在不同的开发环境中都能够获得一致的依赖分析结果。

我们的依赖分析工具不仅仅关注于核心功能的实现,还着重于与现有生态系统的无缝集成。这样,就能够在不同的项目中灵活地选择包管理器,而无需担心依赖分析方面的不兼容问题。我们的目标是提供一个通用、高效的依赖分析解决方案。

劣势

暂不兼容monorepo

目前,我们的依赖分析工具暂时不支持 Monorepo 仓库结构。尽管如此,我们也一直在不断努力扩展工具的功能范围,以便能够在未来支持更多种类的项目结构,包括 Monorepo

Monorepo 工具在市场上有很多种,每一种都可能有自己的独特性和用例。这种多样性反映了开发者对于灵活性和个性化需求的追求。然而,正是由于这种多样性,为工具提供普适性的依赖分析功能变得更具挑战性,因为不同的工具可能在项目结构、依赖管理和构建方式等方面有所差异。

同时,Monorepo 结构增加了依赖分析的难度。由于不同项目和包之间可能共享依赖或者存在复杂的交叉依赖关系,所以确保准确地分析出所有依赖关系变得更加复杂。这可能需要对项目结构、依赖关系图以及构建流程进行更深入的分析,以确保依赖分析结果的准确性。

运行时兼容性

暂不支持DenoBunNodeJS以外的JavaScript运行时

快速上手

在进行项目依赖分析之前,你应该已经有一个NodeJS项目了,请事先检查一下你的项目是否丢失package.json文件,是否已经安装了所需要的依赖项,是否含有正确的锁文件等。

安装CLI工具及core模块

$ npm install -D @depanlz/cli @depanlz/core
$ pnpm add -D @depanlz/cli @depanlz/core 
$ yarn add -D @depanlz/cli @depanlz/core 

使用

$ npx depanlz analyze
$ pnpm depanlz analyze 
$ yarn depanlz analyze