Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为了尽量减少Firebase云函数的冷启动时间,如何导入一个类以在一个函数中使用?_Node.js_Typescript_Firebase_Google Cloud Functions - Fatal编程技术网

Node.js 为了尽量减少Firebase云函数的冷启动时间,如何导入一个类以在一个函数中使用?

Node.js 为了尽量减少Firebase云函数的冷启动时间,如何导入一个类以在一个函数中使用?,node.js,typescript,firebase,google-cloud-functions,Node.js,Typescript,Firebase,Google Cloud Functions,如果我的Firebase Cloud功能只需要一个模块,这建议将该模块导入需要它的功能中,以尽量减少项目中所有其他功能的冷启动时间 这是有道理的,但是否也可以导入一个类,该类在函数中包含自己的依赖项集 我需要在我的两个函数中使用Bcrypt。因此,我宁愿不必为所有其他不需要它的云功能加载它 在我的应用程序中,我有以下导入: import BcryptTool from './classes/bcrypt'; // <--- only needed in 2 functions 最后,在我

如果我的Firebase Cloud功能只需要一个模块,这建议将该模块导入需要它的功能中,以尽量减少项目中所有其他功能的冷启动时间

这是有道理的,但是否也可以导入一个类,该类在函数中包含自己的依赖项集

我需要在我的两个函数中使用Bcrypt。因此,我宁愿不必为所有其他不需要它的云功能加载它

在我的应用程序中,我有以下导入:

import BcryptTool from './classes/bcrypt'; // <--- only needed in 2 functions
最后,在我的Firebase云函数中
index.ts

import * as bcrypt from 'bcryptjs';
export default class BcryptTool {
 public static hashValue(value: string, rounds: number, callback: (error: Error, hash: string) => void) : void {
      bcrypt.hash(value, rounds, (error:any, hash:any) => {
            callback(error, hash);
      });
 }
 public static compare(value: string, dbHash: string, callback: (error: string | null, match: boolean | null) => void) {
    bcrypt.compare(value, dbHash, (err: Error, match: boolean) => {
        if(match) {
            callback(null, true);
        } else {
            callback('Invalid value match', null);
        }
    });
 }
}
const express = require('express');
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const cors = require('cors')({ origin: true });
admin.initializeApp();
const util = express();
const api = express();
...
import BcryptTool from './classes/bcrypt'; // <-- when i import here, calls to its methods within my functions work as expected
...
util.use(cors);
util.post('/verify', async (request: any, response: any) => {

  // according to Doug's answer below i should be able to attempt to import here as a solution using a dynamic import expression like so:

  const BcryptTool = await import('./classes/bcrypt');

  // but the following subsequent call to .compare() fails

  BcryptTool.compare(...)

  // VS Code hinting shows an error: Property 'compare' does not exist on type 'typeof import('FULL/PATH/TO/CLASS/classes/bcrypt')'

});

api.use(cors);
api.post('/endpoint/foo', async (request: any, response: any) => {
  // I do not need Bcrypt here
});
api.post('/endpoint/bar', async (request: any, response: any) => {
  // I do not need Bcrypt here
});
const express=require('express');
const functions=require('firebase-functions');
const admin=require('firebase-admin');
const cors=require('cors')({origin:true});
admin.initializeApp();
const util=express();
常量api=express();
...
从“./classes/bcrypt”导入bcryptool;//{
//根据Doug下面的回答,我应该能够尝试在这里使用动态导入表达式作为解决方案导入,如下所示:
const bcryptool=等待导入('./classes/bcrypt');
//但是下面对.compare()的后续调用失败
BcryptTool.compare(…)
//VS代码提示显示错误:类型“typeof import('FULL/PATH/TO/CLASS/classes/bcrypt')上不存在属性“compare”
});
api.使用(cors);
api.post('/endpoint/foo',异步(请求:任意,响应:任意)=>{
//我这里不需要Bcrypt
});
api.post('/endpoint/bar',异步(请求:任意,响应:任意)=>{
//我这里不需要Bcrypt
});
这不可能吗?我只是做错了吗?*

当然,您可以在TypeScript代码中的任何地方使用它。导入的符号将在您导入它的范围内可见,而不会在其他任何地方可见。模块包含什么并不重要。

(代表问题作者发布答案,将其从问题帖子中移除)


我没有正确导入该类。原因和解决方案已概述。

谢谢,尽管我尝试了这一点,当我在等待导入后尝试调用类中的方法时,vs代码会抱怨:
const bcryptool=wait import('./classes/bcrypt.class')
然后调用
bcryptool.compare()
导致VS代码抱怨导入类型('./classes/bcrypt.class')上不存在
属性“compare”
。如果我将bcryptool设置为
any
,函数将编译并部署到firebase,但是调用我的
compare
方法失败。好的,听起来你做错了什么,请问一个新问题,更好地描述你在做什么,当我将类导入到上面问题中所述的全局范围中时,代码的工作没有问题。正是当我尝试使用您描述的方法在函数中动态导入类时,才导致了问题。是的,我理解。你能提出一个新问题来清楚地说明这一点吗?将所有这些信息隐藏在难以阅读的评论中,无助于有人发现并解决问题。我在此处发布了一个新问题:我已投票将其作为副本关闭: