使用 webpack+react构建前端项目,babel编译 jsx失败,请问为什么

webpack.config.js

var path = require('path');
var node_modules = path.resolve(__dirname, 'node_modules');
var pathToReact = path.resolve(node_modules, 'react/dist/react.min.js');

var config = {
  entry: ['webpack/hot/dev-server', path.resolve(__dirname, './app/main.js')],
  resolve: {
    alias: {
      'react': pathToReact
    }
  },
  output: {
    path: path.resolve(__dirname, './build'),
    filename: 'bundle.js'
  },
  module: {
    noParse: [pathToReact],
    loaders: [{
      test: /\.jsx?$/,
      loader: 'babel'
    }, {
      test: /\.css$/,
      loader: 'style!css'
    }, {
      test: /\.less$/,
      loader: 'style!css!less'
    },{ 
      test: /\.(png|jpg)$/, 
      loader: 'url?limit=25000' 
    }]
  }
};

module.exports = config;

package.json

{
  "name": "react",
  "version": "2.0.0",
  "dec": "this is a biz rep",
  "main": "app/main.js",
  "devDependencies": {
    "babel-cli": "^6.16.0",
    "babel-loader": "^6.2.5",
    "babel-preset-es2015": "^6.16.0",
    "babel-preset-react": "^6.16.0",
    "css-loader": "^0.25.0",
    "file-loader": "^0.9.0",
    "less": "^2.7.1",
    "less-loader": "^2.2.3",
    "react": "^0.14.8",
    "react-dom": "^0.14.8",
    "react-hot-loader": "^3.0.0-beta.6",
    "react-router": "^2.4.1",
    "style-loader": "^0.13.1",
    "url-loader": "^0.5.7",
    "webpack": "^1.13.2",
    "webpack-dev-server": "^1.16.2"
  },
  "dependencies": {
    "jsx-loader": "^0.13.2"
  },
  "pre-commit": [],
  "scripts": {
    "build": "webpack",
    "dev": "webpack-dev-server --devtool eval --progress --colors --content-base build"
  }
}

jsx 代码

import React from 'react';
import ReactDOM from 'react-dom';
var AppComponent = React.createClass({
  render: function(){
    return (<main>Most Popular JavaScript </main>);
  }
});

ReactDOM.render(<AppComponent />, document.getElementById('content'));

报错信息图:

clipboard.png

请大神帮忙看看,好纠结,就是个搞不好它,~~(>_<)~~

阅读 6k
5 个回答

jsx的loader需要加参数才能识别jsx语法,如下

loaders: [{
      test: /\.jsx?$/,
      loader: 'babel?presets[]=es2015&presets[]=react'
    }]

<main>这个是什么标签?

你的main.js是什么 是不是应该改成main.jsx

把main改成div

react不支持自定义标签,你的main不属于dom,所以react会报错

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题