使用yarn作为包管理器部署到firebase功能

问题描述 投票:0回答:1

我正在努力加快我的 Firebase 函数部署速度,并注意到 Firebase 函数使用云构建再次从 package.json 服务器端下载并安装依赖项,并且缺少 package-lock.json,因此必须再次计算所有依赖项。

根据文档,如果指定了纱线锁定文件,也可以使用纱线。我们在项目中使用yarn 3,这意味着整个工作区只有一个yarn锁定文件。

一开始失败了,因为firebase功能部署默认使用yarn 1。我发现可以通过package.json引擎指定yarn版本。所以我有工作纱线 3。

我尝试了这个,发现使用yarn安装比使用没有锁定文件的npm需要更长的时间,因为yarn必须再次下载所有依赖项。所以我尝试添加缓存来执行像安装这样的yarn pnp,但由于 100 mb 云函数大小限制而出现问题。作为解决方法,我从缓存中删除了最大的依赖项,但似乎如果上传缓存,则构建包会切换到 --immutable-cache

目前我正在考虑使用 npm 在客户端安装我的依赖项,所以我至少获得了 package-lock.json 服务器端的好处。我希望我的部署能有像纱线一样的速度——因为它们是我的 CI 中目前运行时间最长的任务。有人在这里有工作设置吗?如果缓存以某种方式被使用,那么使用yarn 3的设置对我有用,但它似乎被忽略了。

node.js firebase npm google-cloud-functions yarnpkg-v2
1个回答
0
投票

我遇到了由缓存失效引起的类似问题,因为 Google Cloud Build 想从头开始使用 Yarn 安装。我的解决方案是在根项目级别实现工作区设置。我必须将以下代码添加到 package.json (父项目的,而不是函数 package.json):

{
  ...
  "workspaces": [
    "functions"
  ]
}

然后从函数目录中删除yarn.lock。这将导致云构建默认使用 NPM 编译所有内容。如果您想强制执行构建过程,您可能需要创建一个

.yarnrc.yml' file into the function directory, and re-install to reset the 
yarn.lock`(或者甚至只放置一个空的yarn.lock)。

工作区设置是为我解决问题的解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.