我是Angular.js的新手,试图了解它与Backbone.js的区别...我们以前在使用Backbone时使用Require.js管理我们的软件包依赖项。用Angular.js做同样的事情有意义吗?
在Angular.js中使用Require.js是否有意义?[关闭]
布莱恩·福特的回答
AngularJS拥有自己的模块系统,通常不需要RJS之类的东西。
如果您计划延迟加载控制器和指令等,则可以将requirejs与angularjs结合使用,同时还将多个延迟依赖项组合到单个脚本文件中,以实现更快的延迟加载。RequireJS具有优化工具,可以使合并变得容易。参见http://ify.io/using-requirejs-with-optimisation-for-lazy-loading-angularjs-artefacts/
我会避免使用Require.js。我见过的应用程序可以完成多种类型的模块模式架构。AMD,Revealing,IIFE的不同口味等。还有其他按需加载的方式,例如loadOnDemand Angular mod。添加其他内容只会使您的代码充满混乱,并产生低信噪比,并使您的代码难以阅读。
这是我使用的方法:http : //thaiat.github.io/blog/2014/02/26/angularjs-and-requirejs-for-very-large-applications/
该页面显示了AngularJS + RequireJS的可能实现,其中代码按功能和组件类型划分。
是的,它确实适用于大型SPA。
在某些情况下,RequireJS是必须的。例如,我使用AngularJS开发PhoneGap应用程序,该应用程序也使用Google Map API。如果没有诸如RequireJS之类的AMD加载器,该应用将在离线时启动时崩溃,因为它无法获取Google Map API脚本。AMD加载器使我有机会向用户显示错误消息。
但是,AngularJS和RequireJS之间的集成有些棘手。我创建了angularAMD来简化此过程:
简短的答案是,这很有意义。最近在ng-conf 2014中对此进行了讨论。这是关于此主题的演讲:
是的,将requireJS与Angular一起使用是有意义的,我花了几天时间测试了几种技术解决方案。
我在服务器端使用RequireJS制作了一个Angular Seed。很简单的一个。我将SHIM表示法用于没有AMD模块而不是AMD的原因,因为我认为处理两种不同的依赖注入系统非常困难。
我使用grunt和r.js在服务器上串联js文件,具体取决于SHIM配置(依赖项)文件。所以我只在我的应用程序中引用一个js文件。
有关更多信息,请访问我的github Angular Seed:https : //github.com/matohawk/angular-seed-requirejs
正如@ganaraj提到的那样,AngularJS的核心是依赖注入。在使用和不使用RequireJS的情况下构建玩具种子应用程序时,我个人发现RequireJS对于大多数用例而言可能是过大的。
这并不意味着RequireJS对它的脚本加载功能以及在开发过程中保持代码库干净无用。将r.js优化器(https://github.com/jrburke/r.js)与杏仁(https://github.com/jrburke/almond)结合可以创建一个非常苗条的脚本加载故事。但是,由于它的依赖关系管理功能对于应用程序核心中的angular并不那么重要,因此您还可以评估其他客户端(HeadJS,LABjs等)甚至服务器端(MVC4 Bundler等)脚本加载解决方案针对您的特定应用。
是的,这很有道理。
Angular模块不会尝试解决脚本加载顺序或延迟脚本获取的问题。这些目标是正交的,两个模块系统都可以并存并实现其目标。
资料来源:Angular JS官方网站
是的,angular.js
与require.js
将require.js
组件模块化一起使用时,是有意义的。
有一个使用的种子项目both angular.js and require.js
。
我认为这是一个主观问题,因此我将提供我的主观意见。
Angular具有内置的模块化机制。创建应用程序时,要做的第一件事是
var app = angular.module("myApp");
接着
app.directive(...);
app.controller(...);
app.service(...);
如果您看一下角度种子,它是用于角度的整洁的入门应用程序,则他们将指令,服务,控制器等分离到不同的模块中,然后将这些模块作为依赖项加载到主应用程序中。
就像是 :
var app = angular.module("myApp",["Directives","Controllers","Services"];
Angular还懒惰地将这些模块(而不是脚本文件)加载到内存中。
对于延迟加载脚本文件而言,坦率地说,除非您要编写的东西很大,否则这将是一个过大的杀伤力,因为从本质上讲,角度化会减少您编写的代码量。如果以角度编写,使用大多数其他框架编写的典型应用程序的LOC可能会降低30-50%。
我认为这取决于您的项目复杂性,因为angular几乎是模块化的。您的控制器可以被映射,您只需在index.html页面中导入这些JavaScript类即可。
But in case your project get bigger. Or you anticipates such scenario, you should integrate angular with requirejs. In this article you can see a demo app for such integration.