我正在将Firebase函数与React应用程序一起使用。我有一些我不想重复的简单代码,所以我想在部署的函数和我的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 };
导入(functions / index.js)
const myFunc = require('myshared');
在我的反应代码中:
import { myFunc } from 'myshared';
到目前为止,我所做的搜索没有产生任何有效的结果。有人提到要在firebase.json中输入共享模块路径,但是我找不到任何详细信息(包括在firebase文档中)来显示外观。感谢您提供帮助进行此操作的任何提示。
答案 0 :(得分:0)
我找到了解决方案。我不确定这是唯一的还是最好的解决方案,但它似乎适用于这种情况,并且很简单。正如Doug上面指出的那样,Firebase不想上传不在functions目录中的任何内容。解决方案是简单地使我的共享模块成为函数(即./functions/shared/index.js)下的子目录。然后,我可以像普通的js文件一样导入我的函数中。但是,我的共享文件夹还具有package.json,用作对react应用程序的依赖。我使用以下方法安装它:
npm install ./functions/shared
这会在我的应用程序中创建一个依赖关系,似乎可以正确解决。我创建了没有错误的生产版本。我尚未部署react应用,但我认为这不会成为问题。
答案 1 :(得分:0)
另一种解决方案是创建符号链接。在终端的/ ProjectDir下,执行:
ln -s shared functions/shared
cd functions
npm i ./shared