如何运行与Nashorn反应的babel.transform?

我正在尝试使用babel.transform而不是JSXTranformer来做出反应。

 ... ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine nashorn = mgr.getEngineByName("nashorn"); nashorn.eval("var process = {env:{}}"); // node-modules expect that nashorn.eval(getScript("com/facebook/babel/jvm-npm.js")); babel = (JSObject) nashorn.eval("require('babel');"); ... 

Babel和babel-core被安装为全局节点模块,并且出现错误:

testing套件:com.my.app.BabelTransformerTest
找不到模块./lib/api/node.js
无法加载模块babel-core LOAD_ERROR
无法加载模块babel LOAD_ERROR
无法加载模块babel-core LOAD_ERROR
无法加载模块babel LOAD_ERROR
找不到模块./lib/api/node.js
无法加载模块babel-core LOAD_ERROR
无法加载模块babel LOAD_ERROR

./lib/api/node.js位于C:\Users\***\AppData\Roaming\npm\node_modules

我听说有可能从Nashorn运行babel.transform

也许有只加载一个babel的特定模块作为JavaScript文件的方法?

我已经在jdk1.8.0_45中使用Babel Standalone与以下脚本一起工作:

 FileReader babelScript = new FileReader("babel.js"); ScriptEngine engine = new ScriptEngineManager().getEngineByMimeType("text/javascript"); SimpleBindings bindings = new SimpleBindings(); engine.eval(babelScript, bindings); bindings.put("input", "<Component />"); Object output = engine.eval("Babel.transform(input, { presets: ['react'] }).code", bindings); System.out.println(output); 

哪个返回:

 React.createElement(Component, null); 

es2015预设也适用。

您应该直接加载babel.js,然后评估babel.transform("...") 。 不应该有任何需要从npm或节点加载任何东西。

但是,唉,您将不得不等待修复JDK 8135190 bug ,因为加载babel.js会导致“方法代码太大”exception。