javascript 如何使用worker_threads在Firebase Functions中指定本地文件路径?

2g32fytz  于 2023-05-16  发布在  Java
关注(0)|答案(1)|浏览(88)

我有一个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”

ws51t4hk

ws51t4hk1#

您的代码告诉worker从server* 的当前工作目录中的worker.js * 加载javascript。这与您的源代码所在的目录不同。
Cloud Functions部署的工作目录在解包后将成为functions文件夹的根目录。但是,您的worker.js将位于./lib/worker.js。您对Worker的参数需要使用该路径。

相关问题