ReactJS中的语法错误

SBe*_*Bel 2 javascript reactjs

我开始学习ReactJS,我正在按照入门书中的说明进行操作.我的目录结构如下所示:

app/App.js
node_modules
index.html
package.json
webpack.config.js
Run Code Online (Sandbox Code Playgroud)

我认为问题的罪魁祸首是来自CLI的此错误消息:

ERROR in ./app/App.js
Module build failed: SyntaxError: c:/code/pro-react/my-app/app/App.js: Unexpected token (6:6)
  4 |   render() {
  5 |     return (
> 6 |       <h1>Hello World</h1>
    |       ^
  7 |     );
  8 |   }
  9 | }
Run Code Online (Sandbox Code Playgroud)

内容App.js是:

import React from 'react';

class Hello extends React.Component {
  render() {
    return (
      <h1>Hello World</h1>
    );
  }
}

React.render(<Hello />, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)

这是以下内容package.json:

{
  "name": "my-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node_modules/.bin/webpack-dev-server --progress",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.4.5",
    "babel-loader": "^6.2.1",
    "webpack": "^1.12.11",
    "webpack-dev-server": "^1.14.1"
  },
  "dependencies": {
    "react": "^0.14.6"
  }
}
Run Code Online (Sandbox Code Playgroud)

而且内容webpack.config.js是:

module.exports = {
  entry: __dirname + "/app/App.js",
  output: {
    path: __dirname,
    filename: "bundle.js"
  },
  module: {
    loaders: [{
      test: /\.jsx?$/,
      loader: 'babel'
    }]
  }
};
Run Code Online (Sandbox Code Playgroud)

我使用以下命令从CLI启动应用程序:

npm start
Run Code Online (Sandbox Code Playgroud)

当我进入http://localhost:8080Dev Tools时,会出现一条错误消息:

GET http://localhost:8080/bundle.js 404 (Not Found)
Run Code Online (Sandbox Code Playgroud)

但正如我所说,我认为罪魁祸首是它不喜欢语法,因此它不会生成bundle.js文件.请让我知道我做错了什么.

Ale*_* T. 6

我想这是因为使用的是babel-6没有babel presets,在这种情况下,你需要babel-preset-es2015babel-preset-react,

# For ES6/ES2015 support
npm install babel-preset-es2015 --save-dev

# Fot JSX support
npm install babel-preset-react --save-dev
Run Code Online (Sandbox Code Playgroud)

然后改变webpack配置

{
  test: /\.jsx?$/,
  loader: 'babel',
  query: {
    presets: ['es2015', 'react'],
  }
}
Run Code Online (Sandbox Code Playgroud)

或者代替使用query您可以创建.babelrc包含内容的文件

{
  "presets": ["es2015", "react"]
}
Run Code Online (Sandbox Code Playgroud)

你还需要安装react-dom和使用ReactDOM.renderinstaed或React.render