ES6 模块

WasmEdge QuickJS runtime 提供了对 ES6 模块的支持。我们在 React SSR 例子中使用的 rollup 命令实际上是将 CommonJS 和 NPM 模块转换并且捆绑为 ES6 模块,以便它们可以在 WasmEdge QuickJS 中执行。这篇文章将告诉你如何在 WasmEdge 中使用 ES6 模块。

我们将以 example_js/es6_module_demo 文件夹中的例子为例。该文件夹中的 module_def.js 文件定义并导出了一个简单的 JS 函数。

  1. function hello(){
  2. console.log('hello from module_def.js');
  3. }
  4. export {hello};

module_def_async.js 文件定义并导出了一个 aysnc 函数和一个变量。

  1. export async function hello() {
  2. console.log('hello from module_def_async.js');
  3. return 'module_def_async.js : return value';
  4. }
  5. export var something = 'async thing';

demo.js 文件从这些模块导入函数和变量并执行这些函数。

  1. import {hello as module_def_hello} from './module_def.js';
  2. module_def_hello();
  3. var f = async () => {
  4. let {hello, something} = await import('./module_def_async.js');
  5. await hello();
  6. console.log('./module_def_async.js `something` is ', something);
  7. };
  8. f();

要运行这个例子,你可以在 CLI 上做如下操作。

  1. $ cd example_js/es6_module_demo
  2. $ wasmedge --dir .:. ../../target/wasm32-wasi/release/wasmedge_quickjs.wasm demo.js
  3. hello from module_def.js
  4. hello from module_def_async.js
  5. ./module_def_async.js `something` is async thing

注意:命令行中的 --dir .:. 是为了赋予 wasmedge 权限,让其读取文件系统中 demo.js 文件的本地目录。