如何在没有"路径"模块的情况下加载 cheerp-wasm 程序?
How do I load a cheerp-wasm program in absence of a 'path' module?
Cheerp 有一个cheerp-wasm
目标,该目标将C++编译为.js
及其关联的.wasm
文件。我的理解是,.js
文件实际上是 Web 程序集的加载器。
此加载程序 调用require("path")
来导入所需的文件系统功能,以将.wasm
作为文件加载。运行我的代码的环境 (Screeps( 不提供对此"path"
模块的访问。
[8:39:54 AM][shard3]Error: Unknown module 'path'
at Object.requireFn (<runtime>:31712:23)
at fetchBuffer (main:10:5)
at main:30:1
at main:42:3
at Object.exports.evalCode (<runtime>:15584:76)
at Object.requireFn (<runtime>:31730:28)
at Object.exports.run (<runtime>:31673:60)
如果 Cheerp 加载器依赖于我无法提供的功能,如何加载我的 wasm 代码?
虽然 Cheerp 提供了一些可以设置的标志,但似乎没有一个适用于当前坐姿。
我可以暗示 Cheerp 直接调用bytecode = require("mycode.wasm")
并使用它吗? 也许 Cheerp 可以将 wasm 作为字节码嵌入.js本身? 我应该编写自己的加载器吗?
Cheerp根据环境以不同的方式检索wasm文件。
支持的环境包括:浏览器、node.js、d8 和 js。
节点环境假定有一个用于从文件系统读取 wasm 的path
模块。
这似乎在您的环境中不可用。
我们计划在未来传递wasm文件时允许更大的灵活性,但是以一般方式执行此操作是一个棘手的问题。
现在,我可以建议一种解决方法。
这是获取wasm的函数的当前定义:
function fetchBuffer(p){
var b=null,f='function';
if(typeof fetch===f)b=fetch(p).then(r=>r.arrayBuffer());
else if(typeof require===f){
p=require('path').join(__dirname, p);
b=new Promise((y,n)=>{
require('fs').readFile(p,(e,d)=>{
if(e)n(e);
else y(d);
});
});
}else b=new Promise((y,n)=>{
y(read(p,'binary'));
});
return b;
}
如您所见,它首先尝试使用fetch
功能(如果可用(。
由于它在您的环境中似乎未定义,因此您可以在 cheerp 代码之前自行定义它,并使用您的require("mycode.wasm")
实现它。
示例(未测试(:
function fetch(path) {
return new Promise((y,n)=> {
let ret = {
arrayBuffer: () => {
return require("mycode.wasm");
}
};
y(ret);
});
}
相关文章:
- 如何在没有"路径"模块的情况下加载 cheerp-wasm 程序?
- wxWidgets 3.1.3 图标在 mac 下加载 - ICNS 文件不可读?
- 有没有办法在不重新启动或注销的情况下加载游标?
- 一种在没有 root 的情况下加载共享库的更简单方法
- 如何在没有reinterpret_cast的情况下使用 dlsym() 加载函数?
- 无法在Windows 7下加载QtBluetooth 5.12.0
- 有没有办法在不使用GDI+的情况下从我的资源加载.png
- 如何在windows下加载firebreath中的库
- 在未加载上下文的情况下在对象构造函数中使用OpenGL函数
- QT是否有其他方法可以在没有QTNetworkManager的情况下加载图像
- 如何在不使用外部库的情况下加载到 8 位C++位图图像
- 如何在没有背景的情况下加载 bmp
- 如何在知道第一个元素的情况下加载结构
- 如何在不终止主应用程序的情况下卸载 ActiveX 的 ocx 以允许覆盖 ocx?
- 如何在没有 p、q 等的情况下加载 RSA 密钥对
- SFML在Windows下加载字体时出错
- 如何在没有Openssl或其他库的情况下加载RSA密钥对
- OpenGL在没有或有静态设备上下文的情况下加载纹理
- 我们可以在不使用 c++ 中的任何库的情况下加载、显示和操作图像的矩阵吗?
- 在不引用DLL/程序集的情况下加载WinRT组件