【问题标题】:How can I use ES6 modules on python http.server?如何在 python http.server 上使用 ES6 模块?
【发布时间】:2020-11-19 19:42:35
【问题描述】:

我在index.html 中实例化一个模块:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Hello Module</title>
  </head>
  <body>
    <script type="module" src="./index.js"></script>
  </body>
</html>

index.js 为空。

当我通过 py -3 -m http.server (Python 3.8.5) 提供此服务时,我收到 Chrome 错误:

Failed to load module script: The server responded with a non-JavaScript MIME type of "text/plain". Strict MIME type checking is enforced for module scripts per HTML spec.

我已阅读此错误的含义。我不知道如何配置 http.server 因为在此之前它对我来说是一个黑匣子。我是否已经过了 Python 的默认 (?) 服务器有用的点?

【问题讨论】:

  • 请给我们看一下服务器代码。
  • 请参阅 Python 问题跟踪器上的 issue35403 - 根据解决方案,您可能需要使用 Python 3.8。
  • @AKX 这就是我的困惑;我不知道 http.server 的代码在哪里或是什么。
  • 不,请出示您使用http.server的代码。
  • @AKX 好的,我的问题现在更彻底了。

标签: javascript python server


【解决方案1】:

JavaScript 应该使用内容类型text/javascript

The default http.server.SimpleHTTPRequestHandler handler 可能没有(因为可以从 Windows 注册表中读取映射)具有 .js 扩展名到文件类型的映射,或者它可能是错误的(从 text/plain 可以看出)。

您需要编写自己的短脚本来修补 .js 扩展,并使用它而不是 python -m http.server,例如:

import http.server

HandlerClass = http.server.SimpleHTTPRequestHandler

# Patch in the correct extensions
HandlerClass.extensions_map['.js'] = 'text/javascript'
HandlerClass.extensions_map['.mjs'] = 'text/javascript'

# Run the server (like `python -m http.server` does)
http.server.test(HandlerClass, port=8000)

【讨论】:

  • 我修复了 Windows 注册表值,并且成功了 [使用默认 http.server]。
  • 这只对我有用 application/javascript 而不是 text/javascript
  • 我似乎有一个缓存问题,即使在启动此服务器后我仍然收到 MIME 类型错误。然后错误消失了。因此,如果这对任何人都不起作用,您可能需要在开发工具中禁用缓存。
猜你喜欢
  • 2023-02-01
  • 2021-04-20
  • 2021-05-10
  • 2019-10-28
  • 2019-10-16
  • 1970-01-01
  • 2020-01-15
  • 2020-09-18
  • 1970-01-01
相关资源
最近更新 更多