简体   繁体   English

从变量动态导入 WebAssembly

[英]Dynamically import WebAssembly from variable

It's possible to dynamically import Javascript from a string:可以从字符串中动态导入 Javascript:

const code = "console.log('Hello, world!');"

import("data:text/javascript;base64," + btoa(code));

I have a Uint8Array containing code compiled to WebAssembly, and I want to dynamically import it in the same way:我有一个Uint8Array包含编译为 WebAssembly 的代码,我想以相同的方式动态导入它:

import("data:binary/webassembly;base64,..."); // Something like this

You can import WebAssembly code in your imported JavaScript/TypeScript code.您可以在导入的 JavaScript/TypeScript 代码中导入 WebAssembly 代码。

The following uses the example from Using WebAssembly in Deno |以下使用来自在 Deno 中使用 WebAssembly 的示例 | Manual |手册 | Deno :德诺

const code = `\
const wasmCode = new Uint8Array([
  0, 97, 115, 109, 1, 0, 0, 0, 1, 133, 128, 128, 128, 0, 1, 96, 0, 1, 127,
  3, 130, 128, 128, 128, 0, 1, 0, 4, 132, 128, 128, 128, 0, 1, 112, 0, 0,
  5, 131, 128, 128, 128, 0, 1, 0, 1, 6, 129, 128, 128, 128, 0, 0, 7, 145,
  128, 128, 128, 0, 2, 6, 109, 101, 109, 111, 114, 121, 2, 0, 4, 109, 97,
  105, 110, 0, 0, 10, 138, 128, 128, 128, 0, 1, 132, 128, 128, 128, 0, 0,
  65, 42, 11
]);

const wasmModule = new WebAssembly.Module(wasmCode);

const wasmInstance = new WebAssembly.Instance(wasmModule);

const main = wasmInstance.exports.main as CallableFunction;
console.log(main().toString());
`;

import("data:text/typescript;base64," + btoa(code));

The same can be done using text/javascript rather than text/typescript as long as you remove the type cast in the code.只要您删除代码中的类型转换,就可以使用text/javascript而不是text/typescript来完成相同的操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM