Yarn 安装与使用详细介绍

article/2025/9/10 8:39:42

文章目录

  • 背景
  • 什么是 Yarn
    • 速度快
    • 离线模式
    • 可靠可确定性
    • 网络优化
    • 扁平化模式
    • 版本控制
    • 其他关于 Yarn 的介绍
  • Yarn 安装
    • windows
    • mac
      • 方式一
      • 方式二
  • Yarn 换源
  • Yarn 常用命令
    • Yarn 独有的命令
  • 特性
  • 推荐阅读

背景

在 Node 生态系统中,依赖通常安装在项目的 node_modules 文件夹中。然而,这个文件的结构和实际依赖树可能有所区别,因为重复的依赖可以合并到一起。npm 客户端把依赖安装到 node_modules 目录的过程具有不确定性。这意味着当依赖的安装顺序不同时,node_modules 目录的结构可能会发生变化。这种差异可能会导致类似 “我的电脑上可以运行,别人的电脑上不行” 的情况,并且通常需要花费大量时间定为与解决。

有时候就会遇到这种情况,完整可运行的项目上传到 git 上,别人 pull 下来以后,npm install 会报错。

Yarn 一开始的主要目标是解决由于语义版本控制而导致的 npm 安装的不确定性问题。虽然可以用 npm shrinkwrap 来实现可预测的依赖关系树,但它并不是默认选项,而是取决于所有的开发人员指导并启用这个选项。

npm 5+ 以后的版本加入了 package-lock.json 可以用来锁版本,package-lock.json 的名字,一看就懂,更清楚,但是不向后兼容。

npm-shrinkwrap.json 向后兼容 npm 2-4。

举个例子:
npm 对包引入顺序也十分的敏感,比如在一个空项目里执行以下命令:

npm init -y
npm install globule@0.1.0 -S
npm install babel-generator@6.19.0 -S
npm install babel-helper-define-map@6.18.0 -S

我们这里安装了 3 个包都依赖于 lodash,不过 globule 依赖 lodash@1.0.3,另外另个依赖 lodash@4.x
现在目录依赖结构如下:
npm-package

这是假设我们在项目里使用 lodash,但是忘记重新安装 lodash

var lodash = require('lodash')
console.log(lodash.VERSION)  // v1.0.3

另一个同事获取项目代码,执行 npm install,这时的目录依赖结构里面,第一层依赖的 lodash 变成了 4.x 版本,这样就造成了依赖版本不一致的问题。而 yarn 则会保证无论怎样引入的顺序,目录依赖结构都是一致的,确保不会发生这样的 BUG

什么是 Yarn

Yarn 就是一个类似于 npm 的包管理工具,它是由 facebook 推出并开源。

与 npm 相比,yarn 有着众多的优势,主要的优势在于:速度快、离线模式、版本控制。

速度快

npm 会等一个包完全安装完才跳到下一个包,但 yarn 会并行执行包,因此速度会快很多。

Yarn 会缓存它下载的每个包,所以无需重复下载。它还能并行化操作以最大化资源利用率,安装速度之快前所未有。

离线模式

之前安装过的包会被保存进缓存目录,以后安装就直接从缓存中复制过来,这样做的本质还是会提高安装下载的速度,避免不必要的网络请求。

可靠可确定性

保证各平台依赖的一致性

网络优化

力求网络资源最大利用化,让资源下载完美队列执行,避免大量的无用请求,下载失败会自动重新请求,避免整个安装过程失败

扁平化模式

对于不匹配的依赖版本的包创立一个独立的包,避免创建重复的。
对于多个包依赖同一个子包的情况,yarn 会尽量提取为同一个包,防止出现多处副本,浪费空间。

版本控制

npm 用下来比较强的一个痛点就是:当包的依赖层次比较深时,版本控制不够精确。会出现相同 package.json,但不同人的电脑上安装出不同版本的依赖包,出现类似 “我的电脑上可以运行,别人的电脑上不行” 的 bug 很难查找。你可以使用 npm-shrinkwrap 来实现版本固化,版本信息会写入 npm-shrinkwrap.json 文件中,但它毕竟不是 npm 的标准配置。

而 yarn 天生就能实现版本固化。会生成一个类似 npm-shrinkwrap.json 的 yarn.lock 文件,而文件内会描述包自身的版本号,还会锁定所有它依赖的包的版本号:

"@babel/code-frame@7.0.0-beta.47":version "7.0.0-beta.47"resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.47.tgz#d18c2f4c4ba8d093a2bcfab5616593bfe2441a27"dependencies:"@babel/highlight" "7.0.0-beta.47"

yarn.lock 存储着你的每个包的确切依赖版本,能确保从本地开发到生产环境,所有机器上都有精确相同的依赖版本。

其他关于 Yarn 的介绍

我们在使用 Yarn 时,依然要访问 npm 仓库,但 Yarn 能够更快速地安装软件包和管理依赖关系,并且可以在跨机器或者无网络的安全环境中保持代码的一致性。

Yarn 安装

windows

在 Yarn 中文网可以找到 window 下的三种安装方法:

yarn-install

