首页 > 解决方案 > URL.createObjectUrl() 如何成为模块?

问题描述

我使用 Web Workers 已经有一段时间了,但直到现在我才发现需要将模块导入其中。尝试此操作后,我有些震惊地发现这在 Firefox Dev 76 中尚无法实现。在查看了问题的解决方案后,我有些不知所措。这就是我正在做的事情:

我有一个工作人员需要导入在浏览器中工作的 NodeJS 模块。该工作程序是从给定的代码字符串生成的。因此,在生成的工作人员中,我正在运行:

//worker
let { foo } = importScripts("http://localhost:3000/some-blob-url");

哪个成功导入其他代码。我还在给定代码字符串中检测到导入时,运行此代码以生成另一个带有导入代码的 URL,该导入代码导出我想要的模块的一部分。

let blobURL = URL.createObjectURL(new Blob([importingCode], { type: 'application/javascript' }));

在哪里importingCode

import { foo } from 'module';
export { foo };

但是,在导入 Blob URL 时worker.js,我被告知导入只能发生在模块的顶层,这意味着这个创建的 Blob 不是模块(importingCode)。

createObjectURL给定一个 Blob 代码,我将如何将其初始化为支持导入的模块。我知道我链接到的答案使用了 Webpackrequire语句,但我想在这里避免使用 Webpack。这可能吗?

抱歉,如果我的问题含糊不清,请告诉我,我很乐意澄清。

标签: javascriptblobweb-workeres6-modules

解决方案


推荐阅读