reactjs MIME类型('text/html')不可执行,并且启用了严格的MIME类型检查

bbmckpt7  于 2023-01-04  发布在  React
关注(0)|答案(7)|浏览(237)

拒绝执行“http://localhost:8080/edit/bundle.js”中的脚本,因为其MIME类型(“text/html”)不可执行,并且启用了严格的MIME类型检查。
我正在使用react-router,在使用时出现此错误

<Route path="/edit/:id" component={EditExpensePage} />

只使用/edit就可以正常工作,但在/edit/:id上会出现错误。我不明白为什么会发生这种情况。下面是这些文件:这是AppRouter文件。

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Route, Switch, Link, NavLink } from 'react-router-dom';
import Header from './../components/Header';
import ExpenseDashboardPage from './../components/ExpenseDashboardPage';
import AddExpenses from './../components/AddExpensePage';
import EditExpensePage from './../components/EditExpensePage';
import NotFoundPage from './../components/NotFoundPage';
import HelpPage from './../components/HelpPage';

const AppRouter = () => (
  <BrowserRouter>
  <div>
    <Header />
    <Switch>
      <Route path="/" component={ExpenseDashboardPage} exact={true} />
      <Route path="/create" component={AddExpenses} />
      <Route path="/edit/:id" component={EditExpensePage} />
      <Route path="/help" component={HelpPage} />
      <Route component={NotFoundPage} />
    </Switch>
  </div>
</BrowserRouter>
);

export default AppRouter;

这是EditExpenses文件:

import React from 'react';

const EditExpensePage = (props) => {
  console.log(props);
  return (
    <div>
      <p>Edit your expenses Here</p>
    </div>
  );  
}

export default EditExpensePage;

下面是我的Webpack配置文件:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/app.js',
  output: {
    path: path.join(__dirname, 'public'),
    filename: 'bundle.js'
  },
  module: {
    rules: [{
    test: /\.js$/,
    exclude: /node_modules/,
    use: {
      loader: 'babel-loader'
      }
    }, {
      test: /\.s?css$/,
      use: [
        'style-loader',
        'css-loader',
        'sass-loader'
      ]
    }]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html'
    })
  ],
  devtool: 'cheap-module-eval-source-map',
  devServer: {
    historyApiFallback: true
  }
}

以及新的HtmlWebpackPlugin生成的index.html文件

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Expensify</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <div id="app"></div>
  <script type="text/javascript" src="bundle.js"></script>
</body>
</html>

请帮助我解决此问题。

au9on6nz

au9on6nz1#

你换吧

<script type="text/javascript" src="bundle.js"></script>

<script type="text/javascript" src="/bundle.js"></script>
7qhs6swi

7qhs6swi2#

在webpack.config.js的输出中添加公共路径可以正常工作:

output: {
      path: `${__dirname}/dist`,
      filename: 'bundle.js',
      publicPath: '/',
    }
s6fujrry

s6fujrry3#

检查DevTools中的网络选项卡,查看以text/html返回的所请求网络资产的路径,然后尝试在常规Web浏览器中加载它。
在我的情况下,这是一个错误消息,而不是javascript回来,因此错误的mimeType。
由于另一个原因(在我的例子中是TypesScript错误),bundle构建失败,devServer返回了一个错误,而不是应用程序所期望的js文件。

eeq64g8w

eeq64g8w4#

尝试更改webpack.config.js并添加公共路径

output: {
   path: path.join(__dirname, 'public'),
   filename: 'bundle.js',
   publicPath: '/',        
}
0kjbasz6

0kjbasz65#

FWIW,我也有这个错误(我使用Angular ).在我的情况下,这是因为HTML文件试图加载JS文件,它不再存在-因此实际返回的内容是根HTML页面,而不是JS文件(因为使用Angular 散列路由).
这是由于浏览器使用旧的缓存HTML文件-它指向一个捆绑的JS文件(即main.ABCD1234.js),这是从旧的建设,因此真的不在我的托管网站。
我的解决方案是让浏览器下载指向正确JS文件的最新HTML文件:)。

3phpmpom

3phpmpom6#

可能是由于许多不同的问题,我的解决了这个(即使这是不需要在我的其他应用程序...)loading a bundle.js file from webpack changes mime type to text/html

5w9g7ksd

5w9g7ksd7#

尝试

"homepage": ".",

create-react-app文档中所述,位于package.json内部。
附言:也许我的回答晚了,但希望对那些还不能解决问题的人有用

相关问题