不过我觉得这三种方法都不好用,快速好用的安装方法应该还是使用 npm 来安装:

npm install -g yarn

关于为什么使用 -g,以及 -g 会带来哪来影响,这个可以看我的这篇文章:npm详细介绍,里面详细介绍了为什么要使用 -g,以及 -g 的作用。

mac

方式一

npm install -g yarn

如果有报: Please try running this command again as root/Administrator.,可能就是权限不足,因此你需要切换到最高权限去执行命令

sudo -s
npm install yarn -g

方式二

使用另一种初始化脚本的方法,可能就会比较简单一些:

curl -o- -L https://yarnpkg.com/install.sh | bash

Yarn 换源

使用 Yarn 来安装依赖时的体验比 Npm 要好很多;但是偶尔也会存在 Yarn 源仓库包下载不稳定的情况

// 查看 yarn 配置
yarn config get registry
或者
yarn config list> registry: 'https://registry.yarnpkg.com'

一、临时修改

yarn add 软件名 --registry https://registry.npm.taobao.org/

二、全局修改,安装淘宝镜像

yarn config set registry https://registry.npm.taobao.org

三、使用第三方软件快速修改、切换 yarn 镜像源
yrm (YARN registry manager) 不仅可以快速切换镜像源,还可以测试自己网络访问不同源的速度

# 安装 yrm
npm install -g yrm# 列出当前可用的所有镜像源
yrm ls// npm -----  https://registry.npmjs.org/
// cnpm ----  http://r.cnpmjs.org/
// taobao --  https://registry.npm.taobao.org/
// nj ------  https://registry.nodejitsu.com/
// rednpm -- http://registry.mirror.cqupt.edu.cn
// skimdb -- https://skimdb.npmjs.com/registry
// yarn ----  https://registry.yarnpkg.com# 使用淘宝镜像源
yrm use taobao# 测试访问速度
yrm test taobao

Yarn 常用命令

  • npm install === yarn —— install安装是默认行为

  • npm install taco --save === yarn add taco —— taco包立即被保存到 package.json 中。

  • npm uninstall taco --save === yarn remove taco

  • npm install taco --save-dev === yarn add taco --dev

  • npm update --save === yarn upgrade

  • npm install taco@latest --save === yarn add taco

  • npm install taco --global === yarn global add taco —— 一如既往,请谨慎使用 global 标记。

注意:使用 yarnyarn install 安装全部依赖时是根据 package.json 里的 dependencies 字段来决定的

  • npm init === yarn init

  • npm init --yes/-y === yarn init --yes/-y

  • npm link === yarn link

  • npm outdated === yarn outdated

  • npm publish === yarn publish

  • npm run === yarn run

  • npm cache clean === yarn cache clean

  • npm login === yarn login

  • npm test === yarn test

Yarn 独有的命令

  • yarn licenses ls —— 允许你检查依赖的许可信息
  • yarn licenses generate —— 自动创建依赖免责声明 license
  • yarn why taco —— 检查为什么会安装 taco,详细列出依赖它的其他包
  • yarn why vuepress —— 检查为什么会安装 vuepress,详细列出依赖它的其他包

特性

Yarn 除了让安装过程变得更快与更可靠,还添加了一些额外的特性,从而进一步简化依赖管理的工作流。

  • 同时兼容 npmbower 工作流,并支持两种软件仓库混合使用
  • 可以限制已安装模块的协议,并提供方法输出协议信息
  • 提供一套稳定的共有 JS API,用于记录构建工具的输出信息
  • 可读、最小化、美观的 CLI 输出信息

推荐阅读

npm详细介绍

---------------------------(正文完)------------------------------------
一个前端的学习交流群,想进来面基的,可以加群:
JS学习交流
或者手动search群号:832485817


写在最后: 约定优于配置-------软件开发的简约原则.
-------------------------------- (完)--------------------------------------

我的:
个人网站: https://neveryu.github.io/neveryu/
Github: https://github.com/Neveryu
新浪微博: https://weibo.com/Neveryu

更多学习资源请关注我的新浪微博…


http://chatgpt.dhexx.cn/article/vnQaUSDV.shtml

相关文章

yarn的安装和使用(极其详细)

一、yarn的简介: Yarn是facebook发布的一款取代npm的包管理工具。 二、yarn的特点: 速度超快。Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源 利用率,因此安装速度更快。超级安全。在…

使用npm安装yarn

很多同学用惯了npm安装项目依赖, 想要尝试使用yarn的命令, 但是第一次使用yarn的时候,发现报错, 这是什么情况呢? 因为,想要使用yarn,需要首先安装yarn。 那么问题来了,如何安装呢…

Python库之numpy库的安装教程

一、numpy简介 NumPy是一个功能强大的Python学习库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical和Python。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务: 1.机…

Numpy库的学习(一)

今天来学习一下Python库中,支持高级大量的维度数组与矩阵运算的神奇的Numpy库 Numpy同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好 是大量机器学习框架的基础库 废话不多说,直接开整 Numpy中最核心的结构就是ndarray数组…

Numpy库的下载及安装(吐血总结)

