我正在创建一个用户输入es6代码的应用程序,我的应用程序将返回等效的es5。我知道babel将es6转换为es5,但有没有办法将它用于包含es6代码的字符串。
e.g 输入:
"[1, 2, 3].map(n => n * 2)"
输出:
"[1, 2, 3].map(function(n) { return n * 2; }, this)"
答案 0 :(得分:3)
这称为“转化”。运算符是程序,它们将用语言编写的代码转移到同一抽象级别的另一种语言。 (来自wikipedia)
对于ES6到ES5,正如您在问题中提到的那样,有一个名为Babel的工具。
var babel = require("babel-core");
babel.transform(代码,[选项])
转换传入的代码。使用生成的代码,源映射和AST返回对象。
babel.transform(code, [options]) // => { code, map, ast }
示例强>
var result = babel.transform("code();", options); result.code; result.map; result.ast;
答案 1 :(得分:1)
您需要同时安装babel-core和babel-preset-2015
后
var babel = require('babel-core');
如果您进入节点
babel.transform("[1, 2, 3].map(n => n * 2)", {presets: ["es2015"]}).code
你得到了
'"use strict";\n\n[1, 2, 3].map(function (n) {\n return n * 2;\n});'
结果是。显然这有换行符和"使用严格"添加了您可能不想要的内容,因此您需要挖掘babel选项文档,看看它是否可以按照您的需要进行格式化,或者自己动手。
修改强>
babel预设的工作方式现已发生变化(请参阅deprication notice on npm for preset-2015和information on how to use preset-env)。修改后的步骤是:
npm install babel-core babel-preset-env -S
然后运行节点并输入
babel.transform("[1, 2, 3].map(n => n * 2)", {presets: ["env"]}).code
你会得到
'"use strict";\n\n[1, 2, 3].map(function (n) {\n return n * 2;\n});'
和以前一样。