【问题标题】:How to run babel.transform for react with Nashorn?如何运行 babel.transform 以与 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.jsC:\Users\***\AppData\Roaming\npm\node_modules

听说可以从 Nashorn 运行babel.transform

也许有办法只将 babel 的某些模块加载为 JavaScript 文件?

【问题讨论】:

  • 只是好奇,你为什么使用 nashorn 而不是常规的 Node.js?
  • 这是一个图书馆。对于更大的 Java 项目。我想是的……

标签: javascript node.js reactjs babeljs nashorn


【解决方案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”预设
猜你喜欢
  • 1970-01-01
  • 2020-12-10
  • 2021-04-15
  • 2022-01-08
  • 2021-04-21
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
相关资源
最近更新 更多