【问题标题】:Require.js 3rd Party Library DependenciesRequire.js 3rd 方库依赖项
【发布时间】:2013-02-19 17:25:39
【问题描述】:

将第 3 方库(JQuery/Underscore/Backbone)定义为模块并将它们用作依赖项有什么好处?

require(["jquery", "underscore"], function($, _) {
    // Use $ and _ in here
});

例如,下划线创建一个全局“_”变量,我可以在上面的函数中轻松使用它,假设在该函数之前包含下划线。

要由 Require 使用,Underscore 需要修改代码以返回值或定义的填充程序。当我可以通过脚本标签包含它时,何必麻烦呢?

我知道它提供了一定程度的间接性,并允许我将其他依赖项映射到这些相同的变量,并将其范围限定为该函数的本地范围。但是,我认为这对于构成应用程序核心的这些类型的 3rd 方库没有用处。

【问题讨论】:

    标签: javascript requirejs


    【解决方案1】:

    在使用 Backbone/requireJs 构建了一些应用程序之后,我发现使用 requireJs 构建主干应用程序没有任何缺点,其中主要依赖项是通过旧学校脚本标签简单加载的。

    无论如何,你必须首先加载这个需求,它被你的大多数模块使用,你可能永远不会与另一个框架交换它。因此,每个模块中的样板代码都无法承受。

    【讨论】:

      【解决方案2】:

      您无需更改库即可在 AMD 加载程序中使用它。

      require.config({paths:{underscore:'//some.cdn/path/to/underscore.js'}})
      
      require(["jquery", "underscore"], function($ /*, note that we don't override _ here */) {
          // Use AMD $ and global _ in here
      });
      

      【讨论】:

      • 我同意 JQuery 你不同意,因为它是 AMD 兼容的。但是,下划线不是,而是创建了一个全局 _ 变量。我想我不明白您定义的下划线路径配置如何工作,除非修改 underscore.js 以返回结果。
      • @Steve 我建议使用纯 JavaScript 版本的下划线。 paths 中的条目只是简化了一件事 - 您只需在 require 调用中键入 underscore 而不是输入整个 URL。但是,您不要使用返回值,而只需使用由普通 JS 下划线设置的全局 _。换句话说,“使用 AMD 来计时加载,但在加载后使用全局下划线对象”
      猜你喜欢
      • 2013-02-28
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多