我有一个firebase函数,它使用worker_threads来卸载一些cpu密集型任务。为了初始化workerThread,我给予它一个工人文件的本地文件路径。但是当firebase函数执行时,我得到以下错误。
发生错误:错误:无法找到模块“/website.js”
worker.js文件与调用new Worker()的函数位于同一个文件夹中;它们都位于src目录的根级别。
我试过使用path.resolve,但没有用。我在网上找不到任何关于使用web workers和firebase函数的信息。
如何指定新的Workers文件路径以在本地查找文件?
复制:
文件结构:
lib
- firebase_function.js
- worker.js
- index.js
src
- firebase_function.ts
- worker.ts
- index.ts
1)创建firebase v2函数:
import {onCall} from "firebase-functions/v2/https";
import {Worker} from "worker_threads";
const oncallablefunction = onCall(async (request) => {
const result = await new Promise((resolve, reject) => {
const worker = new Worker("./worker.js"); // <- errors here, file cannot be found
worker.on('message', resolve);
worker.on('error', reject);
});
// should be 1000
console.log(result);
})
export {oncallablefunction}
2)在firebase函数所在目录下创建worker.js文件
import {parentPort} from "worker_threads";
function doWork() {
// do computation
return 1000
}
const result = doWork()
if (parentPort) {
parentPort.postMessage(result);
}
3)从index.js导出
import admin from "firebase-admin";
admin.initializeApp();
export * from './firebase_function.js';
4)从firebase_function.js部署并执行oncallablefunction,得到如下错误:
未处理的错误错误:无法在Function.Module._resolveFilename中找到模块“/workspace/worker.js”
1条答案
按热度按时间ws51t4hk1#
您的代码告诉worker从server* 的当前工作目录中的worker.js * 加载javascript。这与您的源代码所在的目录不同。
Cloud Functions部署的工作目录在解包后将成为functions文件夹的根目录。但是,您的worker.js将位于./lib/worker.js。您对Worker的参数需要使用该路径。