假设我有一个名为 module.js
:
export default function greet() { console.info( 'hello' ); }
内 module.js
职能 greet
),如何确定该模块是否是用:
<script type=module src="./module.js">
vsus:
<script type=module>
import greet from './module.js';
</script>
两种方式。import.meta
是一样的。document.currentScript
是 null
和NodeJS的 require
(因此 require.main
)和 module
都是 undefined
.
谢谢!我有一个名为module.js的模块。
当你导入任何模块时(无论是使用 import
或 <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
只有一次。
由此,我们可以清楚地看到,一个模块可以有多种导入方式 当下所以 不可能 有什么方法可以确定一个模块是如何导入的......。
...只要你不使用导出。
使用脚本标签来包含一个模块与使用 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 -->