假设我有一个名为module.js
:
export default function greet() { console.info( 'hello' ); }
Within module.js
(无论是在函数内部还是外部greet
),如何确定模块是否已使用以下方式加载:
<script type=module src="./module.js">
versus:
<script type=module>
import greet from './module.js';
</script>
无论哪种方式,import.meta
是一样的,document.currentScript
is null
和 NodeJS 的require
(因此require.main
) and module
都是undefined
.
Thanks!
当您导入任何模块时(使用import
or <script type="module">
),即使您从多个位置导入该模块,模块的主体也只会被评估一次。
所以,如下:
//module.js
console.log('I was imported')
<script type="module">
import './module.js'
</script>
<script type="module" src="./module.js"></script>
...将记录I was imported
只有一次。
由此,我们可以清楚地看到一个模块可以通过多种方式导入同时,所以有不可能是任何确定模块导入方式的方法...
...只要您不使用导出。
使用 script 标签包含模块与import 'modulepath'
语法,即用MDN的话来说, 导入模块只是为了它的副作用.
这意味着,不进行任何导出,仅对模块进行评估。
但是,如果使用了其中一个导出(例如,调用),则可以排除使用导出的模块实例是由脚本标记导入的可能性。
不过,以下情况仍然是可能的:
//module.js
export default function greet() {
console.info('hello'); //<-- This must have been called from an `import` import
}
<script type="module">
import greet from './module.js';
greet() //imported by `import`
</script>
<script type="module" src="./module.js"></script> <!-- imported by script tag -->
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)