检测 ES6 导入兼容性

meg*_*man 3 javascript import feature-detection

我知道你可以用这样的东西检测 javascript 中的功能

if(xmlhttprequest){
console.log("this browser is ajax compatible");
}
Run Code Online (Sandbox Code Playgroud)

我也明白,如果启用了某些开发模式设置,ES6 导入与某些浏览器自然兼容。IE

import {someExport} from './someModule.js';
Run Code Online (Sandbox Code Playgroud)

我的问题是

是否可以像检测对象一样检测“导入”?如果是,怎么办?是否可以导入整个 JS 文件(以便可以导入不使用 Export 的 ES5 Javascript)

我尝试使用 if(object) 语法和各种变体(包括有和没有 from 语句),但到目前为止还没有运气

我这样做的原因是我构建了一个依赖于 Jquery 和 GreenSock 的 javascript 功能,并希望脚本在兼容的浏览器中自动导入这些功能,因此开发人员不必手动添加多个 JS 库。

小智 10

可以安全地假设所有支持 ES6 样式模块导入/导出语法的浏览器都可以使用type="module". 这些浏览器还为脚本标签提供了一个名为nomodule. 因此,您可以从 JavaScript 内部检测支持,如下所示:

'noModule' in HTMLScriptElement.prototype
Run Code Online (Sandbox Code Playgroud)

(注意属性名称中的大写“M”而不是 HTML 属性)


Gle*_*ren 2

您是否考虑过在脚本上使用 nomodule 属性?

例子

<script type="module">
  window.imports = true;
  import './app-shell-es.js';
</script>

<script src="app-shell.js" nomodule></script>
Run Code Online (Sandbox Code Playgroud)

来源:浏览器中的 ECMAScript 模块