gpt4 book ai didi

javascript - 为什么 `require` 会导致 Duktape 出错?

转载 作者:行者123 更新时间:2023-11-29 10:13:10 25 4
gpt4 key购买 nike

我正在使用 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);
}

example.js

var mylib = require("mylib")
print (mylib.hello)

mylib.js

exports.hello = "Hello"

错误:

file load err TypeError: not callable

堆栈转储说:

duk_js_call.c:682
require native strict preventsyield
eval example.js:1 preventsyield

最佳答案

Duktape 要求(没有双关语意)您提供 Module Search function为了保持便携性。然而,即使您对 Duktape 没有什么经验,实现一个也是一项非常简单和直接的任务。
一个非常简单但功能齐全的模块搜索功能是:

Duktape.modSearch = function(id) {
return readFileAsString(id);
}

这将允许您使用 filename 作为参数从 Duktape Javascript 环境调用 require(filename) 并将其用作您的模块。更高级的功能可以处理错误或搜索多个路径和文件夹。

要使用 require() 函数,您现在必须创建一个 C/C++ 函数来处理读取文件并将其内容作为字符串返回并将此函数绑定(bind)到 Duktape 引擎(示例因为这是在 Duktape 主页上)。
现在从 Duktape 运行时调用此函数定义(例如使用 duk_eval_string(ctx, "Duktape.modSearch = ...");),您应该能够调用 require().

关于javascript - 为什么 `require` 会导致 Duktape 出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28729847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com