You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Angular 6升级后出现MIME类型错误:text/html不可执行

解决Angular 6升级后script引入文件的MIME类型错误问题

我来帮你搞定这个问题!之前升级Angular CLI到6版本时也碰到过一模一样的情况,这是因为Angular 6之后CLI的资源处理逻辑有了调整,加上Chrome严格的MIME类型检查,才触发了这个错误。下面是一步步的解决方法:

1. 先排查文件路径是否正确

这个错误最常见的原因是你script标签里的路径写错了,导致服务器没有返回JS文件,而是返回了HTML页面(比如404错误页),它的MIME类型是text/html,自然无法被当作脚本执行。

  • 打开Chrome开发者工具的Network标签
  • 刷新页面,找到你引入的那个脚本请求
  • 查看响应头里的Content-Type,如果是text/html,说明路径肯定有问题,赶紧修正路径指向正确的JS文件

2. 配置Angular CLI的部署路径

Angular 6默认的打包路径是绝对路径,如果你不是把dist文件夹放到服务器根目录,就会导致资源请求错误。可以通过两种方式配置:

方式一:构建时添加参数

执行构建命令时加上--deploy-url参数,指定相对路径:

ng build --deploy-url ./

方式二:修改angular.json配置

打开项目根目录的angular.json,找到projects -> [你的项目名] -> architect -> build -> options,添加deployUrl配置:

"options": {
  // 其他配置...
  "deployUrl": "./"
}

这个配置会让生成的所有资源文件都使用相对路径,避免路径错误导致请求到HTML页面。

3. 检查服务器的MIME类型配置

如果你的项目部署在自定义服务器(比如Nginx、Express)上,要确保服务器能正确识别JS文件的MIME类型:

Nginx配置示例

在Nginx的配置文件里添加或确保存在以下配置:

types {
    application/javascript js;
}

Express配置示例

Express的express.static中间件默认会正确设置MIME类型,但如果有自定义路由规则,要避免把JS文件的请求重定向到HTML页面。

4. 推荐:使用Angular CLI的标准部署方式

其实Angular项目最好的部署方式是直接把ng build生成的dist文件夹里的所有文件放到服务器的静态资源目录,然后直接访问index.html,而不是手动用script标签引入打包后的文件。因为Angular 6之后的打包文件有严格的加载顺序(比如runtime.jspolyfills.jsmain.js),手动引入很容易出错,而且CLI会自动处理资源路径和依赖关系。

按照上面的步骤操作,应该就能解决这个MIME类型错误了。如果还是有问题,可以再仔细检查Network面板里的请求详情,看看具体是哪个文件的响应出了问题。

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

火山引擎 最新活动