如何在Android中使用Duktape访问Javascript模块

eri*_*kva 11 javascript java android kotlin duktape

我正在使用Kotlin在我的Android应用程序中使用Duktape成功解析和评估javascript文件.

val file_name = "lib.js"

val js_string = application.assets.open(file_name).bufferedReader().use {
  it.readText()
}


val duktape = Duktape.create()

try {
  Log.d("Greeting", duktape.evaluate("'hello world'.toUpperCase();").toString())
  duktape.evaluate(js_string)

} finally {
  duktape.close()
}
Run Code Online (Sandbox Code Playgroud)

javascript文件是使用Browserify创建的,因此它是一个包含所有内容的单个文件,并且工作正常.但是我需要从模块中请求一个模块和一个方法,例如:

var test = require('testjs-lib');
test.EVPair.makeRandom().toWTF();
Run Code Online (Sandbox Code Playgroud)

除了这个链接,我不知道怎么做,也没有找到任何例子:http://wiki.duktape.org/HowtoModules.html

它告诉我使用modsearch,但我不知道如何做到或应该放在哪里,即使它适用于Duktape Android(https://github.com/square/duktape-) android).

有没有人成功地做过这件事可以解释一下这个问题?

Ale*_*ade 2

在 testjs-lib.js 中,添加使用 testjs-lib.js 本身导出的模块的 JS 代码。例如:

function myModule() {
  this.hello = function() {
    return 'hello!';
  }

  this.goodbye = function() {
    return 'goodbye!';
  }
}

module.exports = myModule;

//You code goes here
console.log(myModule.hello());
console.log(myModule.goodbye());
Run Code Online (Sandbox Code Playgroud)

然后要求 Duktape 评估整个文件。