RequireJS - 导出一组函数

RequireJS - Exporting a Set of Functions

我在使用 RequireJS 时遇到问题,当我有一个 要求声明。

假设我有一个名为 mySubFile.js 的文件,首先我需要注入 jQuery然后是另一个依赖。现在,假设我有 myFunction,我想导出它以便从另一个文件调用。

define('mySubFile', ['jquery'], function ($) {
    require(['dependency1'], function (dependency1) {

       let myFunction = function(){ return "Hey There"; }

       return : {
                    myFunction : myFunction
       }

    });
});

现在假设我想从 myFile.js:

调用该函数
define('myFile', ['jquery'], function ($) {
    require(['mySubFile'], function (mySubFile) {

       console.log(mySubFile.myFunction());

    });
});

这不起作用。我得到:

Cannot read property 'myFunction' of undefined.

另一方面,如果我定义mySubFile.js如下:

define('mySubFile', ['jquery', 'dependency1'], function ($, dependency1) {

   let myFunction = function(){ return "Hey There"; }

   return : {
               myFunction : myFunction
   }

});

我可以访问 myFunction 但我需要先解析 jQuery.

我正在努力寻找解决方案,但仍然没有找到任何东西。

我该如何解决?

如果您总是需要 jQuery 在您的模块之前可用,您可以这样做:

define("mySubFile", function(require, exports, module){ 
    var a = require("jQuery"), // dependency
        b = require("knockout"); // dependency
    /* rest of the code for this module */ 

    let myFunction = function(){ return "Hey There"; }

   return : {
            myFunction : myFunction
         }
}); 

鉴于您在问题中显示的代码,这确实是要走的路:

define('mySubFile', ['jquery', 'dependency1'], function ($, dependency1) {

但您不想使用它,因为:

can access myFunction but I NEED to first resolve jQuery.

好吧,在你可以 return 一个值之前肯定 jquery 必须被解决,但是让我们暂时假设有一些魔法可以让你的其他尝试 return 你想要的价值,让我们从什么时候解决什么的角度来看它。这就是你拥有的:

define('mySubFile', ['jquery'], function ($) {
    require(['dependency1'], function (dependency1) {

事情是这样的:

  1. define调用被执行。 RequireJS 看到一个模块名称 (mySubFile)、一个依赖列表 ['jquery'] 和一个回调。
  2. RequireJS 解析 jquery 并用它调用回调。
  3. 执行require调用。 RequireJS 看到一个依赖列表和一个回调。
  4. RequireJS 解析 dependency1 并调用回调。

这里也是,jquery 必须先解决,然后才能 return 任何事情。在 define 回调中有一个 require 不会对此有任何改变。

要使 define 中的 require 调用以您想要的方式工作,需要进行大量重写。顺便说一句,您遇到的问题不是 RequireJS 特有的,而是所有异步代码共有的问题。请参阅 this question 了解一般问题及其解决方法。