当前位置: 首页 > news >正文

包管理工具之npm也慌了?

起因

因为npm的种种问题,我很早就换成了pnpm和yarn(但是其实npm也在使用),已经很久没有关注npm的功能更新了。最近无意间进入Node18版本的安装目录,发现其除了常规的node,npm等默认安装了一个新的包corepack,这个就是今天我要分享的东西了。

注: 我因为18版本的node上发现了这个包,目前最新lts已经是20了,最新都21了。后来去追溯其历史发现其已经在14.21.3上就有了,但是14.0.0没有,没再具体去查。

在这里插入图片描述

这是一个什么东西呢?来看看官方介绍。

Corepack是一个零运行时依赖的Node.js脚本,用作Node.js项目与其开发过程中所需的软件包管理器之间的桥梁。从实际角度来看,Corepack允许您在不安装Yarn、npm和pnpm的情况下使用它们。

在构建软件包时,只需像平常一样使用您的包管理器即可。在Yarn项目中运行,在pnpm项目中运行,在npm项目中运行。Corepack将捕获这些调用,并根据情况进行处理:

  1. 如果本地项目已配置您要使用的包管理器,Corepack将静默地下载并缓存最新的兼容版本。

  2. 如果本地项目配置的是不同的包管理器,Corepack将要求您使用正确的包管理器再次运行命令,从而避免破坏您的安装文件。

  3. 如果本地项目没有配置任何包管理器,Corepack将假定您知道自己在做什么,并使用作为“已知良好版本”的固定包管理器版本。

我之前发过一篇文章说了从npm到yarn,再到pnpm的历史和我个人的一些理解,不了解的可以去看看。简单来说,因为一些大牛不满npm的性能或者不满其模块组织方式,或者不满其它什么地方,造了一个有一个轮子,在继续使用npm仓库源的基础上产生了比较出名的yarn以及pnpm。虽然npm感觉到压力,不断改进自己的缺点,学习其它工具的优点,但是用户肯定还是被分流不少,然后以下是我的猜测:估计npm发现也阻止不了用户的分流了,打不过就加入,你爱用啥用啥,我直接出一个包管理工具的管理工具,另辟蹊径,我直接去管理npm,pnpm以及yarn。这个工具就是Corepack.

Corepack是一种简化Node.js项目依赖管理的工具,它提供了一种便捷的方式,使您可以在开发过程中使用不同的包管理器,如Yarn、npm和pnpm,而无需事先安装它们。通过使用Corepack,您可以在项目中直接运行类似于yarn installnpm installpnpm install等命令,而不必担心在开发环境中安装和配置这些包管理器。

总结一下:

  1. npm又造轮子了,这个轮子用来管理npm,yarn和pnpm,结合package.json配置,我们可以限定项目要使用的工具。
  2. 统一包管理器,不用手动维护包管理器,直接使用支持的包管理器命令即可。看官方介绍那段文字,我们不需要安装yarn和pnpm情况下也能用yarn和pnpm?

在这里插入图片描述

Corepack

启用

我们上边官方介绍那一段,有一句话允许您在不安装Yarn、npm和pnpm的情况下使用它们。这句话其实告诉我们很重要的事,以前我们安装完node,然后需要使用pnpm或者yarn,那么需要依次安装一遍。而从node引入Corepack后,看意思不需要再去安装了(当然不是node默认已经安装了,而是用的时会去静默下载安装到Corepack模块内部)。那么怎么用呢?

因为Corepack可能还处于Experimental阶段,所以功能默认是关闭的,需要我们明确开启才能使用,它将在二进制文件旁边设置环境中的符号链接 (并在必要时覆盖现有的符号链接)。

#开启
corepack enable
corepack enable npm #npm需要单独开启,不建议开启#关闭
corepack disable
corepack disable npm #npm需要单独关闭,不建议开启,如果开启了,关闭也无法还原初始状态,而是删除了corepack里面的链接

注意:

  1. corepack enable开启后默认会安装yarn和pnpm的最新版,如果您的node版本是14,yarn或者pnpm的最新版可能要求会比14高,这就陷入一个你启用

相关文章:

  • mTLS: openssl创建CA证书
  • python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析
  • OpenHarmony Docker移植实践
  • react useMemo 用法
  • 跨境知识分享:什么是动态IP?和静态IP有什么区别?
  • uni-app 页面跳转动画
  • 前端学习第三天-css基础
  • 了解处理器
  • leetcode-字符串相加
  • Unity - SerializeReference特性
  • 最新消息:英特尔宣布成立全新独立运营的FPGA公司——Altera
  • 2673. 使二叉树所有路径值相等的最小代价
  • (学习日记)2024.02.29:UCOSIII第二节
  • Cypher语句查询neo4j数据库教程
  • 自定义镜像上传阿里云
  • Android交互
  • C# 免费离线人脸识别 2.0 Demo
  • canvas 五子棋游戏
  • Java编程基础24——递归练习
  • PHP的Ev教程三(Periodic watcher)
  • SpriteKit 技巧之添加背景图片
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue.js 移动端适配之 vw 解决方案
  • 从setTimeout-setInterval看JS线程
  • 观察者模式实现非直接耦合
  • 后端_ThinkPHP5
  • 简析gRPC client 连接管理
  • 力扣(LeetCode)21
  • 前端面试之闭包
  • ​插件化DPI在商用WIFI中的价值
  • ​第20课 在Android Native开发中加入新的C++类
  • %check_box% in rails :coditions={:has_many , :through}
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (4)事件处理——(7)简单事件(Simple events)
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计大学生兼职系统
  • (十) 初识 Docker file
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)详解PHP处理密码的几种方式
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET的微型Web框架 Nancy
  • .NET多线程执行函数
  • .Net各种迷惑命名解释
  • .Net环境下的缓存技术介绍
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @Validated和@Valid校验参数区别
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试