suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Warum einen Paketmanager? Oder was macht es?

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

滿天的星座滿天的星座2792 Tage vor463

Antworte allen(2)Ich werde antworten

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:18:42

    至少有两点好处:

    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……

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

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

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

    Antwort
    0
  • 高洛峰

    高洛峰2017-05-19 10:18:42

    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命令一键安装(还可以指定版本)

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

    Antwort
    0
  • StornierenAntwort