Python很火,我也下了个来耍耍一阵子。可是渐渐地,我已经不满足于它的基本库了,我把目光转到了Numpy~~~~~ 然而想法总是比现实容易,因为我之前下的是Python3.3.x,所有没有自带pip!!!&…

Python - Numpy库的使用(简单易懂)

目录 numpy多维数组——数组的创建 1、array函数创建数组对象 2、通过arange、linspace函数创建等差数组对象 3、通过logspace函数创建等比数列数组 函数 zeros ones diag eye full numpy多维数组——生成随机数 函数 seed rand randn randint 函数 binomial normal 和…

python的 numpy库学习总结和介绍(超详细)模块

目录 前言 numpy是什么? 一、创建数据容器 1.np.array(),通过传递一个列表,元祖来创建 2.np.zeros(),np.ones(),np.empty(),np.full(),传递对应的形状参数,来创建一个初始化的数组 3.np.linspace()与np.arange()的使用 4.运用np.random…

Python库-numpy详解

Python库-numpy详解 1. ndarray介绍2. ndarray的基本操作生成数组数组索引、切片修改数组形状修改数组类型数组去重删除元素 3. ndarray运算逻辑运算通用判断函数三元运算符统计运算数组运算 4. matrix 矩阵介绍5. Python中矩阵运算扩展:正态分布简介正态分布图方差…

python numpy库

文章目录 NumPy( Numeric Python)numpy的引用Ndarray引入n维数组的意义ndarray的组成ndarray对象的属性 数据类型ndarray支持多种数据类型的原因ndarray数组的创建adarray数组的变换ndarray数组运算 索引与切片随机数函数统计函数梯度函数副本与视图numpy线性代数数组与标量之间…

python-numpy库

目录 ndarray对象 arange函数 array函数 random函数 其他创建数组方法 切片和索引及修改数组维度 数组的拼接 数组的分割 数组的转置 数组的运算 numpy(Numerical Python)是科学计算基础库,提供大量科学计算相关功能,比如数据统计,…

Python中的numpy库介绍!

机器学习算法中大部分都是调用Numpy库来完成基础数值计算的。 安装方法: pip3 install numpy1. ndarray数组基础 python中用列表保存一组值,可将列表当数组使用。另外,python中有array模块,但它不支持多维数组,无论是…

NumPy库的介绍与使用(一)

目录 一、NumPy库简介二、NumPy库入门1.数据的维度2.安装NumPy3.导入NumPy库 三、NumPy的数组对象:ndarray1 为什么要引入ndarry呢?2. ndarray是一个多维数组对象2.1 定义2.2 内存中的存储形式2.3 ndarray对象的属性2.4 ndarray数组的元素类型 3. ndarra…

Numpy库的介绍及使用

Numpy库的介绍及使用 1. Numpy库入门1.1 数据的维度1.2 ndarray的优势1.3 ndarray对象的属性1.4 ndarray数组的创建和变换1.4.1 ndarray数组的创建方法1.4.2 ndarray数组维度的变换 1.5 ndarray数组的索引和切片1.6 ndarray数组的运算 2. 数据存取与函数2.1 CSV存取数据2.2 多维…

numpy库的安装方法

安装numpy库的方法 winR,输入cmd,打开cmd 在cmd中输入pip install numpy,回车 输入pip list,查看numpy是否安装成功 4.在cmd中输入python,回车,在输入import numpy, 验证numpy库是否可以被调…

Numpy库的安装

Numpy库的安装 一、numpy简介 NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务: **机器学习模型:**在编写机器学…

numpy库的一些解释

Numpy库介绍 NumPy是一个的Python库,主要用于对多维数组执行计算。 NumPy这个词来源于两个单词-- Numerical [njuːˈmerɪkl] (数值;数值法;数值的;数字的)和 Python。主要用来进行数值计算。 有以下几个特点: 1.numpy内置了并行运算功能&a…

Numpy库

Numpy库入门 一维数据:由对等关系的有序或无序数据构成,采用线性方式组织。 二维数据由多个一维数据构成,是一维数据的组合形式。(表格) 多维数据由一维或二维数据在新维度上扩展形成。 Numpy:开源的Python科学计算…

Python Numpy库的超详细介绍

Numpy库是Python中的一个科学计算库,本文主要介绍了ndarray的基本操作、 ndarray运算等各种Numpy库的超详细教程,需要的朋友可以参考下 1、Numpy概述 1.1 概念 Python本身含有列表和数组,但对于大数据来说,这些结构是有很多不足的。由于列表的元素可以…

python进阶--Numyp库(一)

一、Numpy库介绍 NumPy(Numerical Python)是Python的⼀种开源的数值计算扩展。提供多维数组对象,各种派⽣对象(如掩码数组和矩阵),这种⼯具可⽤来存储和处理⼤型矩阵,⽐Python⾃身的嵌套列表&am…

解决端口8080被占用的问题!

今天在回顾cms项目的时候发现怎么都启动不了,看见左下角报错 原来是8080端口被别的进程占用了。 解决方法:winr cmd 回车 在命令窗口中 输入netstat -ano就可以查看所有端口显示的状态信息 找到这个本地地址是0.0.0.0:8080最后面的PID,就是…