作者:宫廷的围脖6uw_1911 | 来源:互联网 | 2023-06-15 17:22
如果我的Firebase Cloud功能之一仅需要一个模块,则此Firebase Tutorial建议将该模块仅导入需要它的功能中,以最大程度缩短该模块中所有其他功能的冷启动时间。一个项目。
这很有道理,但是是否可以导入一个在函数内部包含自己的一组依赖关系的类呢?
我只需要在两个函数中使用Bcrypt。因此,我宁愿不必为不需要的其他所有云功能加载它。
在我的应用程序中,我具有以下导入内容:
import BcryptTool from './classes/bcrypt'; // <--- only needed in 2 functions
这是bcrypt.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);
}
});
}
}
最后,在我的Firebase Cloud中,功能index.ts
:
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',response: any) => {
// I do not need Bcrypt here
});
api.post('/endpoint/bar',response: any) => {
// I do not need Bcrypt here
});
这不可能吗?我只是做错了吗?*
当然,您可以在TypeScript代码中的任意位置async (dynamic) import。导入的符号将在您导入该符号的范围内可见,而在其他任何地方都不可见。模块包含什么都没有关系。
,
(代表问题作者发布的答案,将其从问题帖中移出)。
我没有正确导入该类。 here概述了原因以及解决方案。