升级Yarn 2,摆脱node_modules

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了升级Yarn 2,摆脱node_modules相关的知识,希望对你有一定的参考价值。

参考技术A

node 项目中最臭名昭著的莫过于 node_modules 文件夹,这个糟糕的结构动辄使你的文件数目增加几万甚至几十万,无论是安装还是删除,都要消耗大量时间,并且占据大量 inode 结点,我们随便进入一个 react 项目文件夹,看一下由于有 node_modules 会使你的项目中的文件个数变成多少:

仅仅一个项目下面就有多达22万个文件。

现在我们来看一下目前的 yarn 版本号是多少:

嗯,目前 yarn 的版本号是 1.22.11 ,那我们如何安装 yarn 2 呢?答案是不需要安装,只需要设置就可以了。

设置完了之后,我们再来看一下 yarn 的版本号:

不是说好的升级到 yarn 2 吗?怎么变成 3.0 了?不用恐慌,越高越好。

然后我们来看一下项目文件夹下多了这么几个文件,首先就是根目录下多了一个 .yarnrc.yml ,里面只有一句话:

相应的,还多了一个文件夹 .yarn ,里面有一个子文件夹 releases ,里面有一个文件 yarn-berry.cjs ,这几个文件就是全部 yarn 2 增加的内容了,这些内容不要在 .gitignore 里忽略,其它的内容是需要忽略的,现在我们来在 .gitignore 里增加一些需要忽略的内容:

接下来,我们准备利用新版的 yarn 安装我们的依赖文件,在此之前,我们需要先设置一下 yarn 库的镜像服务器以加快整个下载过程:

这时候,你再打开项目根目录下的 .yarnrc.yml 文件,会发现里面多了一行:

所以我们知道其实这个 yarn config 命令也没有什么特别的地方,只是通过它来修改 .yarnrc.yml 文件而已,你也可以通过直接修改 .yarnrc.yml 文件来达到同样的效果。

现在,我们开始删除旧的 node_modules 文件夹和 yarn.lock 文件,并重建整个项目:

整个下载过程应该还是比较顺利的,我们来看一下项目文件夹中多了哪些文件:

没有了 node_modules 文件夹,我们来看一下 .yarn/cache 文件夹下有什么内容,里面有我们之前依赖的 node_modules 文件夹下的所有依赖包,但不再是以目录的形式存在,而是变成了一个个 zip 文件, yarn 2 就是利用项目根目录下的 .pnp.cjs 文件定位到这些 zip 文件以达到取代 node_modules 的作用,这样极大程度地减少了项目中的文件个数。

下面我们开始启动项目:

十有八九你的项目这时候是启动不起来的,不要慌,这篇文章告诉你所有的解决方法。

首先,你遇到错误可能是这样:

具体内容可能不一样,但你要注意这个关键词 Your application ,这说明是你的代码当中的某个位置引用了后面的插件,但你没有在 package.json 文件中显式声明它,那为什么之前用 yarn 1 或者 npm 的时候没有这个问题呢?因为以前是有 node_modules 文件夹的,所有依赖包都被平摊在这个文件夹中,即使是被其它依赖的依赖引入的,它也会被释放在 node_modules 根目录下,所以 node 可以很轻松地找到它,而现在这个文件夹没有了,我们必须显式地在 package.json 文件中引用它,才能引导 yarn 找到这个依赖项。因此,解决这种 Your application 缺乏某个依赖项的方法很简单,我们只需要用 yarn 安装它就可以了:

哦,又出错误了:

这是因为我们在安装的时候没有指定版本,导致安装的插件版本过高,我们在 package.json 里把版本降低一些:

然后重新执行 yarn 进行安装,运行 yarn start 再次启动,终于启动起来了!不过,不要高兴得太早,又遇到了这样的问题:

不要慌,既然还是 Your application 缺乏某个依赖包,那就还是我们的问题,停下来再安装它,然后再启动,直到解决完所有 Your application 引起的问题。

这时候,产生了新的错误:

虽然同样是找不到依赖项,但这次的错误不是由于我们自己的应用导致的,而是由于依赖项自身导致的,这种问题该如何解决呢?不要急,我们打开 .yarnrc.yml 文件,按照错误提示增加以下设置:

缺什么咱们就增加什么,有时候还要注意版本号。同样,这个问题不是由于 yarn 2 导致,而是因为我们的依赖项该增加的依赖没有增加而已,我们这里只是给它补全依赖,使它得以正常运行。

别忘了,每次修改完 .yarnrc.yml 之后,都需要重新执行 yarn ,然后再执行 yarn start 。

至此为止,我们的项目终于能够成功运行了!我们来看一下目前项目文件夹中的文件个数:

现在只有 17000 个文件了,比我们最开始的 22 万个文件减少了 20 多万,运行速度也成倍提升。

怎么样,是不是很值得一试呢?

文章来源于@ 张京老师, https://segmentfault.com/a/1190000040520326

yarn的使用及升级Node.js的新方法

yarn的使用

yarn包管理工具,官网说是快速、可靠、安全的依赖管理,尝试了一下,入手很快,用起来也蛮方便的。大家可以尝试一下。

yarn安装

mac电脑上面安装如下:

brew update

brew install yarn

yarn工作流

1、创建一个新的项目

yarn init

类似于npm init ,package.json的配置

2、添加依赖项

yarn add [package]

类似于npm install

3、安装依赖项

安装所有依赖:yarn  yarn install

安装一个包的单一版本:yarn install --flat

强制重新下载所有包:yarn install --force

只安装生产环境依赖:yarn install --production

yarn和npm的命令对照

具体可以查看:https://yarnpkg.com/zh-Hans/docs/migrating-from-npm

yarn的cli命令介绍

具体可以查看:https://yarnpkg.com/zh-Hans/docs/cli/

yarn config设置镜像

我之前写过npm国内镜像,npm安装失败解决方案,我们也可以通过yarn的config来设置淘宝镜像, 相关命令如下:

yarn config list

列出路径

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

设置淘宝镜像。

升级Node.js的新方法

当我运用

yarn add webpack

的时候,提示:

error enhanced-resolve@3.1.0: The engine "node" is incompatible with this module. Expected version ">=4.3.0 <5.0.0 || >=5.10".
error Found incompatible module

说我的nodejs版本太老了。如何在mac中轻松升级nodejs呢?方法如下:

可以使用npm安装n工具包,步骤如下:

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

  

yarn安装n工具包,步骤如下:

sudo yarn cache clean -f
sudo yarn global add n
sudo n stable

  

这样nodejs就升级到最新稳定版了!

n 是一个Node工具包,它提供了几个升级命令参数:

n                              显示已安装的Node版本
n latest                       安装最新版本Node
n stable                       安装最新稳定版Node
n lts                          安装最新长期维护版(lts)Node
n <version>                    根据提供的版本号安装Node

  

reflink: https://www.haorooms.com/post/yarn_npm

以上是关于升级Yarn 2,摆脱node_modules的主要内容,如果未能解决你的问题,请参考以下文章

yarn的使用及升级Node.js的新方法

小米Hadoop YARN平滑升级3.1实践

升级Yarn 2,大规模瘦身node_modules

yarn 安装升级命令

linux (centos)安装卸载升级node, npm, yarn

卸载升级时如何摆脱wix中未使用的dll