【问题标题】:Why use requireJS instead of an ordered include list?为什么使用 requireJS 而不是有序的包含列表?
【发布时间】:2014-02-14 11:14:21
【问题描述】:

我一直在使用 grunt 文件将我的所有 JS 连接到一个文件中,然后发送给客户端。那我使用 require 调用有什么好处呢?依赖关系是串联顺序所固有的,我不必用额外的代码和另一个第三方库来混淆我的所有 JS。

此外,主干模型(例如)在定义中清楚地说明了它们的继承性。更不用说如果不包含它们的依赖项,它们根本就无法工作。

另外,如果与依赖关系相关的所有 cmets 都在一个位置(grunt 文件)以防止人为错误并且必须打开每个 JS 文件以了解其依赖关系,维护会不会更容易?

编辑

我的(有序)文件列表如下所示:

....
files: [
    "js/somelib.js",
    "js/somelib2.js",
    "js/somelib3.js",
    "js/models.js",
    "js/views.js",
    "js/controllers.js",
    "js/main.js"
], ...

所以对于小型项目来说,也许 requireJS 不值得。

【问题讨论】:

  • 特别是在大型应用程序中,串联所有 js 文件是不可取的;它使首次访问变慢。在使用它们的地方声明依赖关系更容易维护,并且有助于防止向客户端发送他们永远不会使用的 js——或者更糟糕的是,这些 js 已经过时并且已经死了。
  • 您指的是延迟或延迟加载脚本,是的,这对更大的项目很有意义。你说更容易维护,但你没有说它是多么容易。在多个文件而不是一个文件中维护代码听起来更费力。或许在 requireJS 中有一种方法可以将 require 依赖项写入一个文件?...更方便?
  • 考虑一个有 100 个 js 文件的项目,你修改一个不再依赖 foo.js 。你能从文件数组中删除 foo.js 吗?这应该强调管理使用它们的依赖项是如何更容易的,并且少数 js 文件可能会出现这个问题。另请注意,在使用它们的位置声明依赖关系并具有单文件生产构建不是相互排斥的;也没有使用 require.js 或与您已经在做的事情不兼容的类似内容。

标签: javascript web dependency-injection requirejs gruntjs


【解决方案1】:

使用 require.js 可以将应用程序的每个部分分解为可重用模块 (AMD) 并轻松管理这些依赖项。例如,在具有 100 个类的 javascript 应用程序中管理依赖项并不容易。

另外,如果您不想要 require 的所有开销,请查看这个(由创建 require.js 的同一个人开发):https://github.com/jrburke/almond

【讨论】:

  • 是的,例如,您可能希望在开发中使用 requireJS,在生产中使用 almond。我认为 Soundcloud 会做类似的事情。
  • 打开 100 个文件比打开 1 个详细说明依赖关系的文件更容易吗?另外,如果说这些文件中的 10 个都依赖于同一个文件/库,会发生什么?是否值得在构建脚本中了解这一点以进行适当的优先级排序?
  • Require.js 将处理您使用优化器的所有优先级。此外,100 个类可能是一个文件中的 10,000 多行代码——这在开发过程中不是我的事。我还编译了我的灰尘模板并将它们包装在 define 语句中,允许它们被加载。一个文件中的数十个类、模板和外部库将是 imo 的噩梦。
  • 此外,definerequire 方法将自动为您协商所有优先级。 define(['a', 'b', 'c'], ...) 告诉 require 模块需要 a,b,c。优化器会将它们适当地放在一个大的、缩小的生产文件中。
  • 感谢您的回答/cmets。在上面的问题中,我的情况可能并不那么明显。您帮助我更好地理解了用例,而且 Almond 看起来很有希望用于前端设置。
【解决方案2】:

答案取决于您的应用程序的大小和最终用例。

  • 前端(客户端)的单个 site.min.js 有效负载通常针对小文件大小和简单架构(可能从 10 个文件生成 1 个文件)。
  • 基于后端(服务器)的应用程序通常更大更复杂,因此可能需要使用其他工具来帮助管理大型代码库和依赖项(例如 50 个文件)。

一般来说,RequireJS 是值得的,但前提是你有很多文件和依赖项。用于客户的替代品是杏仁。同样,使用这样的工具必须保证需要(许多文件和依赖项)。

orourkedd 的回答也值得一读。

【讨论】:

  • 这个答案没有多大意义——前端和后端有什么关系?
  • 编辑得更有意义?试图解释前端与后端开发的平均用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2010-10-10
相关资源
最近更新 更多