在运行时将ES5代码转换为ES6

sho*_*a T 21 javascript ecmascript-6 babeljs

有一个选项可以使用babel API将javascript代码从ecma脚本5转换为ecma脚本6吗?我的意思是让我说我​​使用以下cdn

https://cdnjs.cloudflare.com/ajax/libs/babel-core/6.1.19/browser.js

并使用简单的ES5代码提供类似数组或对象的源,并将其转换为ES6代码的某些数组/对象/字符串?

有可能以某种方式用babel或其他工具实现这一目标吗?

我的意思是从这里使用一些例子.. https://github.com/addyosmani/es6-equivalents-in-es5

如果我输入源ES5代码

[1, 2, 3].map(function(n) { return n * 2; }, this);
Run Code Online (Sandbox Code Playgroud)

它在ES6中转换为箭头功能

[1, 2, 3].map(n => n * 2);
Run Code Online (Sandbox Code Playgroud)

UPDATE

我需要的是采用ES5代码并将其更改为ES6代码,它可以通过api

例如,我需要API /开源做这样的事情(我的代码在左侧)

例如链接

小智 9

最好的办法是去到源代码Lebab

打开斌/ file.js.阅读所有行以了解该脚本.

有趣的部分如下:

  var transformer = new Transformer({transformers: transformers});
  transformer.readFile(file[0]);
  transformer.applyTransformations();
  transformer.writeFile(program.outFile);
Run Code Online (Sandbox Code Playgroud)

更具体 transformer.applyTransformations();

我们打开/src/transformer.js

在这个文件中,我看到了一些有用的功能:

  /**
   * Prepare an abstract syntax tree for given code in string
   *
   * @param string
   */
  read(string) {

    this.ast = astGenerator.read(string, this.options);

  }
Run Code Online (Sandbox Code Playgroud)

所以你可以使用带有一串代码(不是文件)的变换器

现在您可以应用转换"ES5到ES6"

  /**
   * Apply All transformations
   */
  applyTransformations() {

    for (let i = 0; i < this.transformations.length; i++) {
      let transformation = this.transformations[i];
      this.applyTransformation(transformation);

    }
Run Code Online (Sandbox Code Playgroud)

然后,将其重新制作成字符串

  out() {
    let result = recast.print(this.ast).code;

    if(this.options.formatter) {
      result = formatter.format(result, this.options.formatter);
    }

    return result;
  }
Run Code Online (Sandbox Code Playgroud)

摘要

var transformer = new Transformer({});
transformer.read('var mySourceCode = "in ES5"');
transformer.applyTransformations();
console.log(transformer.out());
Run Code Online (Sandbox Code Playgroud)

JSFiddle演示在这里

如果您不想要所有转换,可以使用选项选择所需的内容:

var transformers = {
  classes: false,
  stringTemplates: false,
  arrowFunctions: true,
  let: false,
  defaultArguments: false,
  objectMethods: false,
  objectShorthands: false,
  noStrict: false,
  importCommonjs: false,
  exportCommonjs: false,
};

var transformer = new Transformer({transformers: transformers});
Run Code Online (Sandbox Code Playgroud)

带有选项的 JSFiddle演示


Krz*_*pka 5

要将ES5更改为ES6,您可以使用此https://www.npmjs.com/package/xto6

你必须安装它

npm install -g xto6
Run Code Online (Sandbox Code Playgroud)

然后就是:

xto6 es5.js -o es6.js
Run Code Online (Sandbox Code Playgroud)

还有gulp插件https://www.npmjs.com/package/gulp-xto6:

var gulp = require('gulp');
var xto6 = require('gulp-xto6');

gulp.task('default', function () {
  return gulp.src('path/to/fixtures/es5/*.js')
    .pipe(xto6())
    .pipe(gulp.dest('path/to/fixtures/es6/'));
});
Run Code Online (Sandbox Code Playgroud)