造个轮子,amd模块加载器lbloaderJs
Opened this issue · 0 comments
laijbin commented
关于模块加载的用途以及为什么是amd而不是cmd就不多说了。说说其他的。
模块加载开源的已经很多了,为什么还要再造轮子?
1、从使用上来说,现有的对我来说太重了,尽管seaJs gzip后只有4k左右,但对我来说还是太大了。而模块加载器又是所有框架里最基础的,在以后要做的如游戏引擎、动画、图表库等的代码组织里都是可以复用的;
2、从成长上来说,要想进阶,造轮子挖坑然后填坑是最好的成长方式了,不信你自己去造个轮子试试;
思路分享:
参考阅读了seaJs,requireJs的代码实现,用lbloader.use(id)定义了入口,把所有依赖都加入到一个队列里,onload不停地检查队列里所有依赖是否加载完成,加载完成后即从入口模块开始递归执行依赖处理。
问题:
1、现在的代码去掉注释及空行大概120行左右,当然可以再精简。因为代码的精简相对应的功能就简化很多,define只支持define(id,factory),define(id, deps, factory),要支持define(deps, factory)可使用currentScript,但涉及兼容的问题又得多一坨代码,所以不支持了;
2、requireJs里支持cmd,lbloaderJs里不支持;
3、不支持加载template;
对了,忘记放上地址lbloaderJs