Uncaught SyntaxError: Unexpected token ‘<’ 报错,页面停留时间久了 ,就白屏了,这个怎么解决
Uncaught SyntaxError: Unexpected token '<' 错误通常表明您的应用程序试图解析一个非 JavaScript 文件作为 JavaScript 文件,通常是因为找不到请求的资源。这个错误经常发生在使用 React Router 或其他 SPA(单页应用程序)框架时,刷新或直接访问一个路径导致服务器未正确处理该路径。
Uncaught SyntaxError: Unexpected token '<'
当用户直接访问非根路径(如 /about)时,服务器没有正确返回 index.html 文件,而是返回了 404 页面或其他 HTML 文件。这会导致浏览器试图解析 HTML 文件作为 JavaScript 文件,从而报错。
/about
index.html
webpack-dev-server 配置问题:
webpack-dev-server
如果您使用的是 Express.js 服务器,确保配置如下:
const express = require('express'); const path = require('path'); const app = express(); // Serve static files from the React app app.use(express.static(path.join(__dirname, 'public'))); // The "catchall" handler: for any request that doesn't match the above, send back index.html app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'index.html')); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); });
确保 webpack-dev-server 配置正确处理所有路由:
const webpack = require('webpack'); const WebpackDevServer = require('webpack-dev-server'); const path = require('path'); const config = require('./webpack.config.js'); const compiler = webpack(config); const server = new WebpackDevServer(compiler, { contentBase: path.join(__dirname, 'public'), historyApiFallback: true, // This is the key line proxy: { '/graphql': `http://localhost:${GRAPHQL_PORT}` }, publicPath: '/js/', stats: { colors: true }, }); server.listen(3000, 'localhost', () => { console.log('webpack-dev-server is running on port 3000'); });
确保 webpack 配置中的 output.publicPath 设置正确:
output.publicPath
const path = require('path'); module.exports = { entry: ['whatwg-fetch', path.resolve(__dirname, 'js', 'app.js')], module: { rules: [ { exclude: /node_modules/, test: /\.js$/, use: 'babel-loader', }, ], }, output: { filename: 'app.js', path: path.resolve(__dirname, 'public', 'js'), // Ensure this points to the correct directory publicPath: '/js/', }, devServer: { contentBase: path.join(__dirname, 'public'), historyApiFallback: true, // This is the key line }, };
通过正确配置服务器和 webpack-dev-server,可以确保所有非根路径请求都返回 index.html 文件,从而避免 Uncaught SyntaxError: Unexpected token '<' 错误。这对使用 React Router 的单页应用程序尤其重要。通过这些配置,您的应用程序将能够正确处理刷新和直接访问任意路径。