如何用Yarn重定向特定npm包到版本控制或跳过指定可选依赖?
解决Apollo Engine二进制包安装慢的方案
针对你在云实例上安装Apollo Engine时遇到的可选二进制包下载缓慢问题,这里提供几个对应你需求的解决方案:
1. 跳过特定二进制包的安装
Yarn本身没有直接排除单个可选依赖的命令,但有两种可行方式:
- 全局跳过所有可选依赖:如果你不需要任何可选依赖,直接运行以下命令即可:
该命令会跳过yarn install --no-optionaloptionalDependencies字段下的所有包,自然也包含那三个Apollo二进制包。 - 仅跳过指定的二进制包:如果还需要保留其他可选依赖,可以在
package.json中添加resolutions字段,把目标包指向false来忽略它们:
添加完成后运行"resolutions": { "apollo-engine-binary-darwin": false, "apollo-engine-binary-linux": false, "apollo-engine-binary-windows": false }yarn install,Yarn就会自动跳过这三个包的安装流程。
2. 重定向到本地磁盘路径
你可以先把这些二进制包下载到本地磁盘的指定位置,然后修改package.json的optionalDependencies,用file:协议指向本地文件路径:
"optionalDependencies": { "apollo-engine-binary-darwin": "file:/absolute/path/to/apollo-engine-binary-darwin-0.2018.4-86-gf35bdc892.tgz", "apollo-engine-binary-linux": "file:../local-packages/apollo-engine-binary-linux-0.2018.4-86-gf35bdc892.tgz", "apollo-engine-binary-windows": "file:./local-deps/apollo-engine-binary-windows-0.2018.4-86-gf35bdc892.tgz" }
这里既可以用绝对路径,也可以用相对路径,Yarn会直接从本地读取包文件,彻底避免远程下载的耗时问题。
3. 将二进制包纳入版本控制
完全支持把这些二进制包加入项目的版本控制:
- 先在项目根目录创建一个专门存放本地依赖的文件夹(比如
local-deps),把下载好的二进制.tgz包放入其中; - 按照上面的方法,用相对路径修改
package.json的optionalDependencies; - 把这个文件夹和修改后的
package.json一起提交到版本仓库。
这样其他团队成员拉取代码后,运行yarn install就能直接从本地路径安装,无需再从远程下载。如果二进制包体积较大,建议用Git LFS来管理这些大文件,避免仓库体积过度膨胀。
内容的提问来源于stack exchange,提问作者Mars
相关产品推荐
相关产品推荐

