为什么编程语言都需要包管理器?

开始学编程接触的第一门语言是 php,平常写网站常用的一些函数、方法,把它们记录下来放在一个地方统一管理。后面尝试用框架,也就是把模板、路由、数据库操作等常用的东西做了更系统化的封装,直接提高了开发效率。毕业后去做了 PM,没有再继续往编程方向发展,所以对语言的认识还停留在这个层面,直到前段时间看 Laravel 文档的时候看到了 Composer,Composer 是 php 的包管理工具,通过简单的命令就可以管理各种第三方库包,一行代码就可以引入到自己的程序中使用。

常规 web 框架的构成:路由、控制器、ORM、模板,一般的框架将这些模块深度耦合在一起,升级一个小模块就必须升级整个框架,Laravel 深度使用了 Composer ,每个模块都是独立的库,可以分别维护,各司其职,达到了充分的解耦,Laravel 主程序再把各个部分黏合在一起。我尝试使用 Composer,路由用 Slim,ORM 用 Laravel 的 Eloquent,它俩非常简单灵活地就结合在一起了。

工作中我负责项目的语言是用 node js,对应的包管理工具是 npm,有稍微通用的需求,工程师都会说,先到 github 上找找有什么库可以直接用,得益于 github 这个大宝库,大多数情况都能找到合适的第三方库。

除了前文提到的 php、node js,Ruby 的官方包管理工具是 gem,Python 有 pip,有了这些包管理器,开源社区才有了规范,不同库之间才能做到更好的兼容,工程师在写代码时可以灵活地借用别人的成果,不用担心各种依赖关系,不用再重复发明轮子,大大提高编程效率,真正将精力花在核心的需求上去。当然,在使用别人成果的同时,也不要忘记回馈开源社区。