如何运行 babel.transform 以与 Nashorn 做出反应?
Posted
技术标签:
【中文标题】如何运行 babel.transform 以与 Nashorn 做出反应?【英文标题】:How to run babel.transform for react with Nashorn? 【发布时间】:2015-12-15 17:18:04 【问题描述】:我正在尝试使用 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 安装为全局节点模块,出现错误:
测试套件: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 文件?
【问题讨论】:
只是好奇,你为什么使用 nashorn 而不是常规的 Node.js? 这是一个图书馆。对于更大的 Java 项目。我想是的…… 【参考方案1】:你应该直接加载 babel.js 然后评估babel.transform("...")
。应该不需要从 npm 或 node 加载任何东西。
但是,唉,您必须等待对 JDK bug 8135190 的修复发布,因为加载 babel.js 失败并出现“方法代码太大”异常。
【讨论】:
可惜的是 Oracle 更新周期……直到 Java 9 才修复。那太糟糕了。 根据bug,它在8u72中修复,根据OpenJDK release schedule应该在2016年1月可用。 哦,我没有看到“反向移植”。好消息!【参考方案2】:我已经通过以下脚本在 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 预设也可以。
【讨论】:
谢谢,很快就会检查! 另外,为了支持解构,添加“stage-2”预设以上是关于如何运行 babel.transform 以与 Nashorn 做出反应?的主要内容,如果未能解决你的问题,请参考以下文章
@ babel / plugin-transform-modules-amd的行为不符合预期
`@babel/runtime` 和 `@babel/plugin-transform-runtime` 版本
Babel:无法让“@babel/plugin-transform-destructuring”插件工作
@babel/preset-env 与@babel/plugin-transform-runtime 使用及场景区别
添加@babel/transform-runtime 插件时无法读取未定义的属性“Reactstrap”
Cannot find module '@babel/plugin-transform-react-jsx' 和Cannot find module '@babel/core&