假设我有一个模块:
// 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向浏览器发送信号的方法,即主模块(又称“顶层”)自行加载其依赖项(子模块)。
部分解决方案:
创建一个顶级模块,该模块可以导入其他所有内容并通过“副作用”操作页面,并避免通过脚本标签导入其他模块。此外,我建议您避免在非顶级模块中产生副作用,而应将重点放在出口上。
而且,如果有人真的想从他们的HTML导入您的模块,他们仍然可以这样做:
<script type="module">
import greet from './module.js';
greet();
</script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句