lan*_*all 18
在这里查看jvm-npm https://github.com/nodyn/jvm-npm.该项目由nodyn用作CommonJS模块系统.它是NPM感知的,这意味着您可以直接从NPM加载模块,但它不提供任何Node.js API.
这是一个简单的示例用法:
$ npm install pegjs
npm http GET https://registry.npmjs.org/pegjs
npm http 200 https://registry.npmjs.org/pegjs
pegjs@0.8.0 node_modules/pegjs
$ jrunscript
nashorn> typeof require
undefined
nashorn> load('./jvm-npm.js')
nashorn> typeof require
function
nashorn> var PEG = require('pegjs');
nashorn> typeof PEG
object
Run Code Online (Sandbox Code Playgroud)
它主要是所有Javascript,但实际从文件系统加载文件等都是使用Java完成的.
不久前我在Nashorn邮件列表上问了一个非常相似的问题,这里是Sundar的(Nashorn工程师)回复:
来自:A.Sundararaj an
致:nashorn-dev@openjdk.java.net
我忘了添加.Nashorn不包含任何内置模块系统.但是,如果模块系统是纯JS + Java,则必须可以在nashorn上运行.
除了好的旧"eval"之外,Nashorn支持"加载"(从URL,文件,资源加载脚本)和"loadWithNewGlobal"(加载脚本但加入新的全局范围)原语.因此,任何模块系统都应该可以在纯JS中使用nashorn或者使用一些Java代码来实现.
-Sundar
我一直在寻找这样的实现.我一直在使用Rhino-Require的一个小补丁版本.虽然Rhino声称与CommonJS兼容,但AFAIK,它只实现了模块而不是包(package.json)无法解析. RingoJS应兼容.但Nashorn永远不会被看见.
后来,甲骨文公布了依赖于Avatar.js或此处的 Avatar项目.这是非正式名为Node.jar的官方项目.但截至目前,你必须自己编译.该项目非常年轻.
另一个非常年轻的项目是Nodyn,它依赖于dyn.js.
所以,如果理解得很好,CommonJs应该使用avatar-js和nodyn,但这两个人还很年轻.我不明白为什么avatar-js与nashorn一起没有完全分发.
一种解决方案是添加一个CommonJS兼容性脚本,例如Rhino,它添加了importClass/importPackage(mozilla_compat.js),它将CommonJS兼容性添加到nashorn中,这种Rhino-Require shim经过全面测试.
我有同样的需求,我使用了jvm-npm一段时间,但是我需要一些能够工作的东西,即使不允许在JavaScript中使用Java包,所以我在这里写了我自己的版本:https://github.com/coveo /犀牛-CommonJS的模块
它完全用Java实现,支持从文件系统以外的地方加载模块(Java资源,自定义数据库等)
如果有人想使用它,它将在Maven Central上发布.
| 归档时间: |
|
| 查看次数: |
7890 次 |
| 最近记录: |