由于不允许的 MIME 类型(“text/html”)而被阻止:部署在 tomcat 9.0.30 上的 Angular 8 无法提供资产

新手上路,请多包涵

我有一个项目,其中用户界面基于 Angular 8,后端是 springboot java 服务。整个项目是一个多模块项目,角度部分是一个单独的模块, front-end builder 用于将角度代码构建到单个可执行 jar 中。使用嵌入式 tomcat 时应用程序运行良好。我有一个新要求,要尝试在外部 tomcat 上单独部署 angular ui 部分。但是当我将 dist 文件夹复制到 webapps 文件夹并尝试提供它时,浏览器会阻止请求说:

 Loading module from “http://localhost:8080/polyfills-es2015.js” was blocked because of a disallowed MIME type (“text/html”).

浏览器截图

在做了一些谷歌搜索后,我了解到问题的发生是因为 angular 8 cli 无法将 type 属性添加到 --- 中的 index.html script 标记。当我手动添加类型时,一切正常。任何人都可以帮助我理解为什么会发生这种情况,以及除了手动编辑之外的可能解决问题的方法。

生成 index.html

 <!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <title>My Application</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <i class="fas fa-chart-area"></i>
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>

<body style="margin: 0;">
  <app-root></app-root>
<script src="runtime-es2015.js" type="module"></script><script src="runtime-es5.js" nomodule defer></script><script src="polyfills-es5.js" nomodule defer></script><script src="polyfills-es2015.js" type="module"></script><script src="styles-es2015.js" type="module"></script><script src="styles-es5.js" nomodule defer></script><script src="scripts.js" defer></script><script src="vendor-es2015.js" type="module"></script><script src="vendor-es5.js" nomodule defer></script><script src="main-es2015.js" type="module"></script><script src="main-es5.js" nomodule defer></script></body>

</html>

因此,总结所有有效的方法,如下所示:

  • type 属性在 HTML5 中不再是强制性的,因此 Angular cli 不再将其添加为属性。在嵌入式 tomcat 中,资产被复制到 ROOT 完美地工作,当我部署在外部 tomcat 中时,我将资产保存在 webapps 的文件夹下,这意味着我必须修改 baseHref 字段(在使用命令构建期间或手动构建之后)反映相同。以下作品:
  • 将资产保存在 webapps 中的 ROOT 文件夹下(一切正常,因为 js 文件现在位于根目录 / 下)。
  • 将文件保存在文件夹下,例如 MyApp 并在 --- baseHref index.html

相关 链接

原文由 Ananthapadmanabhan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答
 <base href="/">

是问题,将其更改为您的上下文根。或将其更改为

<base href=".">

浏览器无法找到您的 JS 文件,因为它会查找相对于基本 href 的 JS 文件。

您的 base href=“/” ,因此它会在“localhost:8080/”中查找所有 js 文件,但您的 JS 文件可能已存在于“localhost:8080/someRoot”中

您可以想到的另一种解决方案是,在没有上下文 root 的情况下部署在 tomcat 的 ROOT 文件夹中,如果您的项目允许这样做的话

原文由 aravind 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