Javascript导入麻烦

时间:2019-05-01 00:41:10

标签: 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
}

一切工作都非常好,直到我决定在要由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
}

Clustering.js:

export class Clustering {


}

我一直收到此错误:

ReferenceError: KMeans is not defined

有关信息,我没有使用Babel或任何编译器。

一生中,我对JS中的模块管理一无所知。有人可以帮我弄清楚怎么了吗?

1 个答案:

答案 0 :(得分:2)

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

选项1

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

选项2

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