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

JS使用import时script设type=module报MIME类型错误死循环问题

问题原因

你遇到的MIME类型不匹配问题,本质是Python SimpleHTTPRequestHandler的MIME映射加载优先级问题:你在类外部调用update修改extensions_map的写法,在部分Python版本中会被类实例化时加载的系统默认MIME映射覆盖,哪怕你打印类属性显示配置正确,实际处理请求时仍然会返回系统识别到的text/plain类型。另外浏览器缓存、旧服务进程未关闭、文件扩展名被系统隐藏也是常见触发原因。

排查步骤
  • 先杀掉所有占用8000端口的进程,完全重启你写的Web服务,浏览器按Ctrl+Shift+R(Windows/Linux)或Cmd+Shift+R(Mac)硬刷新清缓存,排除旧进程、缓存导致的配置不生效问题。
  • 打开浏览器开发者工具的「网络」面板,找到main.js的请求,查看响应头的Content-Type字段,确认实际返回的类型值,同时确认请求路径没有写错、没有返回404/其他错误页面。
  • 关闭系统的「隐藏已知文件扩展名」选项,检查scripts目录下的JS文件实际后缀,排除main.js.txt这类假后缀问题——如果文件实际是txt格式,服务器必然返回text/plain。
修复代码

直接在自定义Handler类内部显式定义extensions_map类属性,从根源避免默认配置覆盖,推荐使用规范要求的application/javascript作为JS文件的MIME类型,兼容ES模块的严格校验:

import http.server
import socketserver

PORT = 8000
# 替换为你存放HTML文件的实际目录路径
WEB_ROOT = "PATH_TO_HTML_FILE"

class CustomHandler(http.server.SimpleHTTPRequestHandler):
    # 类内部固定MIME映射,优先级高于系统默认配置
    extensions_map = {
        ".html": "text/html",
        ".css": "text/css",
        ".js": "application/javascript",
        ".mjs": "application/javascript",
        ".json": "application/json",
        ".png": "image/png",
        ".jpg": "image/jpeg",
        ".gif": "image/gif",
        ".svg": "image/svg+xml",
        "": "application/octet-stream"
    }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory=WEB_ROOT, **kwargs)

if __name__ == "__main__":
    with socketserver.TCPServer(("localhost", PORT), CustomHandler) as httpd:
        print(f"服务已启动,访问地址:http://localhost:{PORT}")
        httpd.serve_forever()
补充说明
  • 你的package.json里配置"type": "module"是Node.js环境的配置,对浏览器端运行的ES模块、Python搭建的Web服务没有任何影响,不需要修改。
  • 只要服务端正确返回JS类型的MIME头,<script type="module">就可以正常工作,import语法也能正常使用,不存在两难问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:27:12