【问题标题】:Webpack - Dynamically importing a classWebpack - 动态导入一个类
【发布时间】:2018-08-10 11:56:34
【问题描述】:

我正在尝试在满足路由器条件时动态导入一个类。

导入标准(非类)模块没有问题,因为它按预期工作:

Router.on({
    '/:region/map': (params) => {
      import("Controllers/map.js" /* webpackChunkName: "map" */).then(({map}) => {
        map.initialise(params.region);
      });
    }
});

但是尝试对一个类做同样的事情并没有按预期工作。

Router.on({
    '/:region/map': (params) => {
      import("Controllers/map.js" /* webpackChunkName: "map" */).then(Map => {
        Map.initialise(params.region);
      });
    }
});

“e.initialise 不是函数”失败;

我还尝试使用new 关键字来实例化该类:

Router.on({
    '/:region/map': (params) => {
      import("Controllers/map.js" /* webpackChunkName: "map" */).then(Map => {
        const MapClass = new Map();
        MapClass.initialise(params.region);
      });
    }
});

但仍然没有快乐!

在这种情况下如何动态导入类?

更新:

这是我的地图模块,作为一个非类模块,它可以工作:

var map = {
    initialise(region) {
        console.log("Map initialised for region: " + region);
    }
}
export { map };

这是同一个模块,但作为一个类:

export default class Map {
    constructor() {
        //
    }
    initialise(region) {
        console.log("Map initialised for region: " + region);
    }
}

【问题讨论】:

  • 能否也分享一下map.js代码。想看看你如何导出以及从 map.js 导出什么
  • @MohitTilwani - 添加。谢谢。
  • 这个问题解决了吗?我也有同样的问题

标签: javascript webpack import es6-modules dynamic-import


【解决方案1】:
  class Map {
    constructor() {
        //
    }
    initialise(region) {
        console.log("Map initialised for region: " + region);
    }
  } 

     export { Map }




      Router.on({
        '/:region/map': (params) => {
          import("Controllers/map.js").then(({ Map })=> {
            const MapClass = new Map();
            MapClass.initialise(params.region);
          });
        }
      });

你能试试上面的代码,看看你有没有在控制台中获得类

【讨论】:

  • 谢谢,莫希特。当我这样做时,我得到:ƒ n(){!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.currentRegion=null}
  • 你现在可以试试。我编辑了上面的答案。此外,如果它不起作用,请始终尝试从后面安慰事情。比如你在模块中得到了什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 2019-06-16
  • 2021-02-08
相关资源
最近更新 更多