如何使用Firebase云函数从兄弟文件导入ES 6模块(第二代,Node运行时)

ha5z0ras  于 2023-11-21  发布在  其他
关注(0)|答案(2)|浏览(117)

有了Firebase Cloud Functions 2nd Generation,我应该能够使用ES 6风格的导入,如

//index.js

import { initializeApp } from "firebase-admin/app";
import { getFirestore } from "firebase-admin/firestore";
...

字符串
事实上,上述导入确实可以正常工作。
但是,当我尝试从本地.js文件导入函数时,我在部署时得到一个错误。

项目结构

functions/
  index.js
  myfuncs.js

package.json

(Note file:前缀,如此处所述)

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "type": "module",
  "scripts": {
    "lint": "eslint",
    "serve": "firebase emulators:start --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "18"
  },
  "main": "index.js",
  "dependencies": {
    "firebase-admin": "^11.8.0",
    "firebase-functions": "^4.3.1",
    "myfuncs": "file:./"
  },
 ...
}
//index.js

import { initializeApp } from "firebase-admin/app";
import { getFirestore } from "firebase-admin/firestore";
import { myFunc } from "./myfuncs"

的字符串

Firebase CLI

$ firebase deploy --only functions


错误:无法成功分析函数代码库。它可能有语法或运行时错误
如果我将myfunc复制并粘贴到index.js中,部署将正常运行。换句话说,我不认为我的函数存在语法错误。
我是不是在尝试一些不可能的事情?

ne5o7dgx

ne5o7dgx1#

遇到了同样的问题。请尝试在导入模块之前调用initializeApp()**,并尝试使用require(...)而不是import
例如,在您的案例中:

// myfunc.js
const my_function = () => {/*...*/};

// ...

module.exports = {
    my_function
}

个字符
这对我很有用,希望这对我有帮助!

o8x7eapl

o8x7eapl2#

  • 最后 * 得到了这个工作。我错过的事情是,我需要创建一个节点 * 包 *。

1.重新构建我的项目

functions/
  index.js
  myfuncs.js
  package.json

字符串

functions/
  index.js
  myfuncs/
    myfuncs.js


1.使用npm init初始化包
(This创建文件myfuncs/package.json

  1. Deal with this
    1.安装软件包npm install -S ./myfuncs
    (This应该将"myfuncs": "file:myfuncs"添加到firebase package.json
    1.进口
//index.js
import { initializeApp } from "firebase-admin/app";
import { getFirestore } from "firebase-admin/firestore";
import { myFunc } from "myfuncs"


^请注意,这不再是从"./myfuncs"的相对导入

相关问题