如何确定javascript模块是通过脚本src导入还是加载?

问题描述 投票:0回答:1

假设我有一个名为 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.currentScriptnull和NodeJS的 require (因此 require.main)和 module 都是 undefined.

谢谢!我有一个名为module.js的模块。

javascript browser es6-modules
1个回答
0
投票

当你导入任何模块时(无论是使用 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 -->
© www.soinside.com 2019 - 2024. All rights reserved.