You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

layer0预览Nuxt3站点报Failed to load module script错误

复现步骤
  • 执行命令 npx nuxi init test
  • 执行命令 cd test
  • 执行命令 yarn install
  • 执行命令 NITRO_PRESET=layer0 yarn build 完成项目构建
  • 执行命令 cd .output 进入构建产物目录
  • 执行命令 npm run preview 启动预览服务
  • 浏览器访问 localhost:3000
  • 打开浏览器控制台查看报错
问题现象

控制台完整报错信息为:

error: Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.

排查发现服务端返回的mjs文件实际内容为HTML格式,初步判断为layer0搭配nitro server运行时错误返回非目标文件,导致模块脚本加载失败。

问题原因
  • layer0是Nitro为旧版Layer0(现已更名Edgio)平台提供的专属部署预设,所有路由规则、静态资源映射逻辑都是适配平台线上运行环境设计的。直接调用Nitro内置的preview命令启动服务时,不会加载预设内的平台专属静态资源匹配规则,.mjs等静态资源请求匹配不到对应文件时,会触发路由兜底逻辑返回入口index.html,最终触发MIME类型校验报错。
  • Nitro 2.0及以上版本已经停止维护旧的layer0预设,兼容逻辑缺失本身就会导致构建产物路径映射异常,无论本地预览还是线上部署都可能触发资源加载错误。
修复方案

对应不同场景直接按以下方式处理:

  • 仅本地验证构建可用性:构建时去掉NITRO_PRESET=layer0参数,直接执行yarn build完成构建后,进入.output目录执行npm run preview即可。默认的node-server预设适配本地preview服务,不会出现路由兜底错误。
  • 本地验证Layer0/Edgio部署效果:不要手动进入.output目录启动服务,在项目根目录安装Edgio CLI后,执行平台提供的本地模拟命令启动服务,会自动加载预设内的路由、MIME类型配置:
# 全局安装CLI
npm i -g @edgio/cli
# 初始化Edgio项目配置
0 init
# 启动本地平台模拟环境
0 dev
  • 线上部署仍出现该报错:在项目根目录的Edgio路由配置文件(通常为routes.js或routes.ts)中,补充静态资源精确匹配规则,避免静态资源请求被兜底到SSR服务入口:
import { Router } from '@edgio/core/router'

export default new Router()
  // 精准匹配Nuxt构建后的静态资源路径,直接返回对应文件
  .match('/_nuxt/:path*', ({ serveStatic }) => {
    serveStatic('.output/public/_nuxt/:path*')
  })
  // 其余所有请求交由Nitro服务处理
  .fallback(({ renderWithApp }) => renderWithApp())

同时将构建命令中的NITRO_PRESET=layer0替换为NITRO_PRESET=edgio,使用官方持续维护的最新预设,规避旧预设的兼容问题。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 06:03:37