Ich habe viele Informationen gesucht, aber es gibt keine klare Erklärung dafür. Kann mir das jemand erklären?
至少有两点好处:
复用别人已经写好的代码
管理包之前的依赖关系
第一点很明显了:你不会为每个项目都写一个 jQuery、React 这样的东西,而是直接使用别人已经写好的。传统做法是:去官方网站下载对应的 js 文件,然后放到自己项目的对应路径下,比如 /assets/js/ 。而现在有了 npm 和 yarn 这样的东西,99.9999 % 的开放获取的包都在一个集中存放的地方,方便了查找和下载。就好比原来你要到各处去下载软件,现在有了 360 软件管家,只需要在这里搜索和下载就好了。少了很多时间。
/assets/js/
第二点其实是第一点的发展版。因为大家写的包都放在这里了。如果我要写一个新的包,里面的一个小程序正好是别人已经写好的,所以我就拿来用了。这样就是我的包对别人的包有了依赖关系。一个大型的库(包)这个依赖关系可能很复杂,比如:依赖于几十个别的包,同时,每个包都要求对应一个确定的版本(因为版本相差太大,可能会有API不兼容的情况)。这样,如果人工去下载每一个依赖的包,将是一个指数级的任务:
A 包依赖于 B 和 C,同时 C 依赖于 D 和 E,B 又依赖于 F、G、H,D 又依赖于 I、J、K……
如此,基本是人类无法完成的任务。
当然,在没有包管理器之前,也没有人写包会依赖于这么多其它人的包,结果当然就是重复劳动:每个包都把一些常用的功能自己实现一遍。
以上是我暂时能想到的用处,如果想到别的,再来补充。
你写了一个函数 并用来干活
function add(x, y){ return x + y; }
在那个活儿干完之后,你开始干新的活儿了。 现在你又需要这个函数了,而且你需要做改进:
function add(x, y, z){ return x + y + z; }
很简单 直接复制粘贴过来 然后加上 z 即可
你在 01 干的活儿 让add可以接受三个参数 是一个新版本的 库 了。然而 你又接到了新活儿, 这次你又要做出改进:
库
function add(){ var arr = Array.prototype.slice.call(arguments); return arr.reduce((acc, cur) => acc + cur, 0); } // add(1) => 1 // add(1, 2) => 3 // add(1, 2, 3) => 6
你做了无数改进。 有一天你又需要 00 中的简单加法函数的时候: ———— 你在你做过的 99 件活里慢慢的翻你曾经的代码。。。。然后拷贝过来
这是一件很麻烦的事情。。。
包管理器把这些活儿都自动化了。 你可以打包你的代码,然后简单的 require 引用 而且用npm命令一键安装(还可以指定版本)
重复麻烦的事情都会由编程解决
至少有两点好处:
复用别人已经写好的代码
管理包之前的依赖关系
第一点很明显了:你不会为每个项目都写一个 jQuery、React 这样的东西,而是直接使用别人已经写好的。传统做法是:去官方网站下载对应的 js 文件,然后放到自己项目的对应路径下,比如
/assets/js/
。而现在有了 npm 和 yarn 这样的东西,99.9999 % 的开放获取的包都在一个集中存放的地方,方便了查找和下载。就好比原来你要到各处去下载软件,现在有了 360 软件管家,只需要在这里搜索和下载就好了。少了很多时间。第二点其实是第一点的发展版。因为大家写的包都放在这里了。如果我要写一个新的包,里面的一个小程序正好是别人已经写好的,所以我就拿来用了。这样就是我的包对别人的包有了依赖关系。一个大型的库(包)这个依赖关系可能很复杂,比如:依赖于几十个别的包,同时,每个包都要求对应一个确定的版本(因为版本相差太大,可能会有API不兼容的情况)。这样,如果人工去下载每一个依赖的包,将是一个指数级的任务:
如此,基本是人类无法完成的任务。
当然,在没有包管理器之前,也没有人写包会依赖于这么多其它人的包,结果当然就是重复劳动:每个包都把一些常用的功能自己实现一遍。
以上是我暂时能想到的用处,如果想到别的,再来补充。
00
你写了一个函数 并用来干活
01
在那个活儿干完之后,你开始干新的活儿了。 现在你又需要这个函数了,而且你需要做改进:
很简单 直接复制粘贴过来 然后加上 z 即可
02
你在 01 干的活儿 让add可以接受三个参数 是一个新版本的
库
了。然而 你又接到了新活儿, 这次你又要做出改进:
99
你做了无数改进。 有一天你又需要 00 中的简单加法函数的时候:
———— 你在你做过的 99 件活里慢慢的翻你曾经的代码。。。。然后拷贝过来
这是一件很麻烦的事情。。。
包管理器把这些活儿都自动化了。 你可以打包你的代码,然后简单的 require 引用 而且用npm命令一键安装(还可以指定版本)
重复麻烦的事情都会由编程解决