是否有意义使用Require.js与Angular.js? [关闭](Does it make

2019-06-18 05:54发布

我是一个新手,Angular.js,并试图了解它是如何从不同的Backbone.js的......我们使用,而使用与骨干到Require.js我们的管理软件包的相关性。 是否有意义做Angular.js一样吗?

Answer 1:

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

我可以指出你一个种子项目 ,它使用both angular.js and require.js 。 希望帮助!



Answer 2:

要重申我认为任择议定书的问题确实是:

如果我主要是建立一个应用程序的角度1.x中,和(隐含)的咕噜声/咕嘟咕嘟/西兰花和鲍尔/ NPM的时代这样做,我可能有一对夫妇的其他库的依赖,确实需要加明确,具体值超出了我得到采用了棱角分明没有要求?

或者,换一种说法:

“难道香草角需求需要有效地管理基本角组件装载, 如果我有处理基本的脚本加载别的办法吗?”

我相信基本的答案是:“不,除非你有别的事情上,和/或您无法使用更新,更现代的工具”

让我们在一开始就明确:RequireJS是一个伟大的工具,解决了一些非常重要的问题,并开始我们失望,我们是在路上,朝着更具扩展性,更专业的JavaScript应用程序。 重要的是,这是第一次,许多人遇到模块化的和得到的东西了全球范围的概念。 所以,如果你要建立一个需要扩展JavaScript应用程序,然后要求和AMD模式不适合做坏的工具。

但是, 有大约角什么特别,让需要/ AMD特别般配? 不,事实上,角度为您提供了自己的模块化和封装模式,这在许多方面使AMD的冗余基本模块化功能。 而且,角模块集成到AMD模式是不可能的,但它是一个有点...挑剔。 你一定会花费的时间越来越两种模式很好地集成。

对于从角团队本身的一些观点,有这个 ,从布赖恩·福特,角度Batarang的作者,现在是该角核心团队成员:

我不推荐使用RequireJS与AngularJS。 虽然这是绝对有可能,我还没有看到任何实例,其中RequireJS是在实践中有益的。

因此,在AngularJS的非常具体的问题:角和要求/ AMD是正交的,并且在重叠的地方。 您可以同时使用它们,但没有具体涉及到角本身的性质/模式的原因。

但是如果是可扩展的JavaScript应用程序内部和外部依赖的基本管理? 不需要做一些事情对我来说真的很重要的?

我建议检查出鲍尔和NPM,特别NPM。 我并不想开始对这些工具的比较效益圣战。 我只是想说:还有其他的方法来皮肤猫,这些方式可能甚至比AMD /要求。 (当然,他们在后期的2015年,尤其是NPM,用ES6或CommonJS的模块相结合,更受欢迎的势头。参见相关的SO问题 。)

什么延迟加载?

需要注意的是延迟加载和懒惰,下载是不同的。 角的延迟加载并不意味着你拉他们从服务器直接。 在使用JavaScript自动化约曼式的应用程序,你串联一起涅槃整个事情到一个文件中。 他们是存在的,但不执行/实例直到需要。 速度和带宽的提高你大大这样得到的,大大超过来自懒惰下载特定20线控制器的任何指控的改进。 事实上,该控制器的浪费网络延迟和传输开销将是大小比控制器本身的尺寸大一个数量级。

但是,假设你真的需要懒的下载,也许对你的应用程序中不常使用的作品,如管理界面。 这是一个非常合理的情况下。 需要确实能为你做的。 但也有也 很多 其他的 , 可能 更 灵活 的选择是完成同样的事情。 和角2.0显然将照顾这对我们来说,内置的路由器 。 ( 详细信息 )。

但是,关于我的本地开发Boxen有发展过程中有什么?

我怎样才能让我的所有几十/上百个脚本文件加载,而无需附加所有这些手动的index.html?

在约曼的发电机的角度来看看子发生器,或体现在自动化模式发电机一饮而尽棱角 ,或在标准的WebPack自动化反应。 这些为您提供一个干净,易扩展的方式之一:自动附加文件的组件是脚手架,或简单地自动抓取他们所有人,是否存在某些文件夹/匹配一定的水珠图案的时间。 您再也不需要考虑自己的脚本加载,一旦你已经得到了后者的选项。

底线?

需要是一个伟大的工具,对于某些事情。 但随着粮食尽可能去,并分开您的问题只要有可能。 让我们对角自身的模块化模式角的担心,并考虑使用ES6模块或CommonJS的作为一般的模块化模式。 让现代的自动化工具,担心脚本加载和依赖管理。 照顾异步延迟加载的粒状的方式,而不是与其他两个问题纠缠起来。

这就是说,如果你正在开发的应用程序角,但不能在您的计算机上安装节点使用JavaScript自动化工具由于某种原因,然后要求可能是一个很好的替代解决方案。 我也看到了真正详细的设置,人们要动态加载每个声明自己的依赖关系什么的角分量。 虽然我可能会尝试解决这个问题的另一种方式,我可以看到这个想法的优点,对于非常特殊的情况。

但是,否则......从头开始一个新的角度应用和灵活性,以建立一个现代化的自动化环境启动时...你有很多其他的,更灵活,更现代的选择。

(更新多次,以跟上不断变化的JS现场。)



Answer 3:

是的,这是有道理的。

角模块不试图解决脚本加载顺序或懒惰脚本抓取的问题。 这些目标是正交的,这两个模块系统可以比邻而居,并实现他们的目标。

来源: 角JS官方网站



Answer 4:

我相信这是一个主观的问题,所以我会提供我的主观意见。

角有一个模块化机制内置的。当你创建你的应用程序,你会做的第一件事是

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

然后

app.directive(...);

app.controller(...);

app.service(...);

如果你看一下角度种子这是角整齐启动应用程序,他们已经分离出的指令,服务控制器等成不同的模块,然后装上你的主要应用这些模块的依赖关系。

就像是 :

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

角也懒加载这些模块(到内存)不是他们的脚本文件。

在延迟加载脚本文件而言,坦率地说,除非你正在写的东西非常大这将是一个矫枉过正,因为其本质的角度减少了代码编写量。 如果写在书面角大多数其它框架中一个典型的应用程序可以预期在30-50%的LOC的减少。



Answer 5:

使用RequireJS与AngularJS是有道理的,但只有当你了解他们每个人的作品就依赖注入 ,因为虽然他们都注入依赖,他们注入非常不同的事情。

AngularJS有自己依赖的系统,让你注入AngularJS模块到新创建的模块,以实现再利用。 比方说,你创造了一个“第一”模块,实现了AngularJS过滤器“打招呼”:

angular
  .module('first', [])
  .filter('greet', function() {
    return function(name) {
      return 'Hello, ' + name + '!';
    }
  });

现在,让我们说你要使用的“问候”过滤器被称为“第二”的另一个模块,实现了“再见”过滤器。 你可以做到这一点注入“第一”模块的“第二”模块:

angular
  .module('second', ['first'])
  .filter('goodbye', function() {
    return function(name) {
      return 'Good bye, ' + name + '!';
    }
  });

问题是,为了使这项工作不正常RequireJS,你必须确保你打造的“第二” AngularJS模块之前,“第一” AngularJS模块被加载到页面上。 引用文档:

根据模块上意味着所需的模块需要加载需要模块之前被加载。

在这个意义上说,这里是RequireJS可以帮助你RequireJS提供了一个干净的方式注入脚本来帮助您组织相互之间的依赖脚本的页面。

让我们再回到“第一”,“第二” AngularJS模块,这里是如何使用RequireJS在不同的文件分离模块利用脚本做依存负载:

// firstModule.js file
define(['angular'], function(angular) {
  angular
    .module('first', [])
    .filter('greet', function() {
      return function(name) {
        return 'Hello, ' + name + '!';
      }
    });
});
// secondModule.js file
define(['angular', 'firstModule'], function(angular) {
  angular
    .module('second', ['first'])
    .filter('goodbye', function() {
      return function(name) {
        return 'Good bye, ' + name + '!';
      }
    });
});

你可以看到,我们正在根据“firstModule”文件之前,可以执行RequireJS回调的内容这就需要“第一” AngularJS模块被加载打造“第二个” AngularJS模块被注入。

附注:注射“角”上的“firstModule”和“secondModule”文件作为依赖,需要以使用RequireJS回调函数内AngularJS,并一定要在RequireJS配置配置为“角”映射到库代码。 您可能需要加载到页面中虽然失败RequireJS好处传统的方式太(script标签)AngularJS。

在具有RequireJS更多细节从AngularJS核心支持从2.0版本在我的博客文章。

基于我的博客文章“让RequireJS感与AngularJS”,这里是链接 。



Answer 6:

作为@ganaraj提到AngularJS具有依赖注入的核心。 当建立与不RequireJS玩具种子的应用,我个人觉得RequireJS也许对大多数使用情况矫枉过正。

这并不意味着RequireJS是没有用的为它的脚本加载功能,并在开发过程中保持你的代码干净。 结合r.js优化( https://github.com/jrburke/r.js ),杏仁( https://github.com/jrburke/almond )可以创建非常渺茫脚本加载的故事。 然而,由于其依赖关系管理功能,是不是在你的应用程序的核心与角度为重要的是,你还可以评估其他客户端(HeadJS,LABjs,...),甚至服务器端(MVC4捆扎机,...)脚本加载解决方案为具体应用。



Answer 7:

是的,确实如此,特别是对于非常大的SPA。

在某些情况下,RequireJS是必须的。 例如,我使用也使用谷歌地图API开发AngularJS应用的PhoneGap。 如果没有AMD装载机像RequireJS,应用程序将简单地一经推出崩溃下线时,因为它不能源谷歌地图API的脚本。 AMD的装载机给了我一个机会来显示错误信息给用户。

然而,AngularJS和RequireJS之间的整合是有点棘手。 我创建angularAMD使这个不太痛苦的过程:

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



Answer 8:

简短的回答是,这是有意义的。 近日这是在NG-conf的2014年,这里讨论的是关于这一主题的谈话:

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



Answer 9:

这是有道理的,如果你打算延迟加载控制器和指令等使用requirejs与angularjs,同时结合多种懒惰依赖成单脚本文件快得多延迟加载。 RequireJS有一个优化的工具 ,使合并容易。 见http://ify.io/using-requirejs-with-optimisation-for-lazy-loading-angularjs-artefacts/



Answer 10:

是的,它是有道理的使用requireJS有棱有角,我花了几天的时间来测试多个技术解决方案。

我与服务器端RequireJS的角度种子。 很简单的一个。 我使用SHIM符号来表示没有AMD模块,而不是AMD,因为我认为这是非常难以对付两个不同的依赖注入系统。

我用呻吟r.js服务器上取决于垫片配置(依赖)文件来连接js文件。 所以,我是指在我的应用程序只有一个js文件。

欲了解更多信息,请在我的github角种子: https://github.com/matohawk/angular-seed-requirejs



Answer 11:

我会避免使用Require.js。 应用程序我已经看到了这样做风力可达多种类型的模块模式架构的一个烂摊子。 AMD,揭示,IIFE等不同风味的还有其他的方法来对像的需求加载loadOnDemand角模 。 添加其他的东西恰好填满你的代码完全冗余代码,并创建一个低信噪比 ,使你的代码难以阅读。



Answer 12:

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

页面显示了一个可能的实现AngularJS + RequireJS,其中该代码是由功能,然后组分型分裂的。



Answer 13:

布赖恩·福特回答

AngularJS有它自己的模块系统中通常并不需要像RJS。

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



Answer 14:

我认为,这取决于你的项目的复杂性,因为角度是非常模块化。 你的控制器可以被映射,你可以直接导入你的index.html页面的JavaScript类。

但如果你的项目变得越来越大。 或者您预计这样的情况下,您应该整合的角度与requirejs。 在此文章中,你可以看到这样的集成演示应用程序。



文章来源: Does it make sense to use Require.js with Angular.js? [closed]