我是Angular.js的新手,我想了解它与backbone.js有何不同。我们曾经使用require.js管理包的依赖关系,而使用主干。对Angular.js进行同样的操作有意义吗?
是的,将
有一个种子项目使用
重申一下我认为Op's的问题是:
如果我主要是在Angular 1.x中构建一个应用程序,并且(隐式地)在grunt/gulp/broccoli和bower/npm时代这样做,并且我可能有一些额外的库依赖项,那么Required是否会在使用Angular而不使用Required的情况下添加明确的,特定的值?
或者,换一种说法:
“如果我有其他处理基本脚本加载的方法,那么vanilla Angular need是否需要有效地管理基本的Angular组件加载?”
我相信基本的答案是:“除非你有别的事情发生,或者你不能使用更新的,更现代的工具。”
让我们从一开始就清楚:RequireJS是一个很好的工具,它解决了一些非常重要的问题,并为我们开启了通往更可扩展,更专业的Javascript应用程序的道路。重要的是,这是许多人第一次遇到模块化的概念,也是第一次把事情从全球范围内弄出来。因此,如果您要构建一个需要扩展的Javascript应用程序,那么Require和AMD模式是一个不错的工具。
但是,Angular是否有什么特别之处使得Require/AMD成为一个特别好的契合度呢?不。事实上,Angular为您提供了它自己的模块化和封装模式,这在许多方面使AMD的基本模块化特性变得多余。并且,将角度模块集成到AMD模式中并不是不可能的,但这有点。。。挑剔。您肯定需要花费时间来将这两种模式很好地集成在一起。
从Angular团队本身的角度来看,Brian Ford是Angular Batarang一书的作者,现在也是Angular核心团队的一员:
我不建议将RequireJS与angularjs一起使用。虽然这当然是可能的,但我还没有看到任何RequireJS在实践中是有益的。
所以,在角度的非常具体的问题上,js:Angular和require/amd是正交的,而且在某些地方是重叠的。您可以一起使用它们,但是没有任何原因与Angular本身的性质/模式相关联。
我建议检查鲍尔和NPM,特别是NPM。我并不是要就这些工具的比较效益展开一场圣战。我只想说:还有其他的方法去剥那只猫的皮,而且这些方法可能比AMD/Require更好。(在2015年末,它们肯定有更受欢迎的势头,特别是与ES6或CommonJS模块相结合的NPM.请参阅相关的问题。)
注意,lazy-loading和lazy-downloading是不同的。Angular's lazy-loading并不意味着你要直接从服务器上提取它们。在一个带有javascript自动化的Yeoman风格的应用程序中,您可以将整个程序连接起来并缩小到一个文件中。它们已经存在,但直到需要时才被执行/实例化。这样做所带来的速度和带宽上的改进远远超过了所谓的懒惰下载一个特定的20行控制器所带来的改进。实际上,该控制器浪费的网络延迟和传输开销将比控制器本身的大小大一个数量级。
但是我们可以说,您确实需要懒惰下载,可能是为了您的应用程序中不常用的部分,例如管理界面。这是一个非常合理的案例。Require确实可以为你做到这一点。但也有许多其他的,潜在的更灵活的选择来完成同样的事情。而Angular 2.0显然将为我们解决这一问题,它内置在路由器上。(详细信息。)
如何在不需要手动将它们全部附加到index.html的情况下加载我所有的多个/数百个脚本文件呢?
请看一下Yeoman's generator-angular中的子生成器,或者generator-gulp-angular中包含的自动化模式,或者React的标准Webpack自动化。这为您提供了一种干净,可伸缩的方式:在构建组件时自动附加文件,或者在它们存在于某些文件夹中时自动抓取它们/匹配某些全局模式。一旦有了后一个选项,您就再也不需要考虑自己的脚本加载了。
Require是一个很好的工具,对于某些事情。但只要有可能,就随波逐流,只要有可能,就把你关心的事情分开。让Angular担心Angular自己的模块化模式,并考虑使用ES6模块或CommonJS作为通用的模块化模式。让现代自动化工具来操心脚本加载和依赖管理。并以粒度的方式处理异步lazy-loading,而不是将其与其他两个关注点纠缠在一起。
也就是说,如果您正在开发Angular应用程序,但由于某种原因无法在您的机器上安装Node来使用Javascript自动化工具,那么Require可能是一个很好的替代解决方案。我见过非常复杂的设置,人们希望动态加载角度组件,每个组件声明自己的依赖关系或其他东西。虽然我可能会尝试用另一种方式来解决这个问题,但我能看到这个想法的优点,对于那种非常特殊的情况。
但反过来。。。当从零开始使用新的角度应用程序和灵活性来创建现代自动化环境时。。。你还有很多其他的,更灵活,更现代的选择。
(反复更新以跟上不断发展的JS场景。)
是啊,说得通。
Angular模块并不试图解决脚本加载顺序或延迟脚本获取的问题。这些目标是正交的,两个模块系统可以并排共存并实现它们的目标。
来源:Angular JS官网