我如何将项目的依赖关系树从 36 个包减少到 4 个包结论此外,

2025-06-07

我如何将项目的依赖关系树从 36 个包减少到 4 个包

结论

还,

在您之前npm install package或者<script src="https://coolframework.com/file.js">您是否曾经问过自己是否真的需要这个包/框架/库?

有什么方法可以用我自己的功能实现同样的事情吗?

如果该包有 300 个函数,而我需要 2 个函数,那么将它添加到我的依赖项中真的值得吗?

当我开始我的项目ProjectMan并安装 3 个包Commander.jsInquirer.jsChalk 时,我并没有问自己这些问题。

但最终我的依赖关系树里多了 36 个包!npm install -g projectman安装 37 个包也一样。如果其中一个包出问题了怎么办?我真的需要让人们安装 36 个包来运行我这个简单的命令行工具吗?包越多,安装时间就越长npm install,而且如果有人取消安装怎么办?

因此,在 v1.2.0 之后,我决定在 ProjectMan v1.3.0 中尽可能地缩小其大小,并开始逐一替换我的依赖项。

目标 1:: 粉笔

它是一个用于在控制台上为文本着色的库。

它有 6 个依赖项(包括直接和间接依赖项)

但我真的不希望彩虹流过我的用户的控制台🌈我只想要几种颜色......所以我只是检查了chalk.bold.red("HelloWorld")返回的内容,它返回了这个看起来很可怕的字符串:

`\u001b[1m\u001b[31mHelloWorld\u001b[39m\u001b[22m`
Enter fullscreen mode Exit fullscreen mode

正如你所见,这个字符串里有 HelloWorld,我尝试用其他文本替换它,它仍然有效。我对所有使用的颜色都做了同样的操作,然后colors.js在项目中创建了一个文件,现在看起来像这样

// Just some weird strings that color text inside it. You probably will not have to touch this file.

exports.green = (message) => `\u001b[32m${message}\u001b[39m`;    

exports.boldGreen = (message) => `\u001b[1m\u001b[32m${message}\u001b[39m\u001b[22m`;

exports.boldRed = (message) => `\u001b[1m\u001b[31m${message}\u001b[39m\u001b[22m`;

exports.yellow = (message) => `\u001b[33m${message}\u001b[39m`;

exports.boldYellow = (message) => `\u001b[1m\u001b[33m${message}\u001b[39m\u001b[22m`;

exports.grey = (message) => `\u001b[90m${message}\u001b[39m`;

exports.boldGrey = (message) => `\u001b[1m\u001b[90m${message}\u001b[39m\u001b[22m`;

exports.bold = (message) => `\u001b[1m${message}\u001b[22m`;
Enter fullscreen mode Exit fullscreen mode

这 17 行(包括换行符和注释)替换了 7 个包!!!

然后我的包就减少到 30 个依赖项了

以下是我在存储库中所做的更改,以实现此目的:
https://github.com/saurabhdaware/projectman/commit/413355b41d87ff18c9dcf02bebf51d3da35372b3

目标 2 :: Inquirer.js

Inquirer 提供了漂亮的界面,可以以列表、文本和许多其他选项的形式接受输入。

我个人很喜欢这个库,但唯一让我困扰的是它带来的依赖关系。Inquirer 依赖 28 个包(包括直接和间接依赖)。即使就 Inquirer 提供的功能而言,28 个包也太多了!

我无法用自己的功能来实现它,因为它的功能太多了,我不可能对所有这些功能进行编码。

因此我开始寻找替代方案并找到了提示

Prompts 几乎可以完成 Inquirer 的所有功能,并且依赖 3 个包(包括直接依赖和间接依赖)!!虽然我觉得 Prompts 的某些功能不如 Inquirer 稳定,但就我的情况而言,经过一些小的调整后,它就正常工作了。

Boom 的4 个软件包取代了 29 个软件包!ProjectMan 则减少到 5 个软件包!

Commander.js

Commander 是一个很棒的库,并且没有依赖项,所以我仍然使用它并且我非常喜欢它!

结论

我的包在 4 个依赖项上的运行与在 36 个依赖项上的运行完全相同,并且不会给我带来任何可扩展性问题或任何主要功能的错误或故障。

在安装脚本/包/框架之前,请稍等片刻,然后问自己以下三个问题

  • 我真的需要这个图书馆吗?
  • 我需要什么功能?有什么方法可以让我编写自己的函数,而无需花费大量时间,也不会影响可扩展性或其他问题?
  • 如果我不能编写自己的函数,那么是否有其他稳定的替代包,它使用较少的依赖关系并且不会破坏包中的任何内容?

还,

我并不反对任何这些库,在某些特殊情况下,您可能实际上需要这些库的很多功能,在这种情况下您应该完全使用它们。

感谢阅读!欢迎留言告诉我你的想法 :D

Twitter:@saurabhcodes
Github:@saurabhdaware
ProjectMan Repo:/saurabhdaware/projectman

文章来源:https://dev.to/saurabhdaware/how-i-brought-down-my-project-s-dependency-tree-from-36-packages-to-4-packages-1n0h
PREV
漏洞允许 Chrome、Firefox、Safari 和 Tor 进行跨浏览器跟踪
NEXT
嘿,你,聊聊你的副业吧!和朋友、父母或任何你认识的人分享。🤗 发推文 🐦 撰写文章 📖 在聚会/会议上分享你的项目 🎤 其他分享项目的方式