在Angular.js中使用Require.js是否有意义?[关闭]

我是Angular.js的新手,试图了解它与Backbone.js的区别...我们以前在使用Backbone时使用Require.js管理我们的软件包依赖项。用Angular.js做同样的事情有意义吗?

nosebug2020/03/14 12:51:22

我认为这取决于您的项目复杂性,因为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.

达蒙Davaid斯丁2020/03/14 12:51:22

布莱恩·福特的回答

AngularJS拥有自己的模块系统,通常不需要RJS之类的东西。

参考:https : //github.com/yeoman/generator-angular/issues/40

神无十三2020/03/14 12:51:22

如果您计划延迟加载控制器和指令等,则可以将requirejs与angularjs结合使用,同时还将多个延迟依赖项组合到单个脚本文件中,以实现更快的延迟加载。RequireJS具有优化工具,可以使合并变得容易。参见http://ify.io/using-requirejs-with-optimisation-for-lazy-loading-angularjs-artefacts/

猪猪十三2020/03/14 12:51:22

我会避免使用Require.js。我见过的应用程序可以完成多种类型的模块模式架构。AMD,Revealing,IIFE的不同口味等。还有其他按需加载的方式,例如loadOnDemand Angular mod添加其他内容只会使您的代码充满混乱,并产生低信噪比,并使您的代码难以阅读。

StafanJinJin2020/03/14 12:51:22

这是我使用的方法:http : //thaiat.github.io/blog/2014/02/26/angularjs-and-requirejs-for-very-large-applications/

该页面显示了AngularJS + RequireJS的可能实现,其中代码按功能和组件类型划分。

小宇宙飞云2020/03/14 12:51:22

是的,它确实适用于大型SPA。

在某些情况下,RequireJS是必须的。例如,我使用AngularJS开发PhoneGap应用程序,该应用程序也使用Google Map API。如果没有诸如RequireJS之类的AMD加载器,该应用将在离线时启动时崩溃,因为它无法获取Google Map API脚本。AMD加载器使我有机会向用户显示错误消息。

但是,AngularJS和RequireJS之间的集成有些棘手。我创建了angularAMD来简化此过程:

http://marcoslin.github.io/angularAMD/

达蒙米亚达蒙2020/03/14 12:51:22

简短的答案是,这很有意义。最近在ng-conf 2014中对此进行了讨论。这是关于此主题的演讲:

http://www.youtube.com/watch?v=4yulGISBF8w

前端飞云2020/03/14 12:51:22

是的,将requireJS与Angular一起使用是有意义的,我花了几天时间测试了几种技术解决方案。

我在服务器端使用RequireJS制作了一个Angular Seed。很简单的一个。我将SHIM表示法用于没有AMD模块而不是AMD的原因,因为我认为处理两种不同的依赖注入系统非常困难。

我使用grunt和r.js在服务器上串联js文件,具体取决于SHIM配置(依赖项)文件。所以我只在我的应用程序中引用一个js文件。

有关更多信息,请访问我的github Angular Seed:https : //github.com/matohawk/angular-seed-requirejs

猿路易2020/03/14 12:51:22

正如@ganaraj提到的那样,AngularJS的核心是依赖注入。在使用和不使用RequireJS的情况下构建玩具种子应用程序时,我个人发现RequireJS对于大多数用例而言可能是过大的。

这并不意味着RequireJS对它的脚本加载功能以及在开发过程中保持代码库干净无用。将r.js优化器(https://github.com/jrburke/r.js)与杏仁(https://github.com/jrburke/almond)结合可以创建一个非常苗条的脚本加载故事。但是,由于它的依赖关系管理功能对于应用程序核心中的angular并不那么重要,因此您还可以评估其他客户端(HeadJS,LABjs等)甚至服务器端(MVC4 Bundler等)脚本加载解决方案针对您的特定应用。

Sam猿泡芙2020/03/14 12:51:22

是的,这很有道理。

Angular模块不会尝试解决脚本加载顺序或延迟脚本获取的问题。这些目标是正交的,两个模块系统都可以并存并实现其目标。

资料来源:Angular JS官方网站

阿飞神无2020/03/14 12:51:22

是的,angular.jsrequire.jsrequire.js组件模块化一起使用时,是有意义的

有一个使用种子项目both angular.js and require.js

2020/03/14 12:51:22

我认为这是一个主观问题,因此我将提供我的主观意见。

Angular具有内置的模块化机制。创建应用程序时,要做的第一件事是

var app = angular.module("myApp");

接着

app.directive(...);

app.controller(...);

app.service(...);

如果您看一下角度种子,它是用于角度的整洁的入门应用程序,则他们将指令,服务,控制器等分离到不同的模块中,然后将这些模块作为依赖项加载到主应用程序中。

就像是 :

var app = angular.module("myApp",["Directives","Controllers","Services"];

Angular还懒惰地将这些模块(而不是脚本文件)加载到内存中。

对于延迟加载脚本文件而言,坦率地说,除非您要编写的东西很大,否则这将是一个过大的杀伤力,因为从本质上讲,角度化会减少您编写的代码量。如果以角度编写,使用大多数其他框架编写的典型应用程序的LOC可能会降低30-50%。