【问题标题】:Can I use both ES6 and ES5 in the same React codebase?我可以在同一个 React 代码库中同时使用 ES6 和 ES5 吗?
【发布时间】:2016-05-19 16:27:40
【问题描述】:

我有以下 gulpfile.js:

var gulp = require('gulp');
var browserify = require('gulp-browserify');
var concat = require('gulp-concat');

gulp.task('browserify', function() {
    gulp.src('js/ScheduleMain.js')
      .pipe(browserify({transform:'reactify'}))
      .pipe(concat('ScheduleMain.js'))
      .pipe(gulp.dest('static/dist/js'));
    gulp.src('js/ConfidenceMain.js')
      .pipe(browserify({transform:'reactify'}))
      .pipe(concat('ConfidenceMain.js'))
      .pipe(gulp.dest('static/dist/js'));
});

gulp.task('default',['browserify']);

gulp.task('watch', function() {
    gulp.watch('src/**/*.*', ['default']);
});

如您所见,我有两个需要转换的源文件。 ScheduleMain.js 是用 es5 编写的,构建良好。我想在 es6 中编写我的新应用程序 (ConfidenceMain.js),并可能将其转换为 es5 进行构建。我对如何做到这一点有点困惑(或者更确切地说,如果它完全被推荐)。

底线:尽管以前在同一代码库中有其他项目的 es5 代码,但我可以继续使用 es6 语法编写的新 React 项目吗?

【问题讨论】:

  • 您的底线与您的标题问题冲突:/

标签: javascript reactjs gulp browserify babeljs


【解决方案1】:

是的,您可以混合使用 ES6 和 ES5 - ES6 完全向后兼容,因此基本上您可以将整个应用程序视为 ES6,但只能在新代码中使用新语法和功能。

您需要在 gulp 管道中添加一个转译步骤,以通过 babel 传递您的代码并将其编译为 ES5。像这样的:

var gulp = require('gulp');
var browserify = require('gulp-browserify');
var concat = require('gulp-concat');
var babel = require('gulp-babel');

gulp.task('browserify', function() {
    gulp.src('js/ScheduleMain.js')
      .pipe(browserify({transform:'reactify'}))
      .pipe(concat('ScheduleMain.js'))
      .pipe(gulp.dest('static/dist/js'));
    gulp.src('js/ConfidenceMain.js')
      .pipe(babel())
      .pipe(browserify({transform:'reactify'}))
      .pipe(concat('ConfidenceMain.js'))
      .pipe(gulp.dest('static/dist/js'));
});

gulp.task('default',['browserify']);

gulp.task('watch', function() {
    gulp.watch('src/**/*.*', ['default']);
});

请注意,上面的代码不会转译 ScheduleMain.js,但如果您愿意,您可以轻松地做到这一点,以便继续使用 ES6 功能 - 只需以相同的方式通过 babel() 传递它。

请注意,babel 需要一些配置 - documentation 将引导您完成此操作。您将需要 es2015react 预设。

编辑:鉴于您使用 browserify,更简洁的方法可能是使用 babelify 转换:

gulp.src('js/ConfidenceMain.js')
  .pipe(browserify({transform:'babelify'}))
  .pipe(concat('ConfidenceMain.js'))
  .pipe(gulp.dest('static/dist/js'));

【讨论】:

  • 如果使用了 Babel,则不再需要 reactify...(如果 Babel 配置正确)。
  • 好点,我错过了。鉴于使用了 browserify,另一个选择是使用它的 babelify 转换。
  • 不完全向后兼容(但几乎):ecma-international.org/ecma-262/6.0/…
猜你喜欢
  • 2019-04-27
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多