了解两个强大的Node包管理器:npm 和 yarn

本篇文章带大家了解一下node.js的两个强大包管理器npmyarn,希望对大家有所帮助!

了解两个强大的Node包管理器:npm 和 yarn

学习Node的第一步就是要了解node的包管理器Node,对于npm相信大家并不陌生,因为我们常用它去下载一些包资源

但因为npm的资源库(https://www.npmjs.com/)在国外,使用它下载资源的速度比较慢,于是就出现了npm这些第三方yarn以及国内的跟node包管理器仓库同步更新的淘宝镜像(cnpm)

接下来我们就将深入去学习这些内容,让我们开始吧!

Node系列专栏开始更新了,关注博主,订阅专栏,学习Node不迷路!

一、npm的使用

npm是什么

使用npm前首先要了解什么是npm,在Node系列专栏的第一篇文章【Node.js | 从前端到全栈的必经之路】中提到npmnpm的开源仓库,并且是全球最大的开源仓库

这个仓库地址是:https://www.npmjs.com/

截至2020年3月17日,Node为大约1200万开发人员提供了130万个软件包,这些开发人员每月下载这些软件包达750亿次

要想去下载使用npm仓库里面的资源可以使用npmnpm的指令开头的,如npm 下载npm i axios)或使用其它第三方的指令(第三方的axios),如yarn等

官方说法:Node包管理器npm的包管理和分发工具

包管理就体现在它是个NodeJS的仓库,存放并管理着NodeJS的各种软件包

分发工具就体现在使用NodeJS去下载npm的指令仓库里的包

在我们配置npm环境时,NodeJS是随着npm指令模块一起安装的,我们可以通过终端运行NodeJS 查看安装的版本:

在这里插入图片描述

但如果默认安装的npm -v版本太老,你也可以自己手动安装更新npm

npm i npm@latest -g

npm 代表安装最新版本,@latest代表全局安装,这些-g指令将在后面讲到

上面可以发现一个神奇的事情,我们正在通过npm安装npm,自己安装自己?

这其实很好理解,npm也是作为一个包存放于npm的指令模块这个仓库中的,并且这个包的名字就叫npm,见npm地址:https://www.npmjs.com/package/npm

在这里插入图片描述

所以我们一般称呼的npm都只是指npm的这个指令模块(这个名为npm的包)

但其实npm这个词即代指了npm,也代指了npm指令模块这个npm开源仓库本身
所以就有了我们在NodeJS中(这个npm代表NodeJS的开源仓库)下载npm(这个npm代表名为npm的这个包,这个包是npm的指令模块)的说法

npm常用指令

npm的指令非常多,这里只列举出常用的,更多信息可见npm官方文档

npm :生成npm init

在这里插入图片描述

package.json下载npm install中记录的所有资源

package.json下载指定的包到当前目录下

npm install 包名卸载当前目录下指定的包

npm uninstall 包名更新当前目录下指定的包,不加包名则更新当前目录下所有包

npm update 包名检查当前目录下指定包是否过时,不加包名则检查当前目录下所有包

npm outdated 包名获取当前目录下包的详细信息

npm info 包名查看当前目录下安装的所有包及其依赖并显示版本号npm list可简写为list

ls查看当前目录下安装的指定包的版本号npm list 包名可简写为list

几点补充:

ls可简写为install,如:i可简写为npm install axios

npm i axios 可简写为uninstall

在包名后加un符可指定包的版本,如:@下载1版本的md5,npm i md5@1表示下载最新版本的md5

npm i md5@latest指令后缀

npm:指定全局环境

-g指令默认是在当前目录下操作,加上npm是指定在全局环境下操作,如上面提到的全局安装npm最新版:-g,这样在任何目录下都能使用npm

npm i npm@latest -g可简写为--save : 指定 生产环境 下的依赖(记录在-s中)

dependencies版本之后默认是npm5,如安装在生产环境和开发环境都需要用到的axios:--save

npm i axios -s可简写为--save-dev:指定开发环境下的依赖(记录在-D中)

如安装生产环境下不需要使用的babel(仅在开发环境下使用的到):devDependencies

npm i babel -D可简写为--save-prod:与-P相同

--save可简写为--save-optional:指定可选依赖(记录在-O中)

optionalDependencies:不会记录在--no-save

关于package.json的具体作用和区别可看我的这篇文章:npm install -g/–save/–save-dev的区别

npm指令后缀也可以放到包名的前面:-g,--save,--save-dev

依赖包管理

npm i -g npm@latest 中,熟知的依赖是 :npmdependencies

除此之外,其实还有包括 :

devDependencies,peerDependenciesoptionalDependencies

