React - 模块解析失败:意外的标记。您可能需要一个适当的加载器来处理此文件类型。

24

这是我第一次使用React,所以如果我做了一些明显的错误,请原谅。尽管如此,我已经阅读了这里和GitHub上的几个类似的错误,并且找不到适用于我的解决方案。以下是完整的错误消息:

ERROR in ./src/frontend/src/components/App.js 6:15
Module parse failed: Unexpected token (6:15)
You may need an appropriate loader to handle this file type.
| class App extends Component{
|     render() {
>         return <h1>React App</h1>
|     }
| }
 @ ./src/frontend/src/index.js 1:0-35

那个错误信息的完整代码:

import React, { Component } from 'react';
import ReactDOM from 'react-dom';

class App extends Component{
    render() {
        return <h1>React App</h1>
    }
}

ReactDOM.render(<App />, document.getElementById('app'));

我感觉我的webpack-config.js出了问题,但我是直接从一个教程中复制的,所以不确定为什么会出错。这是参考:

module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      }
    ]
  }
}

这里是我的 package.json 中的依赖项:

"dependencies": {
    "prop-types": "^15.7.2",
    "react": "^16.13.1",
    "react-dom": "^16.13.1"
  },

最后是我的 .babelrc 文件。

{
    "presets": ["@babel/preset-env","@babel/preset-react"],
    "plugins": ["transform-class-properties".js]
}

我真的不知道发生了什么,所以非常感谢任何帮助。如果我遗漏了任何相关信息,请告诉我,这样可能会有帮助。谢谢。

2个回答

9
错误来自于这行代码:return <h1>React App</h1>,因为<h1>...</h1>不是有效的javascript代码。即使将它重命名为.jsx,也会被解析成普通的js而非jsx,因为你的webpack-config.js文件存在问题,所以有多个事情需要修复:
  1. App.js重命名为App.jsx
  2. webpack-config.js中将test: /\.js$/,更新为test: /\.(js|jsx)$/,
  3. 我认为你的.babelrc文件中也存在错误:在"transform-class-properties"后面不需要加上.js
  4. webpack-config.js重命名为webpack.config.js
这里有一篇教程展示了如何进行修复:https://www.valentinog.com/blog/babel/。此外,你可以使用https://github.com/facebook/create-react-app简化所有操作并提供出色的起始配置。

非常感谢。按照那些步骤修复了我发布的错误。但是下一行代码现在生成了相同的错误: ReactDOM.render(<App />, document.getElementById('app')); 如果您对此发生的原因有任何见解,我将不胜感激。否则,感谢您的帮助。 - paul45
你能否更新问题并提供新的错误信息?它是否与之前的错误完全相同,只是指向不同的行? - Porcellus
我找到了错误。我把webpack配置文件命名为“webpack-config.js”,但实际上应该是“webpack.config.js”。这真的太愚蠢了,但至少一旦我意识到问题,就很容易解决了。感谢您的帮助。 - paul45
很高兴它起作用了,并将其添加到我的答案中以保持信息有序。如果一切都正常,您可以接受它作为答案吗? - Porcellus

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接