当我尝试使用 React 编译以下代码时,出现以下错误。我在如此简单的程序中没有看到问题,并且当我克隆 git 存储库时,示例代码可以正确编译。
main.js:
import React from 'react';
import HelloWorld from './components/helloworld';
//import HelloWorld from './hello-world-es5';
React.render(
<HelloWorld phrase="ES6"/>,
document.body
);
Hello World :
import React from 'react';
class HelloWorld extends React.Component {
render() {
return <h1>Hello from {this.props.phrase}!</h1>;
}
}
export default HelloWorld;
错误:
SyntaxError: /Users/**/**/**/**/js/main.js: Unexpected token (7:4)
5 |
6 | ReactDOM.render(
> 7 | <HelloWorld phrase="ES6"/>,
| ^
8 | document.body
9 | );
at Parser.pp.raise
Process finished with exit code 1
最佳答案
我在使用最新版本的 babelify、browserify 和 React 时遇到了这个问题。您需要为最新版本的 babelify 指定预设配置。一个 es6 gulp 任务可能看起来像这样:
'use strict';
import browserify from 'browserify';
import babelify from 'babelify';
import reactPreset from 'babel-preset-react';
import es2015Preset from 'babel-preset-es2015';
import source from 'vinyl-source-stream';
import buffer from 'vinyl-buffer';
import gulp from 'gulp';
import gutil from 'gulp-util';
import uglify from 'gulp-uglify';
import sourcemaps from 'gulp-sourcemaps';
import config from '../config'; //externalized json config file
gulp.task('compile', function () {
var b = browserify({
entries: config.entries,
debug: true,
transform: [babelify.configure({'presets': [reactPreset, es2015Preset]})]
});
return b.bundle()
.pipe(source(config.source))
.pipe(buffer())
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(uglify())
.on('error', gutil.log)
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(config.dest));
});
请注意,browserify 正在传递一个配置对象,该对象包含 Transform 属性,用于包含也使用对象进行配置的 babelify 转换。 babelify 配置对象包含预设。您还应该 npm 安装您想要使用的预设。您可以在 https://github.com/babel/babelify#options 阅读更多相关信息。 .
我注意到的另一件事是你没有提到你的 Reactjs 版本。最新的是 0.14.2,它比 0.13.3 进行了一些重大更改。使用最新版本,您还需要react-dom并将其用作组件到DOM的挂载点。
关于javascript - ES6中使用Gulp编译React时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33429119/