javascript - 使用 MODULARIZE 选项编译时如何访问 emscripten 的文件系统 API?
问题描述
emcc
如果我用without编译我的 C++ 代码-s MODULARIZE=1 -s 'EXPORT_NAME="createMyModule"'
,我可以加载我的 WebAssembly 并像这样访问文件系统 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>
我的.js:
createMyModule().then(MyModule => {
console.log('Module loaded!');
if (MyModule.FS.mkdir) {
console.log('File System API available!');
}
});
日志:
Module loaded!
那么如何使用“基于模块化/承诺”的方法访问文件系统 API?
MyModule.FS
顺便说一句,可以访问,但不能访问MyModule.FS.mkdir
。
解决方案
要FS
在模块化构建中可用,您必须明确导出它:
emcc ... -s 'EXPORTED_RUNTIME_METHODS=["FS"]'
推荐阅读
- python - 在 django 中手动设计处理 inlineformset_factory 的模板的问题
- elasticsearch - How to filter logs based on severity in fluentd and send it to 2 different logging systems
- javascript - 更新 for 循环内的 Javascript 对象属性
- microsoft-edge - 如何卸载 Edge 扩展?
- ios - 苹果是否会强制您通过 ApplePay 进行应用内购买和订阅?
- c++ - 串行监视器不显示设置或主代码 - 波特率 9600
- listview - 为什么每次在 0 索引处插入新项目时都会触发所有列表项的“initState()”方法?
- ios - iOS UI 未更新
- powershell - 在 PowerShell 中指定管道分隔符?
- shell - 提取组中的第一行