如何运行与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。