Firebase Functions emulator Error: Cannot find module '../service-account.json'
Firebase Functions emulator Error: Cannot find module '../service-account.json'
我正在尝试使用 firebase emulators:exec 执行测试函数,模拟器启动成功但无法加载函数代码,因为出现以下错误
Error: Cannot find module '../service-account.json'
我已经多次通过 npm install、npm 运行-script lint、npm 运行-script build 等,还擦除了我的 node_modules 文件夹和 运行再次安装 npm,并重新启动 vscode,但我反复收到错误。
我有一个函数文件夹,服务-account.json 位于其中:
├─ firebase.json
├─ firestore.indexes.json
├─ firestore.rules
├─ functions
│ ├─ .eslintrc.json
│ ├─ .gitignore
│ ├─ firestore-debug.log
│ ├─ lib
│ ├─ node_modules
│ ├─ package-lock.json
│ ├─ package.json
│ ├─ pubsub-debug.log
│ ├─ src
│ │ ├─ controller
│ │ │ ├─ functions
│ │ │ └─ shared.ts
│ │ ├─ index.ts
│ │ ├─ model
│ │ ├─ play-billing
│ │ ├─ service-account-firebase.json
│ │ ├─ service-account.json
│ │ └─ typings.d.ts
│ ├─ test
│ ├─ tsconfig.dev.json
│ └─ tsconfig.json
├─ gradle
应该从 shared.ts 文件访问服务-account.json:
import * as functions from "firebase-functions";
import { PlayBilling } from "../play-billing";
import * as serviceAccountPlay from "../service-account.json";
import { InstanceIdManager } from "../model/InstanceIdManager";
import { ContentManager } from "../model/ContentManager";
/*
* This file defines shared resources that are used in functions
*/
// Shared config
export const PACKAGE_NAME = functions.config().app.package_name;
...
我通过将鼠标悬停在文件上来仔细检查文件路径是否正确,它正确显示了完整路径。
我已经检查了我的依赖项,一切似乎都已到位:
├── @types/chai@4.2.15
├── @types/mocha@8.2.1
├── @types/node@14.14.31
├── @typescript-eslint/eslint-plugin@4.15.1
├── @typescript-eslint/parser@4.15.1
├── chai@4.3.0
├── copyfiles@2.4.1
├── eslint-plugin-import@2.22.1
├── eslint-plugin-promise@4.3.1
├── eslint@7.20.0
├── express@4.17.1
├── firebase-admin@9.5.0
├── firebase-functions-test@0.2.3
├── firebase-functions@3.13.1
├── googleapis@67.1.0
├── mocha@8.3.0
├── ts-node@9.1.1
└── typescript@4.1.5
我特别疑惑,因为我在另一个项目中有完全相同的结构、依赖和功能代码,在那里它工作正常!
我错过了什么?
我搜索了其他答案,但找不到任何我尚未检查过的内容。
请注意,服务-account.json 与我在另一个项目中使用的完全相同,我可以毫无问题地模拟测试功能。
更新
删除我的 lib 文件夹并重建它后,我现在在模拟器加载我的函数代码时遇到不同的错误:
It looks like you're trying to access functions.config().app but there is no value there.
我的 tsconfig.json 现在显示左大括号错误:
Cannot find type definition file for 'express-serve-static-core 2'
但我看不出有什么不对。
{
"compilerOptions": {
"lib": [
"es6",
"ESNext.AsyncIterable"
],
"module": "commonjs",
"noImplicitReturns": true,
//"noUnusedLocals": true,
"outDir": "lib",
"sourceMap": true,
//"strict": true,
"target": "es6",
"resolveJsonModule": true,
"esModuleInterop": true
},
"compileOnSave": true,
"include": [
"src",
"test",
"./typings.d.ts",
]
}
我的lib文件结构如下:
.
├── src
│ ├── controller
│ ├── index.js
│ ├── index.js.map
│ ├── model
│ ├── play-billing
│ ├── service-account-firebase.json
│ └── service-account.json
└── test
└── play-billing
如果我没看错的话,您的服务帐户文件位于 src/
目录中。但是一旦构建了函数,编译后的代码就会部署到 lib/
目录中。您的相对路径不再有效。
我最终解决了所有问题,如下所示:
首先,我删除了整个 lib
文件夹,然后 运行
npm run-script build
建立一个新的 lib 文件夹。
这修复了模拟器找到模块的错误 '...service-account.json'
我在查找 index.js
时遇到错误,我通过更正 package.json
文件中的错误来解决此问题,路径 "main"
到 index.js
我仍然无法 运行 我的模拟器功能 - 我发现解决方案是 运行 在我的项目的功能目录中执行以下命令。
firebase functions:config:get > .runtimeconfig.json
(在此处查看此答案:)
现在当我运行firebase emulators:start
时,我所有的函数都正确初始化了,而且我可以运行emulators:exec
到运行所有的在模拟器中测试功能。
我正在尝试使用 firebase emulators:exec 执行测试函数,模拟器启动成功但无法加载函数代码,因为出现以下错误
Error: Cannot find module '../service-account.json'
我已经多次通过 npm install、npm 运行-script lint、npm 运行-script build 等,还擦除了我的 node_modules 文件夹和 运行再次安装 npm,并重新启动 vscode,但我反复收到错误。
我有一个函数文件夹,服务-account.json 位于其中:
├─ firebase.json
├─ firestore.indexes.json
├─ firestore.rules
├─ functions
│ ├─ .eslintrc.json
│ ├─ .gitignore
│ ├─ firestore-debug.log
│ ├─ lib
│ ├─ node_modules
│ ├─ package-lock.json
│ ├─ package.json
│ ├─ pubsub-debug.log
│ ├─ src
│ │ ├─ controller
│ │ │ ├─ functions
│ │ │ └─ shared.ts
│ │ ├─ index.ts
│ │ ├─ model
│ │ ├─ play-billing
│ │ ├─ service-account-firebase.json
│ │ ├─ service-account.json
│ │ └─ typings.d.ts
│ ├─ test
│ ├─ tsconfig.dev.json
│ └─ tsconfig.json
├─ gradle
应该从 shared.ts 文件访问服务-account.json:
import * as functions from "firebase-functions";
import { PlayBilling } from "../play-billing";
import * as serviceAccountPlay from "../service-account.json";
import { InstanceIdManager } from "../model/InstanceIdManager";
import { ContentManager } from "../model/ContentManager";
/*
* This file defines shared resources that are used in functions
*/
// Shared config
export const PACKAGE_NAME = functions.config().app.package_name;
...
我通过将鼠标悬停在文件上来仔细检查文件路径是否正确,它正确显示了完整路径。 我已经检查了我的依赖项,一切似乎都已到位:
├── @types/chai@4.2.15
├── @types/mocha@8.2.1
├── @types/node@14.14.31
├── @typescript-eslint/eslint-plugin@4.15.1
├── @typescript-eslint/parser@4.15.1
├── chai@4.3.0
├── copyfiles@2.4.1
├── eslint-plugin-import@2.22.1
├── eslint-plugin-promise@4.3.1
├── eslint@7.20.0
├── express@4.17.1
├── firebase-admin@9.5.0
├── firebase-functions-test@0.2.3
├── firebase-functions@3.13.1
├── googleapis@67.1.0
├── mocha@8.3.0
├── ts-node@9.1.1
└── typescript@4.1.5
我特别疑惑,因为我在另一个项目中有完全相同的结构、依赖和功能代码,在那里它工作正常!
我错过了什么? 我搜索了其他答案,但找不到任何我尚未检查过的内容。
请注意,服务-account.json 与我在另一个项目中使用的完全相同,我可以毫无问题地模拟测试功能。
更新 删除我的 lib 文件夹并重建它后,我现在在模拟器加载我的函数代码时遇到不同的错误:
It looks like you're trying to access functions.config().app but there is no value there.
我的 tsconfig.json 现在显示左大括号错误:
Cannot find type definition file for 'express-serve-static-core 2'
但我看不出有什么不对。
{
"compilerOptions": {
"lib": [
"es6",
"ESNext.AsyncIterable"
],
"module": "commonjs",
"noImplicitReturns": true,
//"noUnusedLocals": true,
"outDir": "lib",
"sourceMap": true,
//"strict": true,
"target": "es6",
"resolveJsonModule": true,
"esModuleInterop": true
},
"compileOnSave": true,
"include": [
"src",
"test",
"./typings.d.ts",
]
}
我的lib文件结构如下:
.
├── src
│ ├── controller
│ ├── index.js
│ ├── index.js.map
│ ├── model
│ ├── play-billing
│ ├── service-account-firebase.json
│ └── service-account.json
└── test
└── play-billing
如果我没看错的话,您的服务帐户文件位于 src/
目录中。但是一旦构建了函数,编译后的代码就会部署到 lib/
目录中。您的相对路径不再有效。
我最终解决了所有问题,如下所示:
首先,我删除了整个 lib
文件夹,然后 运行
npm run-script build
建立一个新的 lib 文件夹。
这修复了模拟器找到模块的错误 '...service-account.json'
我在查找 index.js
时遇到错误,我通过更正 package.json
文件中的错误来解决此问题,路径 "main"
到 index.js
我仍然无法 运行 我的模拟器功能 - 我发现解决方案是 运行 在我的项目的功能目录中执行以下命令。
firebase functions:config:get > .runtimeconfig.json
(在此处查看此答案:
现在当我运行firebase emulators:start
时,我所有的函数都正确初始化了,而且我可以运行emulators:exec
到运行所有的在模拟器中测试功能。