无法加载 Angular 生产构建 - 由于不允许的 MIME 类型(“text/html”),加载模块被阻止

Posted

技术标签:

【中文标题】无法加载 Angular 生产构建 - 由于不允许的 MIME 类型(“text/html”),加载模块被阻止【英文标题】:Angular production build can't load - Loading module was blocked because of a disallowed MIME type (“text/html”) 【发布时间】:2020-05-23 02:11:02 【问题描述】:

我构建了运行 ng build --configuration=production 的应用程序并将其上传(通过 FTP 手动)到服务器(我尝试了两个不同的)。像 myurl.com 这样访问根目录可以正常工作,但是每当我想直接访问子页面时,例如 myurl.com/subpage 页面都是空白的,并且出现以下错误: Loading module from “https://myurl.com/runtime-es2015.js” was blocked because of a disallowed MIME type (“text/html”). polyfills-es2015.js、main-es2015.js 也有同样的错误

如果我访问根目录并导航到子页面,一切正常。

到目前为止,我一直在尝试:

在 index.html 中设置 <base href=".">

在 tsconfig.json 中设置 "target": "es5"

手动将脚本类型从type="module"更改为type="text/javascript" 喜欢这里:<script src="runtime-es2015.js" type="text/javascript">

Angular CLI 和 Angular 版本8.1

打字稿版本3.4.5

Webpack 版本4.35.2

在服务器上,我还需要一个 .htaccess 文件,否则访问 myurl.com/subpage 会导致 404

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.html [L]
</IfModule>

如果有人可以帮助我,我将非常感激。

编辑 在 ng serve 期间访问“子页面”可以正常工作!

编辑2 在浏览器的开发控制台中检查“网络”选项卡时,对 .js 文件的 GET 请求工作正常,但类型错误(html)。 如果我加载根页面 (myurl.com),则 mime-type 是正确的。

【问题讨论】:

我遇到了同样的问题,我已经提到了我是如何解决的。有一个类似的帖子。请参考这篇帖子***.com/a/62226117/12080473 有时控制台中的错误消息会误导问题的实际原因。 【参考方案1】:

我在部署到 https://host.my/app 的 Angular 应用程序中遇到了类似的问题。正如other SO answer 中提到的那样,改变了

&lt;base href="/"&gt;

&lt;base href="./"&gt;

为我解决了。只是将其设置为 &lt;base href="."&gt; 没有。

HTH

【讨论】:

以上是关于无法加载 Angular 生产构建 - 由于不允许的 MIME 类型(“text/html”),加载模块被阻止的主要内容,如果未能解决你的问题,请参考以下文章

由于某些库,无法构建 Angular 应用程序的 prod 版本

生产构建后重新加载Angular 6应用程序中断

Angular - 无法加载模块脚本:

生产构建中的 Angular 问题,但在本地开发中没有。错误类型错误:无法读取未定义的属性“调用”

由于不允许的 MIME 类型,无法加载模块脚本

电子 - 不允许加载本地资源