假设我有一个模块:
// module.js
export default function greet() { console.info( 'hello' ); }
如果模块通过以下方式加载:
<script type=module>
import greet from './module.js';
...
</script>
然后,我希望调用代码能够自行调用greet()
,而无需自动调用它(正常情况)。
但是,如果模块通过以下方式加载:
<script type=module src="./module.js"></script>
然后,我希望模块立即调用greet()
(作为加载的副作用)。
我该如何完成?
不幸的是,这个问题与您先前的问题有相似的答案:不可能。
模块可以导出事物,但是它们对进口商如何使用(以及以何种方式使用)不负责。
模块被创建为独立且可重用,即使在同一页面上也无需重新评估:
对该模块的代码进行一次评估,然后将其导出传递到每个导入它的位置。
这种设计很好,但是从根本上来说,模块无法确定有关其进口商的[[任何内容。
<script type="module">
语法也不是为此目的而设计的:这是通过HTML向浏览器发送main
(又名“ top-level”)模块的方式,自行加载其依赖项(子模块)。制作
single
顶级模块,该模块将导入其他所有内容并通过“副作用”操作页面,并避免通过脚本标签导入其他模块。此外,我建议您避免在非顶级模块中产生副作用,而应专注于导出。而且,如果有人真的想从他们的HTML导入您的模块,他们仍然可以这样做:<script type="module">
import greet from './module.js';
greet();
</script>