Chrome 62 javascript模块

时间:2017-12-07 01:08:50

标签: javascript jquery google-chrome es6-modules

我导入这样的模块:

<script type="module">
    import mod_test from '../classes/mod_test.js';
    window.mod_test= mod_test;  
</script>

但Chrome有时会说我调用函数window.mod_test.test();

  

无法读取属性&#39; test&#39;未定义的

在Jquery同步请求中调用。

我做错了什么?或者它是chrome的错误,因为它有时只会发生?

模块看起来像那样

var mod_test = {
    a: null,
    test: function (b) {
         this.a=b;
    }
};

export default mod_test;

1 个答案:

答案 0 :(得分:2)

由于您没有CORS问题,我认为问题可能是在模块加载和模块导出的函数调用之间的竞争条件。确保您可以尝试以下方法。在模块加载器之前定义app runner:

<script>
  window.runTheApp = function(mod_test) {
    mod_test.test();
    // ...
  }
</script>

然后使用app runner调用加载您的模块:

<script type="module">
    import mod_test from '../classes/mod_test.js';
    window.runTheApp(mod_test);
</script>

此外,dynamic import可能很有用。对我而言,这使得方法更加清晰:

<script type="module">
  import('../classes/mod_test.js')
  .then(function(module) {
    console.log('module loaded');
    window.runTheApp(module.default);
  })
</script>