使用Require.js和Angular.js是否合理?

我是Angular.js的新手,并试图了解它与Backbone.js的不同之处......我们曾经在使用Backbone时使用Require.js管理包依赖项。 用Angular.js做同样的事情有意义吗?


是的,使用angular.jsrequire.js是有道理的,其中您可以使用require.js来模块化组件。

我可以指出你使用both angular.js and require.js的种子项目。 希望有所帮助!


重申我认为OP的问题真的是:

如果我主要在Angular 1.x中构建应用程序,并且(隐式地)在Grunt / Gulp / Broccoli和Bower / NPM时代这样做,并且我可能还有一些额外的库依赖项,那么需要添加明确的,特定的超出我通过使用Angular获得的价值而不需要?

或者换一种说法:

“如果我有其他方法来处理基本的脚本加载,那么vanilla Angular需要有效地管理基本的Angular组件加载吗?”

我相信对此的基本答案是:“除非你有其他事情正在进行,否则你不能使用更新,更现代的工具。”

让我们从一开始就清楚:RequireJS是解决一些非常重要的问题的好工具,并且使我们开始朝着更具可扩展性,更专业化的Javascript应用程序迈进。 重要的是,这是许多人第一次遇到模块化的概念,并使事情脱离全球范围。 所以,如果你打算建立一个需要扩展的Javascript应用程序,那么Require和AMD模式并不是坏的工具。

但是, 有没有什么特别的关于Angular的要求/ AMD特别适合? 不可以。事实上,Angular为您提供了自己的模块化和封装模式,这在许多方面使得AMD的基本模块化特性变得冗余。 而且,将Angular模块集成到AMD模式中并非不可能,但它有点...挑剔。 你肯定会花时间把这两种模式很好地整合在一起。

对于Angular团队本身的一些观点,Brian Angon是Angular Batarang的作者Brian Ford,现在是Angular核心团队的成员:

我不建议使用RequireJS和AngularJS。 尽管这当然是可能的,但我还没有看到RequireJS在实践中有益的任何实例。

因此,在AngularJS这个非常具体的问题上:Angular和Require / AMD是正交的,并且在重叠的地方。 你可以一起使用它们,但没有任何理由与Angular本身的性质/模式特别相关。

但是对于可伸缩Javascript应用程序的内部和外部依赖的基本管理呢? 不要求在那里做一些非常重要的事情吗?

我建议检查Bower和NPM,尤其是NPM。 我并没有试图就这些工具的比较优势展开一场神圣的战争。 我只想说:还有其他方法可以让这只猫变得光滑,而这些方式可能比AMD / Require更好。 (2015年末,它们肯定有更受欢迎的势头,特别是NPM,加上ES6或CommonJS模块,请参阅相关的SO问题。)

什么是懒加载?

请注意,延迟加载和延迟下载是不同的。 Angular的懒加载并不意味着你直接从服务器拉它们。 在使用JavaScript自动化的Yeoman风格的应用程序中,您将整个shebang连接并缩小为一个文件。 它们存在,但没有执行/实例化,直到需要。 通过大幅度提高速度和带宽,这大大超过了从一个特定的20线控制器延迟下载的所有改进。 事实上,该控制器浪费的网络延迟和传输开销将比控制器本身的大小大一个数量级。

但是让我们假设你确实需要懒惰下载,也许是你的应用程序中很少使用的部分,比如管理界面。 这是一个非常合理的案例。 需求确实可以为你做到这一点。 但也有很多其他可能更灵活的选项可以完成同样的任务。 而且,Angular 2.0显然会为我们照顾这个,内置于路由器中。 (细节。)

但是在我的本地开发boxen开发过程中呢?

我怎样才能加载我所有的数十/数百个脚本文件,而无需手动将它们全部附加到index.html?

查看Yeoman的generator-angular中的子生成器,或者generator-gulp-angular中实现的自动化模式,或React的标准Webpack自动化中的子生成器。 这些为您提供了一种干净的,可扩展的方法,可以:在组件脚手架时自动附加文件,或者如果它们存在于某些文件夹中/匹配某些全局模式,则自动全部自动获取它们。 一旦你有了后面的选项,你再也不需要考虑自己的脚本加载了。

底线?

对于某些事情,需求是一个很好的工具。 但只要有可能,就随谷物一起吃,尽可能分开你的顾虑。 让Angular担心Angular自己的模块化模式,并考虑使用ES6模块或CommonJS作为一般的模块化模式。 让现代自动化工具担心脚本加载和依赖管理。 并以细粒度的方式照顾异步延迟加载,而不是与其他两个问题纠缠在一起。

也就是说,如果您正在开发Angular应用程序,但由于某些原因无法在您的计算机上安装Node以使用Javascript自动化工具,那么Require可能是一个很好的替代解决方案。 我已经看到了非常复杂的设置,人们希望动态加载Angular组件,每个组件都声明自己的依赖关系或其他东西。 虽然我可能试图以另一种方式解决这个问题,但我可以看到这个想法的优点,就是这个特殊情况。

但除此之外......当从头开始使用全新的Angular应用程序和灵活性来创建现代化的自动化环境时......您还有许多其他更灵活更现代的选择。

(重复更新以跟上不断变化的JS场景。)


是的,这是有道理的。

Angular模块不会尝试解决脚本加载排序或延迟脚本抓取的问题。 这些目标是正交的,两个模块系统可以并排居住并实现他们的目标。

来源:Angular JS官方网站

链接地址: http://www.djcxy.com/p/77837.html

上一篇: Does it make sense to use Require.js with Angular.js?

下一篇: Recursion in Angular directives