cay*_*lik 4 javascript duktape
我正在使用 Duktape 嵌入 JavaScript,但使用require总是会导致错误:
int main(){
duk_context *ctx = duk_create_heap_default();
duk_peval_file(ctx, "example.js");
printf("file load err %s", duk_safe_to_string(ctx, -1));
duk_destroy_heap(ctx);
}
Run Code Online (Sandbox Code Playgroud)
例子.js
var mylib = require("mylib")
print (mylib.hello)
Run Code Online (Sandbox Code Playgroud)
mylib.js
exports.hello = "Hello"
Run Code Online (Sandbox Code Playgroud)
错误:
文件加载错误类型错误:不可调用
堆栈转储 说:
duk_js_call.c:682
需要本机严格的preventyield
eval example.js:1 preventyield
Duktape 要求(无双关语)您提供模块搜索功能以保持可移植性。但是,即使您对 Duktape 几乎没有经验,实现它也是一项非常简单和直接的任务。
一个非常简单但功能齐全的模块搜索功能是:
Duktape.modSearch = function(id) {
return readFileAsString(id);
}
Run Code Online (Sandbox Code Playgroud)
这将允许您require(filename)使用文件名作为参数从 Duktape Javascript 环境调用并将其用作模块。更高级的功能将处理错误或搜索多个路径和文件夹。
要使用该require()函数,您现在必须创建一个 C/C++ 函数来处理读取文件并将其内容作为字符串返回,并将此函数绑定到 Duktape 引擎(此示例位于Duktape主页上)。
现在从 Duktape 运行时调用此函数定义(例如使用duk_eval_string(ctx, "Duktape.modSearch = ...");),您应该能够调用require().
| 归档时间: |
|
| 查看次数: |
1291 次 |
| 最近记录: |