【问题标题】:requireJS - a few questionsrequireJS - 几个问题
【发布时间】:2013-06-27 05:20:11
【问题描述】:

抱歉,我有点懒惰,没有亲自尝试,但我认为 Stackoverflow 上的一个不错的答案也可能对其他一些人有所帮助。我正在考虑是否使用requireJS 来加载我的模块。目前我正在自己做这件事,所以我对 requireJS 有一些疑问。

  • requireJS 如何处理多个引用(是否缓存文件/模块)?

更准确地说,如果您有类似require(["some/module", "a.js", "b.js"], function...}); 的调用,并且您在稍后的.require 或.define 调用中再次引用a.js 或b.js,requireJS 如何处理这些?我的猜测是,它会完全忽略那些额外的引用,对吗?如果是这样,是否可以强制 requireJS 重新加载脚本?

  • requireJS 是否总是通过网络传输文件,或者您可以静态加载模块?

我通常做的是连接我所有的 js 文件(包括模块),除了那些需要根据运行时条件加载的文件。据我阅读 requireJS 文档,您可以为模块定义自己的 names。所以我的问题是,你能加载一个已经存在于脚本中的模块,而不是通过网络传输它吗? 据我了解文档,名称是根据模块的路径位置和文件名自动创建的,所以这对我的要求没有意义。

【问题讨论】:

    标签: javascript module requirejs


    【解决方案1】:

    requirejs.undef() 应该可以解决问题

    【讨论】:

      【解决方案2】:

      通常,一个模块只会被 require.js 加载一次。 require.js 将始终解决依赖关系并以正确的顺序加载模块,这样您就不必关心这些了。随后对同一模块的require 调用将立即产生它。

      不可能重新加载模块。如果您确实需要多次加载同一个模块(不幸的是,这表明您的模块设计有问题),您可以查看Multiversion support.

      我不确定我是否理解“静态加载模块”的意思。但是,如果我猜对了,您想将多个模块作为一个模块加载并单独使用它们。这个有可能: 通常在您的模块中,您将执行以下操作:

      define(['moduleA', 'moduleB', 'moduleC'], function (a, b, c) {
          ...
          return exports;
      });
      

      exports 或多或少可以是任何东西,一个函数,一个对象,等等。所以你也可以这样做:

      define(['moduleA', 'moduleB', 'moduleC'], function (a, b, c) {
          ...
          return {moduleA: a, moduleB: b, moduleC: c};
      });
      

      将它们全部导出。

      但请注意,您应该真正看看optimization tool。它可以将相关模块组合在一起。

      最后,自动命名是一种误解,您可以明确地说明模块的名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 2015-01-03
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多