资讯专栏INFORMATION COLUMN

java中调用npm模块

didikee / 486人阅读

摘要:工具和资料群高级爬虫作者自建群,欢迎加入作者收集的爬虫相关工具和资料正文一些小的片段可以很方便的直接使用直接导入,但是如何使用方法导入使用下载的模块呢答案是使用这个项目。

工具和资料

QQ群 - Javascript高级爬虫 - 作者自建群,欢迎加入!

awesome-java-crawler - 作者收集的爬虫相关工具和资料

正文

一些小的javascript片段可以很方便的直接使用ScriptEngine.eval()直接导入,但是如何使用require方法导入使用npm下载的javascript模块呢?

答案是使用jvm-npm这个项目。

首先,创建一个目录放置所有javascript文件,比如:D:path ojs_modules

从jvm-npm下载jvm-npm.js,放到上述目录中

使用npm i -g下载你需要引用的npm模块,注意看最后的提示,即模块下载目录

到模块下载目录,通常为 pm ode_modules,里面一般有个dist目录,从里面找到完整的模块js文件,复制到上述目录

见以下Kotlin示例代码:(注意把js_module换成你需要加载的模块名)

val JS_ROOT = "D:path	ojs_modules"
val JSE = ScriptEngineManager().getEngineByName("nashorn").apply {
    System.setProperty("user.dir", JS_ROOT)             // 设定jvm-npm的当前目录
    eval(Util.readLocalUtfText("$JS_ROOTjvm-npm.js")) // 在ScriptEngine中加载jvm-npm.js
    println(eval("typeof require"))                     // 验证require方法已正确引入
    eval("var mylib = require("js_module")")            // 这时候,就可以用require()方法来引入当前目录中的js模块了
    println(eval("typeof mylib"))                       // 验证js模块已正确加载
}
...
val bar = JSE.eval("mylib.foo()")                       // js代码中可以使用加载的js模块了

注意:

jvm-npm有个bug,如果你的js文件大于64K,则会导致文件截断。
这种情况下你需要编写一个能一次读取完整File或InputStream的java方法,替换掉下面这句:

    return new Scanner(input).useDelimiter("A").next()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72731.html

相关文章

  • java调用npm模块

    摘要:工具和资料群高级爬虫作者自建群,欢迎加入作者收集的爬虫相关工具和资料正文一些小的片段可以很方便的直接使用直接导入,但是如何使用方法导入使用下载的模块呢答案是使用这个项目。 showImg(https://segmentfault.com/img/remote/1460000018765904); 工具和资料 QQ群 - Javascript高级爬虫 - 作者自建群,欢迎加入! a...

    wind5o 评论0 收藏0
  • React的移动端和PC端生态圈的使用汇总

    摘要:调用通过注册表调用到实例,透过的,调用到中的,最后通过,调用,根据参数相应模块执行。京东的,多端解决方案是一套遵循语法规范的多端开发解决方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 对于一项技术,我们不能停留在五分钟状态,特别喜欢一句话,用什么方式绘制UI界面一点不重要,重要的是底层的思维,解决问题和优化...

    kun_jian 评论0 收藏0
  • React的移动端和PC端生态圈的使用汇总

    摘要:调用通过注册表调用到实例,透过的,调用到中的,最后通过,调用,根据参数相应模块执行。京东的,多端解决方案是一套遵循语法规范的多端开发解决方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 对于一项技术,我们不能停留在五分钟状态,特别喜欢一句话,用什么方式绘制UI界面一点不重要,重要的是底层的思维,解决问题和优化...

    J4ck_Chan 评论0 收藏0
  • React的移动端和PC端生态圈的使用汇总

    摘要:调用通过注册表调用到实例,透过的,调用到中的,最后通过,调用,根据参数相应模块执行。京东的,多端解决方案是一套遵循语法规范的多端开发解决方案。 showImg(https://segmentfault.com/img/bVbuMkw?w=1304&h=808); 对于一项技术,我们不能停留在五分钟状态,特别喜欢一句话,用什么方式绘制UI界面一点不重要,重要的是底层的思维,解决问题和优化...

    Travis 评论0 收藏0

发表评论

0条评论

didikee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<