在内的几种依赖,这些都是在bundledDependencies / bundleDependencies中进行记录的:

在这里插入图片描述

上面我们说npm指令后缀时提到了这几种依赖,这里详细说一下它们代表什么:

package.jsondependencies

可查看我的另一篇文章: npm install -g/–save/–save-dev的区别

devDependencies

可查看大佬的文章:一文搞懂peerDependencies

存了个图 存了个图

视频图片解析/字幕/剪辑,视频高清保存/图片源图提取

存了个图 17 查看详情 存了个图

peerDependencies

可选依赖,如果有一些依赖包即使安装失败,项目仍然能够运行或者希望npm继续运行,就可以使用optionalDependencies,另外optionalDependencies会覆盖optionalDependencies中的同名依赖包,所以不要在两个地方都写

dependencies / bundledDependencies

打包依赖,bundleDependencies是一个包含依赖包名的数组对象,在发布时会将这个对象中的包打包到最终的发布包里,数组里面的包必须先在bundledDependenciesdevDependencies声明过,否则打包会报错

package.json中需要注意的包版本问题

通过dependencies下载的所有包的版本信息都会记录在npm

在运行package.json时就会根据npm i中记录的包信息进行下载,它的下载规则如下:

包版本以package.json开头时(默认情况),会锁定大版本

   // package.json  "dependencies": {    "md5": "^2.1.0" // ^开头的  },

通过^将会安装npm i md5的最新版本(2大版本下的最新版本),并不一定是2.1.0,还可能是2.3.0

包版本以2.x.x开头时,会锁定到第二个大版本

   // package.json  "dependencies": {    "md5": "~2.1.0"  },

通过~将会安装npm i md5的最新版本(2.1版本下的最新版本),并不一定是2.1.0,还可能是2.1.1

包版本为2.1.x,会锁定到最新版本

  // package.json  "dependencies": {    "md5": "*"  },

通过*将会安装npm i的最新版本

包版本前不带前缀,会锁定到指定版本

   // package.json  "dependencies": {    "md5": "2.1.0"  },

通过md5将会安装npm i的2.1.0版本

解决npm速度慢的问题

因为md5仓库在国外,我们在国内使用npm指令下载这个国外仓库的内容速度会比较慢

这时我们就可以运行以下指令将npm的仓库源切换到国内的淘宝镜像(cnpm) 的源:

npm config set registry https://registry.npmmirror.com

使用npm查看当前源:

在这里插入图片描述

往后再使用npm config get registry时就会自动从国内的淘宝镜像仓库下载了,速度就会很快

淘宝镜像之前的源地址为http://registry.npm.taobao.org,现在更改为了http://registry.npmmirror.com,查看详情

但我们这样通过修改npm的配置进行源的切换难免会有点麻烦,我们可以全局安装一个npm来帮助我们快速的切换nrm

使用nrm快速切换npm源

全局安装nrm

npm install -g nrm

执行npm查看可切换的npm源

在这里插入图片描述

使用nrm ls 切换源,如切换到淘宝源:npm use

在这里插入图片描述

使用nrm use taobao测试相应源的响应时间:

在这里插入图片描述

可以看到淘宝源的响应速度要比nrm test 源名的默认源快很多

中国npm镜像:cnpm

npm是一个完整的npmjs.org镜像,可以用它代替官方版本

cnpm与官方版本的同步频率为10分钟一次,cnpm官网

下载cnpm

 npm install -g cnpm --registry=https://registry.npmmirror.com

cnpm就是淘宝镜像,上面我们使用淘宝镜像只是将cnpm的源更改为淘宝镜像(npm)的源(这个源其实就是指仓库的地址),之后还是通过cnpm指令进行使用

而这里是直接下载npm这个完整镜像,之后就可以使用cnpm指令而不是cnpm指令:

cnpm installcnpm i axios -g// ....

npm的指令与cnpm的指令完全相同,使用时直接使用cnpm代替npm就行

二、yarn的使用

yarn是Facebook发布的一款依赖管理工具,它比npm更快、更高效

安装:

npm install -g yarn

更新yarn:

yarn set version latestyarn set version from sources

优点

速度超快
npm 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快

超级安全
在执行代码之前,yarn 会通过算法校验每个安装包的完整性

yarn常用指令

yarn:初始化项目,生成yarn init文件,生成步骤与package.json大致相同

在这里插入图片描述

npm init:显示命令列表

yarn help:下载yarn install中记录的所有资源,可简写为package.json

yarn下载指定的包到当前目录下

yarn add 包名卸载当前目录下指定的包

yarn remove 包名更新当前目录下指定的包,包名后可加yarn upgrade 包名来指定需要更新到的版本

@指定版本号指令后缀

