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

2023-12-05

假设我有一个名为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(使用前将#替换为@)

如何确定 javascript 模块是否通过脚本 src 导入或加载? 的相关文章

随机推荐

  • 将EventListener添加到多个复选框

    下面 我有一个简单的表单 其中有 4 个复选框作为席位 我想做的是 当访客选择带有 ID 的座位复选框时A2 and A4 我希望在单击名称为的段落后立即显示这些 ID 及其总价值id demo 单击 立即预订 按钮后 应将总值分配给名为的
  • 连接 Java - MySQL:不允许公钥检索

    我尝试使用连接器 8 0 11 将 MySQL 数据库与 Java 连接 一切似乎都很好 但我得到了这个例外 Exception in thread main java sql SQLNonTransientConnectionExcept
  • React Native iOS 中的键盘语言?

    有没有办法知道 React Native iOS 应用程序中键盘的语言 因为我想切换TextInput根据当前语言自动指示 您可以使用以下方式获取设备区域设置 import NativeModules from react native c
  • iOS:如何在运行时使用音频单元重新采样音频(PCM 数据)?

    如何在运行时 实时使用音频单元重新采样音频 PCM 数据 我的音频单元设置如下 void setUpAudioUnit OSStatus status AudioComponentInstance audioUnit AudioCompon
  • 创建自定义对话框时出现问题

    我在创建自定义对话框时遇到问题 但我没有发现失败 希望有人能帮助我 protected Dialog onCreateDialog int id Dialog dialog null switch id case DIALOG ABOUT
  • 如何从java程序在终端运行命令?

    我需要从 JAVA 程序在 Fedora 16 的终端运行命令 我尝试使用 Runtime getRuntime exec xterm 但这只是打开终端 我无法执行任何命令 我也尝试过这个 OutputStream out null Pro
  • Maven TestNG 项目,将命令行参数传递给 testng.xml 文件

    我有一个 Maven TestNG 项目 并且正在尝试将几个命令行参数传递到 testng xml 文件中 testng xml 文件如下所示
  • 将最新季度财务资产负债表结果导出到单个 Excel 工作簿中?

    下面的代码是我到目前为止所拥有的 感谢我的 Luis先前的问题 当前代码为每个股票代码 以及所有季度 创建一个单独的工作表 目前的结果如下图所示 我想要一张仅包含最新季度业绩的表格 因此 B 列中的结果将是 AMZN C 列将是 MSFT
  • html + css + jquery:切换显示更多/更少文本

    我正在做一个个人项目 遇到一个小问题 这是我的代码 目前有效 http jsfiddle net gvM3b show more click function this text Show Less text toggleClass sho
  • 从我的 YouTube 频道检索我的评论历史记录

    我正在尝试通过 YouTube API 从我的频道检索我自己的评论列表 但找不到方法 这可以通过历史记录获得 https www youtube com feed history comment history 但 API 文档中没有提及
  • 为什么 C++ 中默认对“char”进行签名?

    为什么 char 默认在 128 到 127 范围内 而它应该表示一个文本表示在 0 到 255 范围内的 字符 从这个意义上说 我猜 char 默认情况下应该是无符号的 只有当我们打算将其视为 数字 时 我们才必须添加 signed 关键
  • 如何为文本视图中选定的文本提供背景颜色

    如何为文本视图中选定的文本提供背景颜色 我正在开发基于文本视图的应用程序 我必须更改所选文本的颜色 我尝试使用委托方法 但没有找到任何这样的属性 您能建议一种方法来克服这个问题吗 在 AppStore 限制内无法更改选择颜色 事实上 考虑到
  • python多进程启动失败

    这是我在 python 中执行简单多处理任务的代码 from multiprocessing import Process def myfunc num tmp num num print squared O P will be tmp r
  • 修复 UTF-8 文本中的 mojibakes

    我有一个包含 UTF 8 葡萄牙语文本的文件 不知何故 生成该文件的人选择了错误的编码 并且文本中充满了mojibake IDENTIFICA O instead of identifica o Andr instead of Andr 自
  • 您将如何找到该算法的复杂性?

    function alg1 n 1 a 0 2 for o 1 to n do 3 for t 1 to o do 4 for k t to o t do 5 a a 1 6 return a 如果有人能指导我如何找到最坏的情况 以及如何获
  • WiFiDirectActivity 是什么/在哪里

    我正在尝试理解并实现 中描述的 不完整 代码 使用 Wi Fi 创建 P2P 连接 这是作为一个单独的类添加到我现有的活动中 示例代码中有一行如下 activity setIsWifiP2pEnabled true 但没有显示变量 acti
  • Rails 和 Heroku PGError:其中参数不存在列

    我四处搜索并发现了一些类似的搜索 但没有一个真正详细说明了我遇到的问题 所以我想我应该分享我的发现 Problem当将 Ruby on Rails 项目推送到 Heroku 时 数据库 PostgresQL 我收到了一些在开发环境中没有收到
  • 如何从indexedDB获取对象存储?

    我在我的应用程序上有用于网络存储的indexedDb 我想通过以下代码获取商店 var store myapp indexedDB db transaction tree nodes readwrite objectStore tree n
  • MVC 开始集合项

    我在将部分视图 BeginCollectionItem 保存到数据库时遇到一些问题 我有一个表单 其中包含可以添加到页面的动态数量的 部分 并且在每个字段中都有一个文本框 用户可以在其中输入部分名称 据我所知 部分视图中的 BeginCol
  • 如何确定 javascript 模块是否通过脚本 src 导入或加载?

    假设我有一个名为module js export default function greet console info hello Within module js 无论是在函数内部还是外部greet 如何确定模块是否已使用以下方式加载