【问题标题】:class imported but still firebase deploy fails with Cannot find module导入的类但仍然 firebase 部署失败并出现找不到模块
【发布时间】:2020-06-04 08:48:14
【问题描述】:

我在 functions/src/index.ts 中声明了简单的谷歌云函数

import * as functions from 'firebase-functions';
import { Hero } from './hero';

var util = require('util')

export const repeat = functions.https.onCall(
    function (data, context){
        console.log(' repeat ' + util.inspect(data) + util.inspect(context));
        let aHero = new Hero('Google cloud', 50);
        return aHero;
    }
);

并且Hero被声明在另一个文件名hero.ts中,如下与index.ts在同一文件夹中,即functions/src/

export class Hero  {
    id: number;
    name: string;

    constructor( name: string, id: number) {
        this.name = name;
        this.id = id;
    }
  }

firebase 部署 失败并跟随

!  functions[repeat(us-central1)]: Deployment error.
Function failed on loading user code. Error message: Code in file lib/index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module './hero'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/srv/lib/index.js:4:16)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

Hero 是一个类而不是 module,如果我删除 hero.ts 文件并将该类放在同一个 index.ts 中,则代码可以工作。那么它需要包含在哪里呢?

【问题讨论】:

  • 您的hero.ts 文件与index.ts 文件位置相比在哪里?
  • 我已经尝试过您的代码(在 macOS 上),它确实有效。也许尝试一个全新的 Firebase 项目。

标签: typescript firebase google-cloud-functions


【解决方案1】:

解决方案是从 functions 以及 project 的目录中删除 node_modules,然后发出 firebase deploy 来自 functions 目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2020-04-01
    • 2019-12-12
    • 2023-01-10
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多