yarn:指定开发环境下的依赖(--dev),简写为devDependencies-D:指定核心依赖--peerpeerDependencies:指定可选依赖--optional

结语

本篇文章介绍了optionalDependenciesnpm,以及npm派生出的yarnnrm

博主一直使用的是npm + nrm切换源的组合,因为这样不仅能保证速度快,能够方便的切换源,还不用下载像cnpmcnpm这些额外的包

yarnnpm的内容都比较多,本篇文章只是讲解了最常用的内容,如果想要了解更多可移步到对应的官网进行查看

更多node相关知识,请访问:nodejs 教程!

以上就是了解两个强大的Node包管理器:npm 和 yarn的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/545972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
java怎么输入多个数据
上一篇 2025年11月9日 17:38:34
iPhone15支持分屏功能吗
下一篇 2025年11月9日 17:38:42

相关推荐

  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • JavaScript 高效判断页面所有复选框状态的技巧与实践

    本文旨在提供一套高效且专业的javascript方法,用于判断网页中所有复选框的选中状态。我们将探讨如何利用`array.some()`快速确定是否有未选中的复选框(进而判断是否全部选中),以及如何使用`array.filter()`统计选中和未选中的复选框数量。通过优化dom元素选择和数组操作,提…

    2026年5月10日
    000
  • JavaScript Electron桌面应用

    答案:使用JavaScript开发%ignore_a_1%桌面应用需结合Web技术与Node.js,通过主进程管理窗口、渲染进程展示界面,并利用IPC通信,调用系统功能如文件对话框,最后用electron-builder打包发布,注意安全与进程职责分离。 用JavaScript开发Electron桌…

    2026年5月10日
    000
  • OSMnx中interpolate_points函数详解及街道细分与图构建实践

    本文详细介绍了osmnx库中`utils_geo.interpolate_points`函数的使用方法,特别是其返回的python生成器类型。我们将学习如何处理生成器输出,并提供一个完整的教程,演示如何利用此函数将现有街道几何体细分为更小的线段,进而构建一个精细化的网络图,以支持更细粒度的空间分析。…

    2026年5月10日
    000
  • 如何安全有效地从外部网页获取HTML元素数据并应用于自身页面

    本教程旨在解决如何在不同域名下,通过javascript获取并使用另一个网页的html元素数据。文章将深入探讨同源策略的限制,并提供两种主要解决方案:使用` 在现代Web开发中,有时我们需要从外部网站获取特定的HTML内容或属性值,并将其整合到我们自己的网页中。例如,从XYZ.COM/B.html页…

    2026年5月10日
    000
  • JS如何操作HTML元素_DOM编程核心方法【教程】

    必须掌握操作HTML元素的核心DOM方法:一、通过ID获取单个元素;二、通过类名获取元素集合;三、通过标签名获取元素集合;四、通过CSS选择器获取元素;五、为元素绑定事件监听器;六、创建并插入新元素;七、替换或删除现有元素。 如果您希望使用JavaScript动态修改网页内容、响应用户交互或构建交互…

    2026年5月10日
    000
  • Golang如何提升TCP长连接处理效率_Golang TCP长连接处理性能优化实践详解

    答案:通过非阻塞I/O、单Goroutine双工模型、sync.Pool对象复用、TCP_NODELAY优化及高效心跳管理,结合系统调优,可显著提升Golang百万级TCP长连接处理效率。 在高并发网络服务场景中,TCP长连接的处理效率直接影响系统的吞吐能力和资源消耗。Golang凭借其轻量级Gor…

    2026年5月10日
    000
  • 使用SMTP.js发送邮件:客户端集成、常见问题与最佳实践指南

    本文深入探讨了使用SMTP.js库在前端发送邮件时可能遇到的问题,特别是与Elastic Email集成时的挑战。我们将分析代码中常见的异步处理错误、条件函数定义陷阱,并提供修正后的代码示例和最佳实践。重点强调了正确处理Promise链、确保函数可访问性以及客户端邮件发送的安全考量,帮助开发者构建更…

    2026年5月10日
    000
  • 如何在不暴露密钥的情况下,在客户端创建 Stripe Payment Link

    本文介绍了在纯静态网站环境下,如何利用 Stripe Payment Link 实现商品售卖,并着重讨论了在不暴露 Stripe 密钥的前提下,客户端创建 Payment Link 的可行性。分析了直接在客户端使用密钥的风险,并提出了预先生成 Payment Link 或使用后端服务动态生成 Pay…

    2026年5月10日
    000
  • Windows用Prettier一键格式化乱码HTML代码

    首先确保HTML文件保存为UTF-8编码,使用文本编辑器另存为UTF-8格式;其次在命令行执行chcp 65001切换至UTF-8代码页后再运行Prettier;接着在VS Code中设置files.encoding为utf8并启用files.autoGuessEncoding;最后可通过Node.…

    2026年5月10日
    000
  • php怎么截取网页_php抓取网页内容的几种方法

    file_get_contents适用于静态页抓取,但受限于allow_url_fopen且无法执行JS;2. cURL支持自定义请求头、Cookie等,适合处理复杂HTTP请求;3. Guzzle作为现代PHP项目推荐方案,具备良好扩展性与异步支持;4. 动态渲染内容需借助Puppeteer或Se…

    2026年5月10日
    000
  • html函数如何实现动态内容显示 html函数在网页交互中的核心应用

    JavaScript函数通过操作DOM实现动态内容更新与交互,如显示时间、实时搜索、增删元素及加载数据,使网页具备动态功能。 HTML 本身没有“函数”的概念,它是一种标记语言,用于定义网页结构。真正实现动态内容显示和交互功能的是 JavaScript。通常所说的“HTML函数”其实是 JavaSc…

    2026年5月10日
    000
  • HTMLAMP怎么做_加速移动页面实现教程

    答案:HTML AMP通过规范标签、禁用自定义JS、引入AMP JS库和缓存技术提升移动页面加载速度,需遵循AMP HTML标准并验证有效性,有助于SEO但非万能,未来将更开放并与PWA等融合。 HTML AMP 旨在加速移动页面加载速度,提升用户体验。简单来说,它通过限制某些 HTML 功能,并采…

    2026年5月10日
    000
  • 理解PHP服务器端请求与浏览器开发者工具的限制

    当PHP脚本使用file_get_contents等函数发起服务器端请求时,这些请求直接在服务器上执行,而非通过浏览器。因此,浏览器开发者工具的网络活动面板无法捕获和显示这些内部的服务器间通信,因为它仅监控浏览器自身发出的网络请求,对服务器内部处理过程无感知。 客户端请求与服务器端请求的本质区别 在…

    2026年5月10日
    100
  • JavaScript DOM操作:点击关联元素获取目标文本内容的教程

    本教程详细介绍了如何通过JavaScript处理用户点击事件,并结合DOM的 closest() 和 querySelector() 方法,从复杂的HTML结构中准确获取目标元素的文本内容。文章强调了使用 addEventListener() 进行事件绑定、避免重复ID以及高效DOM遍历的最佳实践,…

    2026年5月10日
    000
  • 前端构建优化:利用常量折叠提升应用性能

    本文深入探讨了一种在构建阶段执行部分源代码以进行优化的技术——常量折叠(Constant Folding)。通过在编译时预计算表达式并替换为最终结果,该技术显著减少了运行时开销,提升了应用性能。文章将详细解释其工作原理、优势,并探讨其在现代前端构建工具中的应用与配置,旨在帮助开发者实现更高效的代码优…

    2026年5月10日
    000
  • JavaScript数据结构实现_javascript算法基础

    JavaScript中常用数据结构包括栈、链表和字典:1. 栈利用数组的push和pop实现LIFO,适用于括号匹配;2. 链表由节点组成,插入删除高效,适合频繁修改场景;3. 字典用对象实现键值对存储,常用于频率统计;4. 二分查找在有序数组中以O(log n)效率查找目标值,需数组已排序。掌握这…

    2026年5月10日
    000
  • PHP中基于用户角色的页面访问控制实践

    本教程详细讲解如何在PHP应用程序中利用会话(Session)机制实现基于用户角色的页面访问控制。通过正确的session_start()调用、用户登录时的角色信息存储,以及在受保护页面进行严格的会话和角色类型检查,确保只有特定用户(如“manager”)才能访问指定页面,从而有效防止未经授权的访问…

    2026年5月10日
    100
  • JavaScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程

    本教程详细介绍了如何使用javascript实现井字棋(tic-tac-toe)游戏的核心交互逻辑。内容涵盖了如何遍历并为棋盘上的每个方格添加点击事件监听器,实现玩家x和o的交替落子,以及重置游戏状态的功能。通过提供的html、css和javascript代码示例,读者可以快速理解并构建一个基础的井…

    2026年5月10日
    000
  • 全栈JS代码怎么结构化_全栈JavaScript项目代码结构与规范指南

    采用分层+功能划分的目录结构,明确分离前后端代码;2. 遵循单一职责原则,路由、控制器、服务与模型各司其职;3. 统一命名规范并集成ESLint+Prettier保证代码风格一致;4. 使用环境变量管理配置,通过脚本实现自动化构建与并发启动服务。 全栈JavaScript项目涉及前端、后端、数据库交…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信