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 指令安装包也不会再发送网络请求。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于