React,Babel,Webpack无法解析jsx,意外的令牌错误[重复]

问题描述 投票:1回答:1

这个问题已经在这里有了答案:

我正在尝试使用wepback构建我的应用,并陷入这种unexpected token错误。 我项目的所有依赖关系都很好,并且最新,我在其他地方使用了同一个项目,并且正在构建中,但是当我尝试构建当前代码相同时,它给出了错误,下面是config.js和错误说明

这是我的app.jsx

import React                from 'react';
import ReactDOM             from 'react-dom';
import {Router}             from 'react-router';
import Routes               from '../routes/routes';
import injectTapEventPlugin from 'react-tap-event-plugin';
import { browserHistory }   from 'react-router';

require('../Config');

injectTapEventPlugin();

window.EventEmitter = {
    _events: {},
    dispatch: function (event, data, returnFirstResult) {
        if (!this._events[event]) return;
        for (var i = 0; i < this._events[event].length; i++)
        {
            if(this._events[event][i])
            {
                var r = this._events[event][i](data);

                if(returnFirstResult)   
                    return r;
            }
        }
    },
    subscribe: function (event, callback, onlyOne) {
        if (!this._events[event] || onlyOne) this._events[event] = []; // new event
        this._events[event].push(callback);
    }
};

// Render the main app react component into the app div.
// For more details see: https://facebook.github.io/react/docs/top-level-api.html#react.render
ReactDOM.render(<Router history={browserHistory}>{Routes}</Router>, document.getElementById('app'));

这是我的config.js

var webpack = require('webpack');
var path = require('path');
var buildPath = path.resolve(__dirname, '../project/public/js/');
var nodeModulesPath = path.resolve(__dirname, 'node_modules');
var TransferWebpackPlugin = require('transfer-webpack-plugin');

var config = {
    entry: {
        app: path.join(__dirname, '/app/entry_points/app.jsx'),
        vendor: ['react', 'radium'],
    },
    resolve: {
        extensions: ["", ".js", ".jsx"]
    },

    devtool: 'source-map',
    output: {
        path: buildPath,
        publicPath: '/js/',
        filename: 'mobile.[name].js' 
    },
    plugins: [
        new webpack.optimize.CommonsChunkPlugin("vendor", "mobile.vendor.js"),
        new webpack.DefinePlugin({}),
        new webpack.NoErrorsPlugin(),
    ],
    module: {
        preLoaders: [
            {
                test: /\.(js|jsx)$/,
                loader: 'eslint-loader',
                include: [path.resolve(__dirname, "src/app")],
                exclude: [nodeModulesPath]
            },
        ],
        loaders: [
            {
                test: /\.(js|jsx)$/,
                loaders: [
                    'babel-loader'
                ],
                exclude: [nodeModulesPath]
            },
            {
                test: /\.css$/,
                loader: "style-loader!css-loader"
            },
        ]
    },
    eslint: {
        configFile: '.eslintrc'
    },
};

module.exports = config;

这是我尝试构建时遇到的错误:

ERROR in ./app/entry_points/app.jsx
Module build failed: SyntaxError: /home/zeus/Glide/project/project-mobile/app/entry_points/app.jsx: Unexpected token (46:16)
  44 | // Render the main app react component into the app div.
  45 | // For more details see: https://facebook.github.io/react/docs/top-level-api.html#react.render
> 46 | ReactDOM.render(<Router history={browserHistory}>{Routes}</Router>, document.getElementById('app'));
     |                 ^

我正在使用react v0.14.8react-dom v0.14.8babel-loader ^6.2.1

reactjs webpack babeljs react-dom
1个回答
7
投票

我相信您需要使用babel指定预设并安装npm模块babel-preset-react

loaders: [
        {
            test: /\.(js|jsx)$/,
            loaders: [
                'babel-loader'
            ],
            exclude: [nodeModulesPath],
            query: {
              presets: ['react']
            }
        },
        ...
    ]

您还想将es2015添加到该预设数组中。

© www.soinside.com 2019 - 2024. All rights reserved.