Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

依赖管理的目的不是避免全局引用!

  现在无论是什么 js 项目都总会使用某种打包方式来组织自己的文件,比如 CommonJS 或 AMD 之类的。但是用这些打包方式的目的到底是什么呢?好像现在大家已经变得为了打包而打包了,很多人似乎已经开始忘记最初这些打包方式到底解决的是什么问题了。
  这些工具解决的是依赖混乱的问题,而不是避免模块命名冲突!能避免模块命名冲突只是因为它们使用了文件路径来作为模块的引用,是「文件」这种东西自带的特性。如果抛开文件名的唯一性,这些模块同样也存在命名冲突的问题。比如 AMD 不仅仅有匿名模块,还有命名模块的概念。或者 Angular 1.x 的 module 也都是命名模块的概念。这些命名模块实际上就是「全局变量」,只不过这些全局变量被放在了一个框架内而已。
  以前还没流行这些模块化方案的时候,所有东西都直接注册到全局。当一个项目依赖的东西太多的时候全局的命名可能就会冲突。而即便是基于 Angular 1.x 项目,引用的第三方 factory、controller、directive 之类的东西同样也存在和以前一样命名冲突的问题。所以这些模块化方案不是用来解决命名冲突的问题,只是 CommonJS 之类的以文件路径作为模块引用的东西让我们避免了冲突。
  模块化的目的是为了解决依赖管理的问题。传统的模式把所有东西定义到全局需要考虑定义顺序的问题,模块化打包正是为了解决这种问题了诞生的。我以前一直喷 Angular 的 module 烂,但如果考虑上模块的真正意义,Angular 的 module 确实有在好好完成自己的工作。
网名:
54.159.71.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^