javascript - Javascript 模块未在 Chrome v91 中的 HTML 中加载
问题描述
我有一个简单的 javascript 模块,其中包含我的浏览器端 javascript 和节点服务器 ES6 模块通用的类。代码都是同源的,所以没有加载错误,但是从 ES6 模块导出的实体在浏览器脚本中都不可用。忽略重用并仅考虑浏览器端,这是可行的:
latlong.js非模块
function LatLon(lat,lon) {
this.lat = lat;
this.lon = lon;
}
测试.html
<body>
<script src="latlong.js"></script>
<script>
let test = new LatLon(1,2)
</script>
</body>
但这不使用模块,因此不能与节点服务器代码共享,所以我希望以下工作但它失败
了 latlong.js模块,该模块可以在服务器端节点 js 代码中正常导入并且可以工作
export class LatLon {
constructor(lat, lon) {
this.lat = lat;
this.lon = lon;
}
}
带有模块导入的test.html
<body>
<script type="module" src="latlong.js"></script>
<script>
let test = new LatLon(1,2) <=Uncaught ReferenceError: LatLon is not defined
</script>
</body>
关于如何从模块导出类/原型或声明原型类还有许多其他变体,但对我来说都导致相同的错误。
这是在本地网络服务器中运行的,我已经验证了在两种情况下返回的用于加载 latlong.js 的标头具有内容类型application/javascript。由于这是一个 ampps Web 服务器,我可以将 js 和 mjs 请求的 mime 类型更改为 text/javascript 以更符合要求,但这对报告的错误没有影响。
在 HTML 文档中包含模块很常见,那么我做错了什么?
解决方案
import
如果您不在想要使用它们的地方使用它们,模块将无法工作。您还必须将导入声明script
为module
一个。
这将起作用:
<script type="module">
import {LatLon} from 'latlong.js';
let test = new LatLon(1,2)
</script>
推荐阅读
- php - 我们可以告诉浏览器设置一个特定的标题字段吗?
- angular - Angular如何在不同视图中保留user_id
- distribution - 测量以找到关于固定点的最佳分布
- flutter - 我可以使用颤振计算功能来http get吗?
- matlab - 安装 GMM 后如何对集群数据进行颜色标记?
- unit-testing - 如何在 Go 中编写使用 -short 标志的测试,它可以与 -benchmark 标志结合使用吗?
- javascript - 从返回的服务器数据更新组件的状态
- android - 即使状态码不是 200,如何获得网络响应
- javascript - 在 javascript 中访问 Global data-* 属性
- apache-kafka - 如何查看kafka标头