javascript - Warum einen Paketmanager? Oder was macht es?
滿天的星座
滿天的星座 2017-05-19 10:16:42
0
2
444

Ich habe viele Informationen gesucht, aber es gibt keine klare Erklärung dafür. Kann mir das jemand erklären?

滿天的星座
滿天的星座

Antworte allen(2)
曾经蜡笔没有小新

至少有两点好处:

  1. 复用别人已经写好的代码

  2. 管理包之前的依赖关系

第一点很明显了:你不会为每个项目都写一个 jQuery、React 这样的东西,而是直接使用别人已经写好的。传统做法是:去官方网站下载对应的 js 文件,然后放到自己项目的对应路径下,比如 /assets/js/ 。而现在有了 npm 和 yarn 这样的东西,99.9999 % 的开放获取的包都在一个集中存放的地方,方便了查找和下载。就好比原来你要到各处去下载软件,现在有了 360 软件管家,只需要在这里搜索和下载就好了。少了很多时间。

第二点其实是第一点的发展版。因为大家写的包都放在这里了。如果我要写一个新的包,里面的一个小程序正好是别人已经写好的,所以我就拿来用了。这样就是我的包对别人的包有了依赖关系。一个大型的库(包)这个依赖关系可能很复杂,比如:依赖于几十个别的包,同时,每个包都要求对应一个确定的版本(因为版本相差太大,可能会有API不兼容的情况)。这样,如果人工去下载每一个依赖的包,将是一个指数级的任务:

A 包依赖于 B 和 C,同时 C 依赖于 D 和 E,B 又依赖于 F、G、H,D 又依赖于 I、J、K……

如此,基本是人类无法完成的任务。

当然,在没有包管理器之前,也没有人写包会依赖于这么多其它人的包,结果当然就是重复劳动:每个包都把一些常用的功能自己实现一遍。

以上是我暂时能想到的用处,如果想到别的,再来补充。

小葫芦

00

你写了一个函数 并用来干活

function add(x, y){
    return x + y; 
}

01

在那个活儿干完之后,你开始干新的活儿了。 现在你又需要这个函数了,而且你需要做改进:

function add(x, y, z){
    return x + y + z; 
}

很简单 直接复制粘贴过来 然后加上 z 即可

02

你在 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

99

你做了无数改进。 有一天你又需要 00 中的简单加法函数的时候:
———— 你在你做过的 99 件活里慢慢的翻你曾经的代码。。。。然后拷贝过来

这是一件很麻烦的事情。。。

包管理器把这些活儿都自动化了。 你可以打包你的代码,然后简单的 require 引用 而且用npm命令一键安装(还可以指定版本)

重复麻烦的事情都会由编程解决

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage