@
iwege 所以web领域都没有做套嵌树的模块管理。和node一样的模块管理方式更适合于文件系统,比如node, node-webkit也是这样,不用考虑overhead。像插件更是需要进行模块独立,即使有overhead也是在能不用共享的情况就不使用共享,而自己打包。这个是符合谁使用谁负责的原则的。外层不应该关系内层的实现。
web上的模块管理,cortex都是采用扁平化的,cortex的build的模块也不会包含依赖的重复代码,只会包含自己本身的代码。
d
| - a
| - b
| - c
a依赖于b这个信息都是模块自己申明而不是靠将b整体打包到a中实现, 只要版本兼容,d只会获取a,b,c各一份, 像之前说到的重复就不存在。但这种方式在其他的包管理下会存在冲突的可能,因为b只有一个。
虽然js是开源的,但是每次使用模块都需要用户去自己处理,选择代码甚至修改源码,比如我写d我需要去处理b里面的代码是很奇怪的,就像开发atom的packages的时候如果还要关心别的packages用了哪些依赖一样。