使用 MODULARIZE 选项编译时如何访问 emscripten 的文件系统 API?

How do I access the File System API of emscripten when compiled with MODULARIZE option?

如果我使用 emcc 编译我的 C++ 代码而不使用 -s MODULARIZE=1 -s 'EXPORT_NAME="createMyModule"',我可以加载我的 WebAssembly 并像这样访问 File System API

HTML:

<script type="text/javascript">
  var Module = {
    onRuntimeInitialized: function() {
      console.log('Module loaded!');
      if (FS.mkdir) {
        console.log('File System API available!');
      }
    }
  };
</script>
<script type="text/javascript" src="myWebAssemblyModule.js"></script>
<script type="module" src="my.js"></script>

日志:

Module loaded!
File System API available!

但是如果我添加 -s MODULARIZE=1 -s 'EXPORT_NAME="createMyModule"' 作为编译器选项,并尝试基于 Promise 访问文件系统 API,它不起作用:

HTML:

<script type="text/javascript" src="myWebAssemblyModule.js"></script>
<script type="module" src="my.js"></script>

my.js:

createMyModule().then(MyModule => {
  console.log('Module loaded!');
  if (MyModule.FS.mkdir) {
    console.log('File System API available!');
  }
});

日志:

Module loaded!

那么如何使用“基于MODULARIZED/Promise”的方法访问文件系统API?

顺便说一句,

MyModule.FS 可以访问,但 MyModule.FS.mkdir.

不行

要使 FS 在模块化构建中可用,您必须明确导出它:

emcc ... -s 'EXPORTED_RUNTIME_METHODS=["FS"]'