如何在AssemblyScript中使用asc编译console.log("1")?



我想在AssemblyScript(TypeScript)中编译一个显示1的代码,使用console.log

我的名为example.ts的文件包含以下内容:

console.log("1")

我编译如下:

asc example.ts

但是我收到以下错误:

ERROR TS2304: Cannot find name 'console'.
console.log("1")
~~~~~~~
in example.ts(1,1)
FAILURE 1 compile error(s)

同样的事情发生在process.stdout.write("1").

这是如何解决的?

我在Discord上的AssemblyScript服务器上寻求帮助,贡献者(dcodeIO)能够修复有关UTF-8编码的错误。因此,为此,必须从版本0.17.7开始具有AssemblyScript,这是修复此错误的版本。此外,另一位合作者(MaxGraey)帮助我创建了代码,并安装了软件包。

首先,您必须安装加载程序:

npm i @assemblyscript/loader

就我而言,我无法,由于安装了操作系统的USB上的读取问题,我不得不全局安装它:

npm install --force -g @assemblyscript/loader

你必须小心,有一个名为assemblyscript-loadernpm包,请注意,它的中间有一个减号,你不必执行以下操作:

npm install --force -g assemblyscript-loader # Do not do it, it is wrong.

example.ts的代码必须如下所示:

namespace console {
declare function log(str: string): void;
}
/*
main generally unnecessary if you don't use
the `import` object on the host side,
but in this case it's better to delay the implicit
initialization during module instantiation
*/
export function main(): void {
console.log("1");
}

要使用asc编译example.ts,您可以执行以下操作...我添加了优化以减轻文件重量:

asc -O3z --converge -b ./example.wasm ./example.ts

这将生成一个3033 字节的文件,相当于3 kb

要从Node执行wasm代码.js您必须创建一个文件,例如example.js,它如下所示:

const fs = require("fs")
const loader = require('@assemblyscript/loader/umd');
loader.instantiate( fs.readFileSync("./example.wasm"), {
example: { // if your file called "example.ts"
"console.log"(ptr) {
console.log(exports.__getString(ptr));
}
}
})
.then(module => {
exports = module.exports;
exports.main(); // call entry point
})
.catch(e => {
console.error(e);
})

使用fs.readFileSync("./example.wasm")很重要,因为当只使用"./example.wasm"时,它不起作用。这是因为加载器AssemblyScript(在Node.js中创建)的实现,在索引.js文件中大约在第333行,要求一个类型为Buffer的变量作为参数,这是example.wasm的字节。

就我而言,当我全局安装它时,在示例中.js我将其更改为以下内容:

const loader = require('/usr/lib/node_modules/@assemblyscript/loader/umd');

要从Node.js运行示例.js文件,可以按如下方式完成。我放置了代码跟踪参数,以防发生奇怪的事情:

node --trace-warnings --track-heap-objects ./example.js

运行命令的输出如下:

1

如您所见,它工作正常。

相关内容

  • 没有找到相关文章

最新更新