理论篇:什么是NPM以及为什么NPM如此重要

📌 NPM,全称是 Node Package Manager,NodeJS 包管理工具

当我们开始现代化前端项目开发时,总是会被告知需要提前安装NodeJS,而且NodeJS软件包不仅仅会在我们的开发设备上安装NodeJS运行环境,同时会附带NPM工具。

对于前端开发者而言,NPM是一个极其重要的工具,至于什么是NPM,NPM能够做什么,NPM为什么极其重要等等问题,本文会通过通俗易懂的语言来完成解释。

什么是 Node Package

当我们开始软件项目开发时,总会需要一些通用的与业务无关的工具方法,比如时间处理工具、接口请求工具等等,这些工具方法是完全可以提供给所有开发者使用的。

于是,有人将这些工具函数、或者资源等文件,按照符合开发语言的规范组装成一个完成的资源包,其他开发者通过某些途径拿到资源包,并且根本不需要关心资源包里面的工具函数是怎么实现的,只需要通过对应语言的资源引入指令引入资源包,并且调用其工具函数即可。

在JavaScript相关项目的开发中,package是由package.json文件和一堆其他的源码文件组件。其中package.json文件是必不可少的,它包含了包的名称、版本、构建、测试、依赖包等信息,以及包源代码文件位置定义。

什么是NPM

通过上面我们了解到开发者之间可以通过包的形式共享代码,但是如何完成资源包的管理呢?说到资源包的管理,我们谈一谈为什么需要管理?

首先我们思考下面几个问题

  1. 当我需要包含某些功能的资源包时,我应该从哪儿找?
  2. 当我想给其他开发者分享我写的工具函数或者资源,我应该将它放在哪儿?
  3. 如果资源包有不同的版本,我应该如何判断应该用哪个版本?

对于所有的开发语言其实都会面临这些问题,一个方便实用的资源分享、管理平台是每个开发语言社区生态的基石。只有分享变得容易,开发者才更加愿意分享,喜欢分享的开发者越多,社区约活跃,遇到的问题可以找到成熟的解决方案,这样喜欢使用这个语言的人就会越多,然后更多的人会去参与分享。这是一个正反馈的循环,这种现象也被称为飞轮效应。而让这个轮子转起来的第一步就是一个成熟好用的包管理工具以及平台。

现在我们回到最初的问题:什么是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

    npmNode 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,热爱分享~

相关推荐
全栈前端老曹1 天前
【包管理】read-pkg-up 快速上手教程 - 读取最近的 package.json 文件
前端·javascript·npm·node.js·json·nrm·package.json
2301_818732062 天前
安装了node,但是cmd找不到node和npm,idea项目也运行失败 已解决
前端·npm·node.js
Sapphire~2 天前
odoo-087 安装 npm (node ok npm not)
linux·运维·npm
Benny的老巢2 天前
【n8n工作流入门02】macOS安装n8n保姆级教程:Homebrew与npm两种方式详解
macos·npm·node.js·n8n·n8n工作流·homwbrew·n8n安装
2301_818732062 天前
下载nvm后,通过nvm无法下载node,有文件夹但是为空 全局cmd,查不到node和npm 已解决
前端·npm·node.js
稀饭523 天前
用changeset来管理你的npm包版本
前端·npm
就知道你是成心的3 天前
npm pack 一键构建npm离线包
npm
GuMoYu3 天前
npm link 测试本地依赖完整指南
前端·npm
爱写程序的小高4 天前
npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree
前端·npm·node.js
程序员的程4 天前
我做了一个前端股票行情 SDK:stock-sdk(浏览器和 Node 都能跑)
前端·npm·github