gpt4 book ai didi

javascript - DukTape `require()` 抛出 `TypeError: undefined not callable`

转载 作者:行者123 更新时间:2023-12-03 00:08:59 25 4
gpt4 key购买 nike

我正在尝试使用 Duktape 进行 Android 和 JavaScript 绑定(bind)。​​

我按照此处的文档 https://wiki.duktape.org/HowtoModules.html 进行操作按照步骤,我有以下调用代码:

DuktapeContext::DuktapeContext(JavaVM* javaVM)
: m_context(duk_create_heap(nullptr, nullptr, nullptr, &m_context, fatalErrorHandler))
, m_objectType(m_javaValues.getObjectType(getEnvFromJavaVM(javaVM))) {
if (!m_context) {
throw std::bad_alloc();
}
duk_module_duktape_init(m_context); //<~~~ adds support for `require()`
// Stash the JVM object in the context, so we can find our way back from a Duktape C callback.
duk_push_global_stash(m_context);
duk_push_pointer(m_context, javaVM);
duk_put_prop_string(m_context, -2, JAVA_VM_PROP_NAME);
duk_pop(m_context);
}

duk_module_duktape_init 的定义如下(开箱即用,我没有编辑它):

/* Register `require` as a global function. */
duk_eval_string(ctx,
"(function(req){"
"var D=Object.defineProperty;"
"D(req,'name',{value:'require'});"
"D(this,'require',{value:req,writable:true,configurable:true});"
"D(Duktape,'modLoaded',{value:Object.create(null),writable:true,configurable:true});"
"})");
duk_push_c_function(ctx, duk__require, 1 /*nargs*/);

在我的 javascript 文件 sample.js 中,我有以下行:

var mod = require('tester');

当通过 Duktape 评估脚本时,会引发异常由以下原因引起:com.squareup.duktape.DuktapeException: TypeError: undefined not callable at JavaScript.eval( require() 被调用)

我还必须实现 Duktape.modSearch() 函数吗?我以为我可以通过简单地使用 require() 来逃脱?

最佳答案

由于模块解析和加载取决于您需要自己实现的平台。 duktape 附带的模块处理仅处理管理加载的模块并提供 require 调用(您不需要自己提供此函数)。注册这 2 个函数很简单 (see also the entire code):

// Module loading support.
duk_push_object(_ctx);
duk_push_c_function(_ctx, resolveModule, JSExport::VarArgs);
duk_put_prop_string(_ctx, -2, "resolve");
duk_push_c_function(_ctx, loadModule, JSExport::VarArgs);
duk_put_prop_string(_ctx, -2, "load");
duk_module_node_init(_ctx, normalizeFilename);

实际的解析和加载代码涉及更多一些。可以看到完整代码in the scripting context class .

关于javascript - DukTape `require()` 抛出 `TypeError: undefined not callable`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829325/

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