【发布时间】:2016-01-07 00:54:27
【问题描述】:
我正在使用 browserify-rails + babelify 在 react + rails 项目中转译 jsx。
我很困惑为什么在 components.js(这是 react 的安装点)中需要 // require(''); 才能使 jsx 转译工作。
如果我删除注释// require(''); 行,我会得到“SyntaxError: Unexpected token import”
目前我没有线索,为什么一行评论会影响转译。我也很困惑这是否是 react、babelify、browserify、browserify-rails 或 rails 资产管道的问题。
完整代码库请参考https://github.com/sidazhou/react_rails_skeleton/tree/v0.0.1
components.js
// require(''); // somehow this is necessary, why?! Otherwise we get: "SyntaxError: Unexpected token import"
import React from 'react';
import ReactDOM from 'react-dom';
import Widgets from './components/Widgets.jsx';
ReactDOM.render( <Widgets />, document.getElementById('react_component') );
package.json
{
"name": "react-sample",
"dependencies": {
"babel-preset-es2015": "^6.3.13",
"babel-preset-react": "^6.3.13",
"babelify": "^7.2.0",
"browserify": "^12.0.1",
"browserify-incremental": "^3.0.1",
"history": "^1.13.1",
"material-ui": "^0.13.4",
"react": "^0.14.3",
"react-dom": "^0.14.3",
"react-router": "^1.0.2",
"react-tap-event-plugin": "^0.2.1"
},
"engines": {
"node": ">= 0.10"
}
}
application.rb
config.browserify_rails.commandline_options = "-t [ babelify --presets [ es2015 react ] ]"
【问题讨论】:
-
如果可以的话,您介意尝试更新版本的 babel 吗?他们从 6.3.13 开始修改了解析器,我想知道它是否能解决您的问题。
-
使用
{"babel-preset-es2015": "^6.5.0", "babel-preset-react": "^6.5.0"}没有帮助 -
空行也可以吗?还是唯一有效的注释掉
require('');? -
空白行不起作用,
// rquire('');不起作用,// require()起作用。感觉越来越像是解析器在某个地方出错了。 -
我想说,在文件被传递给 Babel 之前,它看起来像是在修改文件;我必须更多地研究它才能确定它。明天我可能有一些时间来全面了解它。
标签: ruby-on-rails reactjs ecmascript-6 babeljs browserify-rails