javascript - Javascript 导入的麻烦

标签 javascript d3.js

我在网上读到的大部分内容要么已经过时,要么不够精确。 我会尝试揭露我的问题。 我正在编写一个由 2 个文件组成的 d3 项目,其结构如下

main.html:

<!DOCTYPE html>
<html>
<head>
    <script src="./d3/d3.js"></script>
    <script src="./KMeans.js"></script>
</head>

<body>

    <script type="text/javascript">

    <!--Some code -->

    var kmeans = new KMeans();

    </script>

</body>
</html>

KMeans.js:

class KMeans {
//class related stuff
}

一切都工作得非常好,直到我决定在一个新文件中添加一个名为“Clustering”的新类以由 KMeans 继承。代码变成这样:

main.html:

<!DOCTYPE html>
<html>
<head>
    <script src="./d3/d3.js"></script>
    <script type="module" src="./KMeans.js"></script>
</head>

<body>

    <script type="text/javascript">

    <!--Some code -->

    var kmeans = new KMeans();

    </script>

</body>
</html>

KMeans.js:

import {Clustering} from './Clustering.js';

export class KMeans extends Clustering {
//class related stuff
}

聚类.js:

export class Clustering {


}

我不断收到此错误:

ReferenceError: KMeans is not defined

仅供引用,我没有使用 Babel 或任何转译器。

对于我的一生,我无法理解有关 JS 中的模块管理的事情。有人可以帮我弄清楚出了什么问题吗?

最佳答案

将脚本定义为模块后,其中定义的变量将不再公开。所以,你有两个选择。

选项 1

您可以将 Clustering 和 KMeans 设为常规非模块文件,并删除所有 importexport 语句。这将解决您的问题。

选项 2

您可以将最终的脚本标记移动到其自己的文件中,并将其本身作为一个模块(也许您可以保持内联并仍然将其作为一个模块,但我对此不确定),并记住导入 KMeans 如果你想使用它。

关于javascript - Javascript 导入的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55930350/

相关文章:

javascript - 如何创建与 JavaFx WebView 一起使用的 JavaScript 包装器? JSNI 是一个选项吗?

javascript - 使用 jQuery 在内部 div 的第一行之前附加一个 div

d3.js - 不显示负号 d3 Axis 标签

javascript - 在 Vue.js 中的对象属性之间切换

javascript - 链接不会重定向到 Jquery 选项卡

javascript - 深色背景中的 c3 图;如何更改轴和刻度值颜色

javascript - NVD3 - 有没有办法增加气泡的大小?

javascript - 如何随着深度的增加减少 sibling 的横向距离,从而获得 D3.js 整洁的 TreeMap

javascript - 用实心 div 覆盖文本(使用 CSS 不透明度)

javascript - 如何找到大型 Web 应用程序中事件处理程序的附加位置?