You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac下React应用报SyntaxError: Unexpected token '<'问题求助

React应用启动报错:SyntaxError: Unexpected token '<'

问题描述

在Mac上开发React应用,期望正常显示home、login、signup页面,但终端抛出SyntaxError: Unexpected token '<'错误。

App.js代码

import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import './App.css';

//Pages
import home from './pages/home';
import login from './pages/login';
import signup from './pages/signup';


export class App extends Component {
  render() {
    return (
      <div className="App">
        <Router>
          <Switch>
            <Route exact path="/" component={home} />
            <Route exact path="/login" component={login} />
            <Route exact path="/signup" component={signup} />
          </Switch>
        </Router>
      </div>
    );
  }
}

export default App;

package.json配置

{
  "name": "business-continuity-client",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router-dom": "^5.3.4",
    "react-scripts": "^5.0.1",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "type": "module",
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ],
  "devDependencies": {
    "@babel/core": "^7.21.0",
    "@babel/preset-env": "^7.20.2",
    "@babel/preset-react": "^7.18.6",
    "@babel/standalone": "^7.21.2",
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.3"
  },
  "babel": {
    "presets": [
      "@babel/preset-env",
      "@babel/preset-react"
    ]
  }
}

错误栈信息

SyntaxError: Unexpected token '<'

at ESMLoader.moduleStrategy (node:internal/modules/esm/translators:119:18)

at ESMLoader.moduleProvider (node:internal/modules/esm/loader:468:14)

at async link (node:internal/modules/esm/module_job:68:21)

解决建议

1. 移除"type": "module"配置

Create React App默认使用CommonJS模块系统,你在package.json中添加的"type": "module"会让Node.js以ES模块方式解析文件,和CRA的构建流程冲突,导致无法正确编译JSX中的<符号,直接删除这一行即可。

2. 清理冗余Babel配置

CRA已经内置了完整的Babel配置,手动添加的顶层"presets"字段、devDependencies中的babel相关包(如@babel/core、babel-cli等)都是多余的,还可能引发版本冲突:

  • 删除package.json中的顶层"presets"字段
  • 删除devDependencies下所有babel相关依赖
  • 保留"babel"字段没问题,若后续仍有问题,也可暂时移除,使用CRA默认配置

3. 检查页面组件的导出与命名

  • 确保./pages/home等组件文件是默认导出,示例:
// pages/home.jsx
import React from 'react';

const Home = () => {
  return <div>Home Page</div>;
};

export default Home;
  • React组件命名需首字母大写,建议把App.js中的导入改为import Home from './pages/home';,对应Route的component={Home},符合规范同时避免潜在问题。

4. 清除缓存并重启项目

执行以下命令清理依赖缓存,再重启开发服务:

rm -rf node_modules
rm package-lock.json
npm install
npm start

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:44:56