第三方类库如何使用模块加载


需要给组里其他同事提供一个类库,这个类库涉及到服务调用、页面操作等,总体来说涉及到的功能还是不少,我在实现的时候是基于backbone的,分模块组织,不同模块分散在不同文件中,本地测试是将所有的js文件加载到页面中。

随着功能增加,我觉得这种方法不好,很多加载的功能可能都用不到,所以我想到了模块加载器如requirejs这种。

改造到requirejs难度也不大,问题是我觉得作为一个第三方类库用requirejs是不是不太合适? 如果客户端自身用了一个跟我版本不一致的requirejs会怎么样? 而且,require js的入口放到那里?比如:


 require.config({
  .....
})

必然不能放到我的代码里,因为客户端也可能自己需要配置自己的依赖,但是由客户端控制的话,我怎么配置我类库的依赖?

我不希望将自己类库的模块暴露给外面,只希望对客户端来说API是一致的,比如


 var userPanel = new xx.UserPanel();

当这个UserPanel初始化的时候他可能异步加载相关的js、模板等,也可能啥都不做(相关的js、模板已经在本地了),我希望这个内部实现对客户端是关闭的。

举一个明显的例子,打开腾讯地图,下图是资源加载完成,鼠标放到一个热点上的图:

clipboard.png

当点击那个热点之后:

clipboard.png

因为信息窗的弹出,因此相关的资源被加载了,但是这个过程对用户是不可知的,客户端不需要知道他有一个名字为infowindowimplement的模块,对客户端来说只需要

new InfoWindow()就够了。

有没有什么办法实现这一点?

模块化 前端模块化 JavaScript

我的节操都还在 10 years, 2 months ago

Your Answer