简体   繁体   English

将反应从es5转换为es6

[英]Converting react from es5 to es6

I am converting an existing react project from es5 to es6. 我正在将现有的React项目从es5转换为es6。 I have babel-preset-react . 我有babel-preset-react When I add es6 to myFile.js I get error: 将es6添加到myFile.js时出现错误:

Unexpected token while parsing file. 解析文件时出现意外令牌。

Code: 码:

var React = require('react');
var Input = require('../common/textInput')

var ReviewTimeOffRequestPage = React.createClass({
  let m = 0;//add this and I get an error
  render: function() {

Does babel-preset-react require a seperate es6 module? babel-preset-react是否需要单独的es6模块吗?

That's what react preset provides https://babeljs.io/docs/plugins/preset-react/ : 这就是react预置提供的https://babeljs.io/docs/plugins/preset-react/

  • syntax-flow 语法流
  • syntax-jsx 语法jsx
  • transform-flow-strip-types 转换流条类型
  • transform-react-jsx 变换反应jsx
  • transform-react-display-name 转换反应显示名称

So, basically those are jsx and flow-specific transformers. 因此,基本上,这些是jsx和流特定的转换器。 Which means if you use any other language features which are not covered by the 5 transformers above - you must plug those in as well. 这意味着,如果您使用上述5个转换器未涵盖的任何其他语言功能-您也必须将其插入。

PS: in your case having the statement within an object literal is syntactically incorrect anyway. PS:就您而言,在对象文字中包含该语句在语法上无论如何还是不正确的。

{
    let m = 0;
}

the code above makes no sense, since those must be key-value pairs (or function expressions), not statements. 上面的代码没有意义,因为它们必须是键值对(或函数表达式),而不是语句。

babel-preset-reac不包含ES6功能,要启用ES6,您应该添加babel-preset-es2015

This is how I resolved the issue of converting react from es5 to es6: 这是我解决了将es5从es5转换为es6的问题:

npm install babel-preset-react npm install babel-preset-react

Then configure .babelrc to use es2015: 然后将.babelrc配置为使用es2015:

{
  "presets": ["react", "es2015"]
}

linting (gulp-eslint). 棉绒(gulp-eslint)。 set es6: true in eslint.config.json 设置es6:在eslint.config.json中为true

{
  "ecmaFeatures": {
    "jsx": true
  },
  "env": {
    "browser": true,
    "node": true,
    "jquery": true,
    "es6": true
  },
  "rules": {
    "quotes": 0,
    "no-trailing-spaces": 0,
    "eol-last": 0,
    "no-unused-vars": 0,
    "no-underscore-dangle": 0,
    "no-alert": 0,
    "no-lone-blocks": 0
  },
  "globals": {
    "jQuery": true,
    "$": true
  }
}

I had issues with jQuery not being found after switching from es5 to babel-preset-react. 从es5切换到babel-preset-react后,找不到jQuery的问题。 Oddly enough, I moved my jQuery import to the top of my entry point main.js and used es6 imports syntax. 奇怪的是,我将jQuery导入移动到了入口点main.js的顶部,并使用了es6 import语法。

main.js main.js

//For some reason when using babel-preset-es2015 the import needs to be
//defined on two lines using the import syntax.
//It also needs to be defined at the top of this file  
//$ = jQuery = require('jquery');//didnt work
//$ = require('jquery');//didn't work
//jQuery = require('jquery');//didnt work
import $ from 'jquery';
import jQuery from 'jquery';

var React = require('react');
//...

gulpfile recipes gulpfile食谱

   //Dependencies for reference
    var gulp = require('gulp');
    var connect = require('gulp-connect');//Runs a local dev server
    var open = require('gulp-open');//Open a URL in a web browser
    var browserify = require('browserify');//bundles js
    var reactify = require('reactify');//transforms react jsx to js
    var babel = require('babelify');;//transforms es6 to es5
    var sourcemaps = require('gulp-sourcemaps');//sourcemaps for debugging
    var source = require('vinyl-source-stream');//use conventional text streams with gulp
    var buffer = require('vinyl-buffer');//buffer to allow sourcemaps to work
    var concat = require('gulp-concat');//concatenates files
    var lint = require('gulp-eslint');//Lint js files, including JSX
    var uglify = require('gulp-uglify');

//....
gulp.task('js', function(){
  browserify(config.paths.mainJs,  { debug: true })
      .transform(babel)
      .bundle()
      .on('error', console.error.bind(console))
      .pipe(source('bundle.js'))
      .pipe(buffer())
      .pipe(sourcemaps.init({ loadMaps: true }))
          // Add transformation tasks to the pipeline here.
          .pipe(uglify())
      .pipe(sourcemaps.write('./'))
      .pipe(gulp.dest(config.paths.dist + '/scripts'))
      .pipe(connect.reload())
});

gulp.task('lint', function(){
  return gulp.src(config.paths.js)
            .pipe(lint({config: 'eslint.config.json'}))
            .pipe(lint.format());
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM