blog
blog copied to clipboard
放弃使用 Yarn 2 的几点原因
Yarn 2 已经发布了一年多了,今天我尝试将划词翻译从 Yarn 1 迁移到了 Yarn 2,但折腾了几个小时之后,我决定重新用回 Yarn 1。
在这里记录一下原因,等到以后再准备用 Yarn 2 时,看看有没有改进。
Webstorm 对 PnP 的支持不够好
使用 PnP 之后,Webstorm 报了两个错误:
- eslint: 找不到 eslint 的 package 了。
- TypeScript: 所有 .ts 文件里的 module 都无法解析了。
虽然 WebStorm 的开发者说最新版已经支持的很好了,但我用的就是最新版,而且也找不到可以解决问题的办法。在查找了一段时间的解决方案无果后,我重新改为了 node_modules 的方式。
.yanr.yaml
没法像 .npmrc
那样配置环境变量
如 #28 所说,我需要配置一些包(如 electron、node-sass 等)的镜像地址。在 Yarn 1 里,我把这些环境变量配置在了 .npmrc 文件里,但在 Yarn 2 里,.yarn.yaml
不支持配置环境变量,且它也不读取 .npmrc。
最终我使用了 #28 的第二种方案,即配置代理的形式来安装这些包。比较麻烦的是,一般情况是不需要代理的,所以我平时还得把代理给注释掉,需要用的时候再开。
相关 issue: https://github.com/yarnpkg/berry/issues/2464
没有 yarn outdated
和 yarn upgrade
Yarn 2 提供了两个相关的命令 yarn up
和 yarn upgrade-interactive
,但是:
yarn up
没法做到 yarn upgrade --latest
,如果我想升级依赖,那我得敲很多条命令。网上有人说可以用 yarn up **
但我试了一下会报错。
yarn upgrade-interactive
就更离谱了,列了好几十个包出来让我挨个选择。而且,这个交互式的命令在我的终端里看起来很奇怪。相比于 yarn outdated
,它似乎列出了不在 package.json 里的一些依赖项,这看起来很杂乱。
虽然 yarn outdated
有插件,但 yarn upgrade --latest
却没有。
相关 issue:https://github.com/yarnpkg/berry/issues/749
总结
折腾到上面的最后一个问题的时候,我已经没有耐心了,于是重新用回了 Yarn 1。