有没有办法将包含es6的字符串转换为es5?

时间:2016-04-22 04:48:10

标签: javascript babeljs

我正在创建一个用户输入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)"

2 个答案:

答案 0 :(得分:3)

这称为“转化”。运算符是程序,它们将用语言编写的代码转移到同一抽象级别的另一种语言。 (来自wikipedia

对于ES6到ES5,正如您在问题中提到的那样,有一个名为Babel的工具。

来自Babel's documentation

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-2015information 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});'
和以前一样。