我如何将项目的依赖关系树从 36 个包减少到 4 个包
结论
还,
在您之前npm install package
或者<script src="https://coolframework.com/file.js">
您是否曾经问过自己是否真的需要这个包/框架/库?
有什么方法可以用我自己的功能实现同样的事情吗?
如果该包有 300 个函数,而我需要 2 个函数,那么将它添加到我的依赖项中真的值得吗?
当我开始我的项目ProjectMan
并安装 3 个包Commander.js、Inquirer.js和Chalk 时,我并没有问自己这些问题。
但最终我的依赖关系树里多了 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`
正如你所见,这个字符串里有 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`;
这 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