ReactJS模块构建失败:SyntaxError:意外的令牌 - ReactDOM.render

时间:2017-05-30 16:22:20

标签: javascript reactjs react-dom

为什么我在下面收到此错误?我的陈述ReactDOM.render(<App />, container);是100%合法的代码。

我的github回购:https://github.com/leongaban/react_starwars

enter image description here

app.js文件

import react from 'react'
import ReactDom from 'react-dom'
import App from 'components/App'

require('index.html');

// Create app
const container = document.getElementById('app-container');

// Render app
ReactDOM.render(<App />, container);

组件/应用程序文件

import React from 'react'

const App = () =>
  <div className='container'>
    <div className='row'>

    </div>
    <div className='row'>

    </div>
  </div>;

export default App; 

我的webpack.config

const webpack = require('webpack');
const path = require('path');

module.exports = {
entry: [
  './src/app.js'
],
output: {
  path: path.resolve(__dirname, './build'),
  filename: 'app.bundle.js',
},
module: {
  loaders: [
    {
      test: /\.html$/,
      loader: 'file-loader?name=[name].[ext]',
    },
    {
      test: /\.jsx?$/,
      exclude: /node_modules/,
      loader: 'babel-loader',
    },
  ],
},
plugins: [
  new webpack.NamedModulesPlugin(),
]
};

8 个答案:

答案 0 :(得分:14)

将此用作您的webpack配置文件

const webpack = require('webpack');
const path = require('path');

module.exports = {
    entry: [
        './src/app.js'
    ],
    output: {
        path: path.resolve(__dirname, './build'),
        filename: 'app.bundle.js',
    },
    module: {
        loaders: [
            {
                test: /\.html$/,
                loader: 'file-loader?name=[name].[ext]',
            },
            {
                test: /\.jsx?$/,
                exclude: /node_modules/,
                loader: 'babel-loader',
            query: {
                presets: ['es2015', 'react']
            }
        },
    ],
},
plugins: [
    new webpack.NamedModulesPlugin(),
]
};

您缺少预设

答案 1 :(得分:8)

我收到同样的错误,我只需要将.babelrc文件添加到项目的路径(与package.json相同的位置),其中包含以下内容:

{
    "presets": [
        "env", 
        "react"
    ],
    "plugins": [
        "transform-class-properties"
    ]
}

答案 2 :(得分:5)

为jsx语法安装babel-preset-react。

$ sudo find / -name wp-content

预设

npm install babel-preset-react

答案 3 :(得分:2)

在根文件夹中添加以下内容.babelrc,并确保它是“预设”而不是“预设”

{
    "presets" : ["@babel/preset-env", "@babel/preset-react"]
}

这是我的webpack.config.js供参考:

const path = require('path');
const webpack = require('webpack');

module.exports = {
    entry: './src/index.js',
    mode: 'development',
    module: {
        rules: [
            {
                test: /\.(js|jsx)$/,
                exclude: /(node_modules)/,
                loader: 'babel-loader',
                options: { presets: ["@babel/env"]}
            },
            {
                test: /\.css$/,
                use: ["style-loader", "css-loader"]
            }
        ]
    },
    resolve: { extensions: ['*', '.js', '.jsx']},
    output: {
        path: path.resolve(__dirname, 'dist/'),
        publicPath: '/dist/',
        filename: 'bundle.js'
    },
    devServer: {
        contentBase: path.join(__dirname, 'public/'),
        port: 3000,
        publicPath: 'http://localhost:3000/dist/',
        hotOnly: true
    },
    plugins: [new webpack.HotModuleReplacementPlugin()]
}

Babel-loader v8需要@babel v7才能工作 package.json

  "devDependencies": {
    "@babel/cli": "^7.10.4",
    "@babel/core": "^7.10.4",
    "@babel/preset-env": "^7.10.4",
    "@babel/preset-react": "^7.10.4",
    "babel-loader": "^8.1.0"}

答案 4 :(得分:1)

尝试将resolve属性添加到您的webpack配置文件中:

    resolve: {
        extensions: ['.js', '.jsx']
    },
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                exclude: /node_modules/,
                loaders: ["babel-loader"]
            }
        ]
    }

答案 5 :(得分:0)

如果有人正在使用CRA并收到此错误。解决方案就在这里。

转到package.json并添加babel配置。如果我看起来不太慷慨,则下面是代码

 "babel": {
        "presets": [
            "react-app"
        ]
 }

保持其余的CRA设置不变。实际上,CRA使用它自己的自定义预设react-app,这就是webpack.config.js文件中设置的内容。因此,不需要其他预设。

答案 6 :(得分:0)

或者您可以将预设保存在项目根目录下的.babelrc文件中。当然,您需要先安装它。

赞这个 /path/to/your/project/.babelrc

{ "presets": ["@babel/preset-env", "@babel/preset-react"] }

答案 7 :(得分:0)

我遇到了这个问题,以上答案均无济于事。

我有一个符号链接的文件夹-我的代码在D:/ Code上,但我是通过符号链接从C:/ Code运行的。

其中一个js软件包正在识别链接并尝试在D中运行而失败。

我不得不从D:而不是从符号链接路径打开代码,问题就消失了。