Running Yarn with offline mode
yarn 版本 v1.16.0 (多少版本都无所谓啦我觉得
简单介绍一下 yarn
安装包的机制、yarn
的缓存、yarn
的 offline mode
的开启方式与验证方式
1. Yarn 自身的 Cache
首先我们在 workspace
文件夹下创建一个 package.json
文件,内容如下:
{
"name": "yarn-offline",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"is-array": "^1.0.1"
}
}
然后,在 workspace
下运行指令
yarn
可以得到结果
$ yarn
yarn install v1.16.0
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 1.02s.
此时可以发现,yarn
在 workspace
下新建了文件 yarn.lock
,文件中包含以下内容
is-array@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-array/-/is-array-1.0.1.tgz#e9850cc2cc860c3bc0977e84ccf0dd464584279a"
integrity sha1-6YUMwsyGDDvAl36EzPDdRkWEJ5o=
其中 resolved
字段可以简单的理解为这个包的下载路径。如果我们将 node_module
文件夹删除,并且清除 yarn
的安装缓存文件后再执行一遍 yarn
指令,包管理系统会从 resolved
指示的网址重新下载我们需要的包。
所以当我们发布一个项目的时候我们应该将 yarn.lock
文件一并发布以保证在不同的主机上可以拥有相同版本的第三方依赖。
当我们在一台机器上执行过 yarn
的安装指令过后,yarn
会将这个包缓存在文件系统中以便我们重新安装。
可以试着抓包看看,需要做的操作:
- 删除
node_modules
文件夹 - 修改
yarn.lock
文件,将https
改为http
(方便抓包 - 在
workspace
下执行yarn
rm -rf node_modules
# 修改yarn.lock文件
yarn
可以看到,未抓到任何 http
请求。
我们可以尝试着清楚 yarn
的缓存再执行一遍操作
rm -rf node_modules && yarn cache clean && yarn
此时有请求了
2. offline mode
在弱网环境下想在一台没有缓存的机器上装包显得很困难。所幸的是 yarn
提供了离线环境 offline
专门处理弱网环境下的安装问题。
想要启用 offline mode
,我们得做以下操作。
1. 设置 .yarnrc
文件
在 workspace
目录下新建 .yarnrc
文件用于设置项目层面的 yarn
配置。
在 .yarnrc
文件内添加
yarn-offline-mirror "./npm-packages-offline-cache"
yarn-offline-mirror-pruning true
为什么不使用
yarn config
指令?
它会在用户层面的 .yarnrc
文件内新增配置,会对机器上所有使用 yarn
的项目都产生影响
2. 重置项目
删除 node_modules
目录以及 yarn.lock
文件,并重新安装项目依赖
rm -rf node_modules/ yarn.lock
yarn
此时会发现,生成了和之前相同的 yarn.lock
,生成了 node_modules
文件夹,生成了 npm-packages-offline-cache
文件夹并且其中包含 is-array-1.0.1
文件
3. 验证
验证一下自己是否已经可以在无网络环境下安装依赖
- 关闭 wifi
- 清空
yarn
缓存 -yarn cache clean
- 在
workspace
目录下执行yarn
此时,在联网环境下使用 yarn
指令安装包也不会再发送网络请求。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于