📌 NPM,全称是 Node Package Manager,NodeJS 包管理工具
当我们开始现代化前端项目开发时,总是会被告知需要提前安装NodeJS,而且NodeJS软件包不仅仅会在我们的开发设备上安装NodeJS运行环境,同时会附带NPM工具。
对于前端开发者而言,NPM是一个极其重要的工具,至于什么是NPM,NPM能够做什么,NPM为什么极其重要等等问题,本文会通过通俗易懂的语言来完成解释。
什么是 Node Package
当我们开始软件项目开发时,总会需要一些通用的与业务无关的工具方法,比如时间处理工具、接口请求工具等等,这些工具方法是完全可以提供给所有开发者使用的。
于是,有人将这些工具函数、或者资源等文件,按照符合开发语言的规范组装成一个完成的资源包,其他开发者通过某些途径拿到资源包,并且根本不需要关心资源包里面的工具函数是怎么实现的,只需要通过对应语言的资源引入指令引入资源包,并且调用其工具函数即可。
在JavaScript相关项目的开发中,package是由package.json文件和一堆其他的源码文件组件。其中package.json文件是必不可少的,它包含了包的名称、版本、构建、测试、依赖包等信息,以及包源代码文件位置定义。
什么是NPM
通过上面我们了解到开发者之间可以通过包的形式共享代码,但是如何完成资源包的管理呢?说到资源包的管理,我们谈一谈为什么需要管理?
首先我们思考下面几个问题
- 当我需要包含某些功能的资源包时,我应该从哪儿找?
- 当我想给其他开发者分享我写的工具函数或者资源,我应该将它放在哪儿?
- 如果资源包有不同的版本,我应该如何判断应该用哪个版本?
对于所有的开发语言其实都会面临这些问题,一个方便实用的资源分享、管理平台是每个开发语言社区生态的基石。只有分享变得容易,开发者才更加愿意分享,喜欢分享的开发者越多,社区约活跃,遇到的问题可以找到成熟的解决方案,这样喜欢使用这个语言的人就会越多,然后更多的人会去参与分享。这是一个正反馈的循环,这种现象也被称为飞轮效应。而让这个轮子转起来的第一步就是一个成熟好用的包管理工具以及平台。
现在我们回到最初的问题:什么是NPM,NPM能够做什么?
NPM是JavaScript包管理工具,它方便开发者进行代码复用、代码分析、项目依赖包管理等。为了方便开发者之间共享JavaScript资源包,NPM官方提供了一个远程公共数据库平台:https://www.npmjs.com 。
JavaScript 开发者们可以在平台中搜索想要的资源包,同时也能够非常容易上传自己封装好的资源包。如果你也想向其他开发者共享你写的代码,后续我会输出一篇如何封装资源包以及上传到npm平台的教程。
其他选择
当我们真正的开始使用NPM进行JavaScript的依赖包的管理时你会发现,npm下载依赖包的速度非常感人,尤其是在中国。由于NPM官方数据库服务器在海外,JavaScript项目的依赖包整体动辄就1G+,所以中国开发者下载项目依赖包的时间会非常久。
不同的NPM下载地址
但是除了NPM官方提供的数据库,还有其他成熟的共享数据库可以使用,比如国内淘宝提供的NPM镜像数据库cnpm mirror。
下面列出常用的公开数据库地址
registry | 源地址 |
---|---|
npm registry(默认) | https://www.npmjs.com/ |
cnpm mirror | https://registry.npmmirror.com/ |
tencent mirror | http://mirrors.cloud.tencent.com/npm/ |
huaweicloud mirror | https://mirrors.huaweicloud.com/repository/npm/ |
yarn registry | https://registry.yarnpkg.com/ |
nodejitsu registry | https://registry.nodejitsu.com/ |
不同的包管理工具
-
npm
npm
(Node Package Manager
)是Node.js默认的包管理器,它与Node.js一起发布。npm的目标是帮助JavaScript开发人员轻松地分享和重用代码,它也是开发流行JavaScript库和应用程序的基础。 -
yarn
**
Yarn
**是Facebook于2016年发布的一款JavaScript包管理器,旨在弥补npm在性能和安全性方面的一些缺点。Yarn引入了 “lockfile” 概念,保证了你每次安装的准确性,并使用并行下载来优化性能。此外,它也引入了工作区特性,便于大型项目的管理 -
pnpm
pnpm
是另外一个JavaScript包管理器,它的主要卖点是它的高效性。pnpm
使用硬盘链接而不是复制来管理项目依赖,这可以极大地节省空间和安装时间。
关于这三个常用的包管理工具,后续会输出一篇包管理工具的发展历史和细节对比的文章。
思维发散
前面我说过,一个方便实用的资源分享、管理平台是每个开发语言社区生态的基石,所以目前市面上受欢迎的开发语言都提供了成熟的包管理工具及平台。当我们去学习一门新的开发语言时,能够理解为什么有各种不同的工具去安装依赖包。
JavaScript | npm |
---|---|
Java | Maven / Gradle |
Python | pip / conda |
Go | go modules |
Rust | Cargo |
总结
有人说,互联网行业之所以蓬勃发展,少不了开发者的分享精神推动。无数的开源项目和资源包,免费的学习资源,让这个行业有源源不断的新鲜血液注入和活跃的思想碰撞。
希望开发者们都能够热爱coding,热爱分享~