gpt4 book ai didi

node.js - 带有 Yarn 工作区的 Firebase 函数

转载 作者:搜寻专家 更新时间:2023-10-31 22:21:01 26 4
gpt4 key购买 nike

我们开始采用使用 yarn 工作空间的 monorepo 设置,我们希望在其中包含我们的 firebase 函数。 repo 结构是这样的:

repo
node_modules <- all dependencies
packages
core
commom
functions <- firebase functions

所以,这个设置有两个问题:

  1. 函数的依赖项与函数的入口文件不在同一个文件夹中
  2. 这些函数依赖于其他包,例如 repo 中的 corecommo,因此 yarn 符号链接(symbolic link)从 node_modules 到 repo 中的包。

无论如何我可以处理这个吗?

最佳答案

使用Yarn 2 node_modules未被提取并放入相应的 functions 中目录(就像在 npm i 目录中调用 functions 的情况一样)。所以当调用firebase deploy --project default --only function node_modules文件夹丢失,firebase 将对此进行提示并中止部署过程并出现以下错误(或类似错误):

Error parsing triggers: Cannot find module [...]
Try running "npm install" in your functions directory before deploying.

目前有两个 github 问题正在跟踪这个问题:

在上述两个问题中,firebase 用户提出了几个巧妙的解决方法,例如使用 webpack 创建包含发布中所有本地包的构建,或使用 rsync 或其他工具在发布前重新连接包。

另一个解决方案是不提升您的项目包,如果可能的话。您可以这样做,将以下两个指令添加到您的 .yarnrc.yml文件。

# yarnrc.yml

# disables yarn's plugnplay style and uses node_modules instead
nodeLinker: node-modules
# makes sure the node_modules are not hoisted to the (monorepo) project root
nmHoistingLimits: "dependencies"

上面的两个指令在 yarnrc configuration docs 中有解释。如下:

nmHoistingLimits Defines the highest point where packages can be hoisted. One of workspaces (don't hoist packages past the workspace that depends on them), dependencies (packages aren't hoisted past the direct dependencies for each workspace), or none (the default, packages are hoisted as much as possible). This setting can be overriden per-workspace through the installConfig.hoistingLimits field.

nodeLinker Defines what linker should be used for installing Node packages (useful to enable the node-modules plugin), one of: pnp, node-modules.

关于node.js - 带有 Yarn 工作区的 Firebase 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55783984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com