为什么用“ – ”(短划线)给Babelify上的“Gulp”给出“意外的标记错误”?

我正在使用Browserify和Babelify设置(或实际上修改现有的)项目。 出于某种原因,我无法正确configuration我的gulp文件。 如果问题很重要的话,这个项目本身就是一个React项目。

我摆脱了大部分问题,但是现在我在Browserify上收到了“意外的令牌”错误。 它是由React组件或带有属性名称的html元素引起的。 下列:

<button type="button" data-toggle="collapse"> 

我的Browserify任务:

 gulp.task('browserify', function() { browserify('./src/js/main.js') .transform(babelify.configure({ presets: ["react", "es2015"] })) .bundle() .on('error', function(err){ process.stdout.write('' + err + '\n'); notifier.notify({ title: 'Error', message: err, sound: true, wait: true }, function (err, response) { }); }) .pipe(source('main.js')) .pipe(gulp.dest('dist/js')) .pipe(connect.reload()); }); 

的package.json:

 { "name": "srcd-mockup", "version": "1.0.0", "description": "", "main": "gulpfile.js", "dependencies": { "babel-preset-es2015": "^6.0.12", "bootstrap-sass": "^3.3.5", "browserify": "^11.2.0", "flux": "^2.1.1", "font-awesome": "^4.4.0", "gulp": "^3.9.0", "gulp-concat": "^2.6.0", "jquery": "^2.1.4", "lodash": "^3.10.1", "node-notifier": "^4.3.1", "react": "^0.14.1", "react-dom": "^0.14.1", "react-redux": "^4.0.0", "react-router-component": "^0.27.2", "reactify": "^1.1.1", "redux": "^3.0.4", "redux-logger": "^2.0.4", "updeep": "^0.10.1", "vinyl-source-stream": "^1.1.0" }, "devDependencies": { "babel-preset-react": "^6.0.12", "babelify": "^7.0.2", "gulp-connect": "^2.2.0", "gulp-notify": "^2.2.0", "gulp-sass": "^2.0.4", "gulp-uglify": "^1.4.1", "redux-devtools": "^2.1.5" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" } 

我之前所尝试的:

这里奇怪的是,以前我有类似的依赖项和configuration类似的项目,它工作正常。

然后我尝试设置新的,并且首先在main.js(React的初始渲染)的这一行上得到了意外的标记错误:

 ReactDOM.render(<App />, document.getElementById('main')); 

这个错误是由“(”)引起的,所以Babelify没有预设。

如果我只对预设有“反应”,我得到“ParseError:'导入'和'导出'可能只出现在”sourceType:模块“,因为,很好的导入。

问题:

  • 这与Babelify有关吗?还是可以由其他模块或依赖引起?
  • 这与Babel 6有关吗?
  • 为什么短跑导致错误?
  • 我应该如何设置?

似乎是Babel版本6.0.12中的一个bug,它将data-*标记呈现为对象键而不引用它们,导致无效的JS语法。

你可以使用Babel之前的v6版本,或者等待别人提交修复。

更新:

这个问题的解决方法刚刚进入回购,所以这将在下一个版本中解决。