理论篇:什么是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 。
NPM

JavaScript 开发者们可以在平台中搜索想要的资源包,同时也能够非常容易上传自己封装好的资源包。如果你也想向其他开发者共享你写的代码,后续我会输出一篇如何封装资源包以及上传到npm平台的教程。

其他选择

当我们真正的开始使用NPM进行JavaScript的依赖包的管理时你会发现,npm下载依赖包的速度非常感人,尤其是在中国。由于NPM官方数据库服务器在海外,JavaScript项目的依赖包整体动辄就1G+,所以中国开发者下载项目依赖包的时间会非常久。

不同的NPM下载地址

但是除了NPM官方提供的数据库,还有其他成熟的共享数据库可以使用,比如国内淘宝提供的NPM镜像数据库cnpm mirror。

下面列出常用的公开数据库地址

registry源地址
npm registry(默认)https://www.npmjs.com/
cnpm mirrorhttps://registry.npmmirror.com/
tencent mirrorhttp://mirrors.cloud.tencent.com/npm/
huaweicloud mirrorhttps://mirrors.huaweicloud.com/repository/npm/
yarn registryhttps://registry.yarnpkg.com/
nodejitsu registryhttps://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 使用硬盘链接而不是复制来管理项目依赖,这可以极大地节省空间和安装时间。

关于这三个常用的包管理工具,后续会输出一篇包管理工具的发展历史和细节对比的文章。

思维发散

前面我说过,一个方便实用的资源分享、管理平台是每个开发语言社区生态的基石,所以目前市面上受欢迎的开发语言都提供了成熟的包管理工具及平台。当我们去学习一门新的开发语言时,能够理解为什么有各种不同的工具去安装依赖包。

JavaScriptnpm
JavaMaven / Gradle
Pythonpip / conda
Gogo modules
RustCargo

总结

有人说,互联网行业之所以蓬勃发展,少不了开发者的分享精神推动。无数的开源项目和资源包,免费的学习资源,让这个行业有源源不断的新鲜血液注入和活跃的思想碰撞。

希望开发者们都能够热爱coding,热爱分享~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/291466.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java修饰符排列规范,一个不常使用但有必要注意的小细节

你好呀,我是仨仨! 今天在整理项目的时候,注意到这样一个变量: SonarLint 提示需要用 static 修饰,于是我顺手就在 final 后加了一个static,然而等 SonarLint 再次检查后,又出现了新的提示&…

Mybatis-Plus——03,CRUD改

CRUD改 一、CRUD——改update————————如觉不错,随手点赞,关注,收藏(* ̄︶ ̄),谢谢~~ 一、CRUD——改update Test//测试更新public void updateTest(){User user new User();user.setId(3L);//怎么改…

c语言错误总结

函数 A:void类型函数可以 B:不需要,如果return 不返回任何值,函数会在return语句执行后终止执行,后面的语句不会执行 C:对的 D:不可能,return只能返回一个数据 A:函数不一定有返回值 B:可以…

windows11下载GCC编译器

下载 1. 打开MinGW官网 2. 点击下载, 进入后选择下载在Window系统 3. 选择在github上面下载, 进入后下载下面两个即可, 一个是编译器, 一个是源码. 考虑跨平台性, 下载posix版本, 只在Windows下开发应用就下载win32, 不知道就下载前者. win11选择ucrt, 之前版本选择msvcrt. 配…

要使自己用C++制作的游戏可以多人在不同电脑上对战要学什么?

要使自己用C制作的游戏可以多人在不同电脑上对战要学什么? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享…

[MySQL]用基本的mysql语句写的{商店的数据}和{学生成绩}

文章目录 前言一、题目二、创建2.写入table 三.查看表单结构四.插入数据1.俩种方法2.指定插入 五.查询1.全部和指定查询2.别名查询3.去重4.排序5.条件查询(where) 六.修改七.删除八.在table中插入一列总结: 前言 提示:以下是本篇文章正文内容…

堆的时间复杂度

1、堆排序的时间复杂度为O(nlogn) 2、对N个元素建堆的时间复杂度为O(N),删除堆顶元素的时间复杂度为O(logN),因此删除堆所有元素的时间复杂度为O(NlogN)。 3、不管数组初始时是有序的还是逆序的,堆排序都会先建堆,变成了堆序的性…

消息中间件的介绍

消息中间件(message oriented middleware)是指支持与保障分布式应用程序之间同步/异步收发消息的中间件。消息是分布式应用之间进行数据交换的基本信息单位,分布式应用程序 之间的通信接口由消息中间件提供。其中,异步方式指消息发…

Vue.js 中使用 Element UI 实现异步加载分页列表

Vue.js 中使用 Element UI 实现异步加载分页列表 在前端开发中,我们常常需要展示大量数据,并提供分页浏览的功能。本篇博客将介绍如何使用 Vue.js 和 Element UI 组件库创建一个简单的异步加载分页列表。 技术栈 Vue.jsElement UIJavaScript 组件结构…

Navicat里放大、缩小字体的快捷方法

我是偶然误触键盘把字体缩小了,研究以后发现的这个快捷键,分享给大家。 方法:按住【CtrlShift】组合键,再拖动鼠标滚轮,就可以缩放字体了。 缩小效果: 放大效果:

轻量级web开发框架Flask本地部署及无公网ip远程访问界面

文章目录 前言1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何在本地安装Flask,以及如何将其web界面发布到公网上并进行远程访问。 Flask是目前十分流行的web框架,采用P…

Matlab论文插图绘制模板第131期—函数等高线图

在之前的文章中,分享了Matlab函数折线图的绘制模板: 函数三维折线图: 函数网格曲面图: 函数曲面图: 进一步,再来分享一下函数等高线图。 先来看一下成品效果: 特别提示:本期内容『数…