繁体   English   中英

在 Firebase Functions 和 React 之间共享代码

[英]Sharing code between Firebase Functions and React

我在 React 应用程序中使用 Firebase 函数。 我有一些我不想复制的重要代码,所以我想在部署的函数和我的 React 客户端之间共享它。 我已经在我的 React 客户端中本地工作了(尽管我还没有尝试部署)——但我无法部署我的功能。

我尝试的第一件事是 npm 链接。 这在本地有效,但函数不会部署(这是有道理的,因为这不会在您的 package.json 中留下任何依赖关系)。 然后我尝试了 npm install../shared/ - 这看起来很有希望,因为它确实在 package.json 中留下了一个依赖文件:前缀 - 但 Firebase 仍然不会部署这个(下面的错误)。

我的项目目录结构如下所示:

/ProjectDir
  firebase.json
  package.json (for the react app)
  /src
    * (react source files)
  /functions
    package.json (for firebase functions)
    index.js
  /shared
    package.json (for the shared module)
    index.js

我的共享模块 package.json(省略无关的细节):

{
  "name": "myshared",
  "scripts": {
  },
  "dependencies": {
  },
  "devDependencies": {
  },
  "engines": {
    "node": "8"
  },
  "private": true,
  "version": "0.0.1"
}

我的 firebase 函数 package.json(省略无关的细节):

{
  "name": "functions",
  "scripts": {
  },
  "dependencies": {
    "myshared": "file:../shared",
  },
  "devDependencies": {
  },
  "engines": {
    "node": "8"
  },
  "private": true
}

当我尝试部署时:

firebase deploy --only functions

它告诉我它无法加载模块:

Function failed on loading user code. Error message: Code in file index.js can't be loaded.
Did you list all required modules in the package.json dependencies?

而且我认为问题不在于我如何导出/导入我的代码 - 但以防万一:导出:

exports.myFunc = () => { some code };

导入(函数/index.js)

const myFunc = require('myshared');

在我的反应代码中:

import { myFunc } from 'myshared';

到目前为止,我所做的搜索没有产生任何有效的结果。 有人确实提到在 firebase.json 中输入共享模块路径,但我找不到任何详细信息(包括在 firebase 文档中)显示它的外观。 感谢您提供任何提示来实现这一目标。

我找到了解决办法。 我不确定它是唯一还是最好的解决方案,但它似乎适用于这种情况,而且很简单。 正如 Doug 上面提到的,Firebase 不想上传任何不在 functions 目录中的东西。 解决方案是简单地使我的共享模块成为函数下的子目录(即./functions/shared/index.js)。 然后我可以像普通的 js 文件一样导入我的函数。 但是,我的共享文件夹也有一个 package.json,用作 React 应用程序的依赖项。 我安装它使用:

npm install ./functions/shared

这在我的反应应用程序中创建了一个依赖项,它似乎可以正确解析。 我创建了一个没有错误的生产版本。 我还没有部署 React 应用程序,但我认为这不是问题。

另一种解决方案是创建符号链接。 在终端的 /ProjectDir 下,执行:

ln -s shared functions/shared
cd functions
npm i ./shared

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM