检测ES6导入兼容性

时间:2017-07-03 17:45:36

标签: javascript import feature-detection

据我所知,您可以使用类似的内容检测javascript中的功能

if(xmlhttprequest){
console.log("this browser is ajax compatible");
}

我也理解,如果启用了某些开发模式设置,ES6导入与某些浏览器是完全兼容的。即

import {someExport} from './someModule.js';

我的问题是

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

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

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

3 个答案:

答案 0 :(得分:1)

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

实施例

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

<script src="app-shell.js" nomodule></script>

来源:ECMAScript modules in browsers

答案 1 :(得分:0)

不,这是不可能的。它不可能的原因是因为它会在不支持它的浏览器中抛出语法错误而你无法对语法错误做出正确的反应。

相反,您应该使用类似Webpack的内容与Babel一起编译代码,该代码将模块用于任何浏览器都可以运行的格式。

答案 2 :(得分:0)

可以安全地假设所有支持ES6样式模块导入/导出语法的浏览器都可以使用 /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'column0', 'column1', 'add the problematic one here' ]; 通过脚本标签加载模块。这些浏览器还提供了名为type="module"的脚本标签的属性。因此,您可以通过以下方式从JavaScript中检测支持:

nomodule

(请注意,属性名称中的大写字母“ M”与HTML属性相对)