关注上方“深度学习技术前沿”,选择“星标公众号”,
资源干货,第一时间送达!
【导读】3 月 16 日,全球最大的代(tong)码(xing)托(jiao)管(you)平台 GitHub 发布公告称,该公司已经签署了一份收购 npm 的协议,后者是深受开发者欢迎的 JavaScript 包管理服务平台。GitHub未来将帮助npm满足快速增长的JavaScript社区的需求。众所周知,GitHub已经成为微软的子公司,微软此举或将重新获取开源社区及Web端开发的领先地位。
npm 的全称是 Node Package Manager,是一个基于 Node.js 的包管理器,创建初衷是让 JavaScript 开发人员能够更容易地分享和重用代码。
凭着 npm 团队在过去 10 年的工作,以及成千上万的开源开发人员和维护人员的贡献,该平台现在拥有 130 万个软件包,每月下载量达 750 亿次。他们的努力使得 JavaScript 成为世界上最大的开发者生态系统。
GitHub 在博文中表示,「GitHub 很荣幸参与书写 npm 故事的下一篇章。我们将帮助 npm 继续扩展以满足快速增长的 JavaScript 社区的需求。」对于每天使用 npm 公共包管理器的数百万开发人员而言,开源包将一直可用且始终免费。
对于众多开发者而言,npm 并不陌生。即使我们常用 Python 或 C++等其它语言,但在执行某些 JS 开源项目时,也会遇到 npm。如果我们熟悉 JavaScript,那么 npm 几乎是不可或缺的软件包管理工具。可以说,npm 就类似于 Python 中的 pip。
维护与创建这一包管理器的公司,就是 npm 了。因为 npm 托管的超大代码库与软件注册表,JS 开发者可以借鉴开源软件包,而不需要从头构建应用程序。
如果我们想创建一个开源软件包,那么通常的做法是:将代码上传到 GitHub,并实时维护它。同时,将稳定版的代码也上传到 npm 上,从而方便开发者安装与管理。两者实现了不同的功能,GitHub 负责追踪代码修正与版本的迭代,而 NPM 负责管理整个安装包。
JS 是最大的开发者社区之一,而 npm 是世界上最大的软件注册表,在「下载包、安装包、上传包」这一流程中,npm 是开发生态不可或缺的一环。开发者不需要头疼软件包的各种依赖项与版本信息,都交给它就行了。
一般来说,npm 由注册表、命令行工具等几个独立的模块组成。注册表是一个巨大的数据库,保存了每个软件包的信息;命令行工具则允许开发者通过终端与 npm 进行交互。有了这几个模块,管理开源包、分享代码、管理私有软件包、管理依赖信息等等都不成问题。
npm 与 pip 其实非常像,只不过一个用于 JS,一个用于 Python。两者安装方式稍微有一点不同,npm 会把软件包安装在当前目录的 node_modules 下,pip 会把软件包安装在当前 Python 开发环境的 site-packages 中。换而言之,npm 不会对环境进行修改,似乎它更加「无污染」?
npm 这个工具确实非常好用,NPM 公司在 2015 年也获得 800 万风投资金,它与 GitHub 一样对开源包免费,而对托管的私有代码包收费。其优势在于,企业用户可以通过相同的工具管理开源包与私有包。
现在,GitHub 收购了 npm,那么它们之间会不会有一定的整合呢?毕竟去年 GitHub 还特意推出了免费软件包管理服务 GitHub Package Registry。
对于用户来说,大家最关心的当然是收购对自己的影响。对此,GitHub CEO Nat Friedman 在官方博客中表示,对于每天使用公共 npm 镜像仓库的1200 万开发者来说,npm 永远是可用的,而且免费。收购完成之后的工作重点将放在以下几个方面:
投资于镜像仓库基础设施和平台建设。JavaScript 生态系统规模庞大,且增长迅速。在收购完成后,公司将进行必要的投资以确保 npm 的快速、可靠和可扩展性。
提升核心体验。公司将致力于改善开发人员和维护人员的日常体验,支持在 npm v7 CLI 上已经开始的工作,并将保持免费和开源。
与社区进行交流。公司将积极参与 JavaScript 社区以获取开发人员的想法,借助他们的力量来帮助定义 npm 的未来。
GitHub 表示,他们将和 npm 一起努力,提升开源软件供应链的安全性。此外,GitHub 还打算将其打赏功能(GitHub Sponsors)扩展到 npm 的生态中。
对于付费使用 npm Pro、Teams、Enterprise 的私人注册表用户,GitHub 和 npm 也将继续支持。此外,GitHub 正大力投资 GitHub Package,这是一个完全集成了 GitHub 的多语言包管理器。今年晚些时候,GitHub 将允许 npm 的付费用户将他们的私有 npm 包迁移到 GitHub Package,使得 npm 专注成为一个开放、免费的 JavaScript 软件包管理工具。
对于一个市值超万亿的企业来说,被很多人讨厌是再正常不过的事情。套用一句古话:如果说世界上只有两种公司,一种被人骂一种没人知道,那微软就是会被往死里骂的那种。
在欧美,很多人心目中微软的形象和“大富翁(Monoply)”游戏里的那个白胡子老财主是等同的,一副“面露和善、内心贪婪”的奸商形象。
Reddit 上一篇《Why do people hate on Microsoft so much and give Linux a pass for it's short comings?》的帖子,超过 1300 人点赞;在 Slashdot 上,《Why Does Everyone Hate Microsoft?》下有超过 1500 回复表达对微软的痛恨。
开发者是不满微软的主力军,而这些开发者中,开源界又是主力中的主力。他们担心一向“眼中只有钱”的微软,在逐步蚕食缺乏抵抗能力的开源世界。
Twitter 用户@conrmahr 的吐槽,展示了微软将 npm 收入囊中后的会发生什么:
现在,我可以编写一个部署到 Azure 的 node 应用程序,该应用程序摘要一个 linkedin 搜索 api 以在我的 xbox 仪表板上显示职位空缺,并在 GitHub 中进行版本控制。
微软,和垄断,再次挂上了钩。
当然,世界上没有无缘无故的爱,也没有无缘无故的恨。美国司法部在微软公司内部发现的一个短语,拥抱、扩展再吞并(Embrace, extend, and extinguish,最后一个词也作 exterminate,或按 extinguish 译为扑灭),曾将这个巨头的真实企图暴露在公众面前:第一步,拥抱广泛使用的技术标准、开源平台;第二步,在其中植入自己的专利和基因;第三步,将其据为己有。
让我回过头来品,再细品:微软前脚收购 GitHub,引发了一波开源界的恐慌。这次,微软没有出面,而是让 GitHub 把 npm 收了。至此,最大的开源社区是微软的;最大的 js 包管理器,也是微软的。
微软一举成为开源代码托管平台和 JavaScript 两个领域的终极 boss!有内味了,是不是?
Node.js 是目前非常火热的 Web 服务端技术,但是它的诞生经历却很奇特。
浏览器技术日进千里,而微软错失良机
众所周知,在 Netscape 设计出 JavaScript 后的短短几个月,JavaScript 事实上已经是前端开发的唯一标准。后来,微软通过 IE 击败了 Netscape 后一统桌面,结果几年时间,浏览器毫无进步。(2001 年推出的古老的 IE 6 到今天仍然有人在使用!)
微软认为 IE6 浏览器已经非常完善,几乎没有可改进之处,然后解散了 IE6 开发团队!而 Google 却认为支持现代 Web 应用的新一代浏览器才刚刚起步,尤其是浏览器负责运行 JavaScript 的引擎性能还可提升 10 倍。
先是 Mozilla 借助已壮烈牺牲的 Netscape 遗产在 2002 年推出了 Firefox 浏览器,紧接着 Apple 于 2003 年在开源的 KHTML 浏览器的基础上推出了 WebKit 内核的 Safari 浏览器,不过仅限于 Mac 平台。Google 也看中了 WebKit 内核,于是基于 WebKit 内核推出了 Chrome 浏览器。Google 认为要运行现代 Web 应用,浏览器必须有一个性能非常强劲的 JavaScript 引擎,于是 Google 自己开发了一个高性能 JavaScript 引擎,名字叫 V8,以 BSD 许可证开源。
C++太难用,Ryan Dahl 自己造了门语言 Node.js
话说有个叫 Ryan Dahl 的歪果仁,他的工作是用 C/C++写高性能 Web 服务。对于高性能,异步 IO、事件驱动是基本原则,但是用 C/C++写就太痛苦了。于是这位仁兄开始设想用高级语言开发 Web 服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步 IO 和异步 IO,但是开发人员一旦用了同步 IO,他们就再也懒得写异步 IO 了,所以,最终,Ryan 瞄向了 JavaScript。
因为 JavaScript 是单线程执行,根本不能进行同步 IO 操作,所以,JavaScript 的这一“缺陷”导致了它只能使用异步 IO。
于是在 2009 年,Ryan 正式推出了基于 JavaScript 语言和 V8 引擎的开源 Web 服务器项目,命名为 Node.js。虽然名字很土,但是,Node 第一次把 JavaScript 带入到后端服务器开发,加上世界上已经有无数的 JavaScript 开发人员,所以 Node 一下子就火了起来。
代码依赖管理混乱,我要写个包管理器
如果你开发了很多网站服务,依赖的代码越来越多,就会发现一件很麻烦的事情:去 jQuery 官网下载 jQuery;去 BootStrap 官网下载 BootStrap;去 Underscore 官网下载 Underscore……
于是有些程序员就受不鸟了,一个拥有三大美德(懒惰、急躁和傲慢)的程序员 Isaac Z. Schlueter 给出一个解决方案:用一个工具把这些代码集中到一起来管理吧!
开发者们写了大量的 Node.js 开源包,但是 Node.js 缺少一个包管理器,于是 Ryan Dahl 和 npm 的作者一拍即合、抱团取暖,最终 Node.js 内置了 npm。随着 Node.js 的火爆,大家开始用 npm 来共享 JS 代码了,于是许多开源作者也将自己的包发布到 npm 了。把你需要的包写到 package.json 里,然后运行 npm install ,npm 就会自动帮你安装了。
参考链接:https://www.liaoxuefeng.com/wiki
http://blog.npmjs.org/post/612764866888007680/next-phase-montage
???? 更多精彩咨讯,长按识别,即可关注