我在网上阅读的大部分内容要么过时,要么不够精确。 我将尝试揭露我的问题。 我正在编写一个由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中的模块管理一无所知。有人可以帮我弄清楚怎么了吗?
答案 0 :(得分:2)
将脚本定义为模块后,其中定义的变量不再公开。因此,您有两个选择。
选项1
您可以使Clustering和KMeans成为常规的非模块文件,并删除所有import
和export
语句。这样可以解决您的问题。
选项2
您可以将最终的脚本标签移动到其自己的文件中,并使其本身成为一个模块(也许您可以内联并仍使其成为一个模块,但是对此我不确定),并记住导入{{1 }}如果您想使用它。