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

多页React应用Webpack-dev-server访问/movies路由时组件不渲染且JSON报错

解决Webpack Dev Server下React多页应用/movies路由的JSON解析错误

这个Unexpected token < in JSON at position 0错误我太熟了——本质是你的代码把HTML内容当成JSON来解析了,大概率是webpack-dev-server的路由映射没配置对,导致访问/movies时返回的不是你预期的资源,而是HTML页面(比如根目录的index.html或者404页面)。下面是具体的排查和解决步骤:

1. 配置devServer的historyApiFallback规则

多页应用的路由需要让devServer明确不同路径对应哪个HTML文件,不然它会默认返回根页面。在你的webpack.config.js里添加如下配置:

module.exports = {
  // 其他已有配置...
  devServer: {
    hot: true,
    inline: true,
    port: 3000,
    historyApiFallback: {
      rewrites: [
        // 匹配/movies路径,返回对应的movies.html
        { from: /^\/movies$/, to: '/movies.html' },
        // 根路径返回主页面
        { from: /^\/$/, to: '/index.html' }
        // 其他页面路由同理添加对应规则
      ]
    }
  }
};

如果你的多页结构比较简单,也可以直接设置historyApiFallback: true,但精准的rewrite规则能避免不必要的路径冲突。

2. 检查Webpack的入口与输出配置

多页应用要确保每个页面都有独立的入口和打包文件,别共用一个bundle.js——你现在报错的bundle.js可能是主页面的打包文件,在/movies页面加载它会导致逻辑混乱,进而错误解析HTML为JSON。示例配置如下:

const path = require('path');

module.exports = {
  entry: {
    main: './src/index.js', // 主页面入口文件
    movies: './src/movies.js' // movies页面入口文件
  },
  output: {
    filename: '[name].bundle.js', // 输出main.bundle.js和movies.bundle.js
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/' // 确保所有资源从根路径加载,避免路由层级导致的路径错误
  },
  // 其他loader、plugin配置...
};

同时要在movies.html里引入movies.bundle.js,而不是主页面的bundle.js。

3. 修正API请求的路径

检查你movies组件里的JSON请求代码,别用相对路径!比如你要请求public/data/movies.json,必须写绝对路径/data/movies.json——如果写./movies.json,在/movies路由下会被解析成/movies/movies.json,这个路径不存在的话,devServer就会返回HTML,直接触发解析错误。

4. 快速排查小技巧

打开浏览器开发者工具的Network面板,刷新/movies页面:

  • 如果bundle.js(或movies页面的打包文件)返回的是带<html>标签的HTML,那就是路由映射的问题;
  • 如果是某个JSON请求返回了HTML,那就是请求路径写错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:27:29