Подтвердить что ты не робот

Преобразование кода ES5 в ES6 во время выполнения

Есть возможность использовать babel API для преобразования кода javascript из ecma script 5 в ecma script 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);

Он преобразуется в функцию стрелки в ES6

[1, 2, 3].map(n => n * 2);

UPDATE

Мне нужно на самом деле это взять код ES5 и изменить его на код ES6, это может быть через api

Например, мне нужен API/open source, который делает что-то вроде этого (мой код находится в левой части)

Ссылка, например

4b9b3361

Ответ 1

Лучшая идея - перейти в исходный код Lebab

Откройте bin/file.js. Прочитайте все строки, чтобы понять, что script.

Интересная часть состоит в следующем:

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

Более конкретно 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);

  }

Итак, вы можете использовать трансформатор со строкой кода (а не файла)

Теперь вы можете применить преобразования "ES5 к ES6"

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

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

    }

И затем переделайте его в строку

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

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

    return result;
  }

Резюме

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

JSFiddle demo здесь

Если вы не хотите всех преобразований, вы можете выбрать, что хотите, с параметрами:

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});

JSFiddle demo с параметрами

Ответ 2

Чтобы изменить ES5 на ES6, вы можете использовать этот https://www.npmjs.com/package/xto6

Вам нужно установить его

npm install -g xto6

А потом просто:

xto6 es5.js -o es6.js

Существует также 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/'));
});

Ответ 3

Вы ищете ES5 для ES6 или ES6 для ES5? Ваш jsfiddle имеет источник ES6.

Я бы порекомендовал заглянуть в самостоятельный проект babel на https://github.com/Daniel15/babel-standalone

Я изменил ваш jsfiddle, чтобы преобразовать код с предустановленной ES2015, это то, что вы ищете: https://jsfiddle.net/bdrg01Lg/

это так же просто, как

var input = 'const getMessage = () => "Hello World";';
var output = Babel.transform(input, { presets: ['es2015'] }).code;