Javascript RequireJS-导出一组函数
我遇到了RequireJS问题,当我有require语句时,我无法导出一组函数 假设我有一个名为mySubFile.js的文件,其中,首先需要注入jQuery,然后是另一个依赖项。现在,假设我有myFunction,我想导出它以便从另一个文件调用它Javascript RequireJS-导出一组函数,javascript,jquery,dependency-injection,requirejs,dependencies,Javascript,Jquery,Dependency Injection,Requirejs,Dependencies,我遇到了RequireJS问题,当我有require语句时,我无法导出一组函数 假设我有一个名为mySubFile.js的文件,其中,首先需要注入jQuery,然后是另一个依赖项。现在,假设我有myFunction,我想导出它以便从另一个文件调用它 define('mySubFile', ['jquery'], function ($) { require(['dependency1'], function (dependency1) { let 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());
});
});
这是行不通的。我得到:
无法读取未定义的属性“myFunction”
另一方面,如果我定义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) {
但您不想使用它,因为:
可以访问myFunction,但我需要首先解析jQuery
当然,在返回值之前必须先解析jquery
,但是让我们先假设有一种神奇的方法可以让您的其他尝试返回您想要的值,让我们从何时解析的角度来看它。这就是你所拥有的:
define('mySubFile', ['jquery'], function ($) {
require(['dependency1'], function (dependency1) {
下面是发生的情况:
define
调用。RequireJS看到一个模块名(mySubFile
),一个依赖项列表['jquery']
,以及一个回调jquery
,并用它调用回调require
调用。RequireJS看到一个依赖项列表和一个回调jquery
也必须先解析,然后才能返回任何内容。在define
回调中使用require
不会改变任何情况
在
define
中获得require
调用以您想要的方式工作将需要大量重写。顺便说一句,您遇到的问题不是特定于RequireJS的,而是所有异步代码都存在的问题。有关一般问题及其解决方法,请参阅。您的意思是在mySubFile模块之前需要jquery?@NiteshI需要先注入jquery。问题不是由jquery引起的,我已经能够在其他任何事情之前获得它。在从另一个文件访问外部函数时,如果该子文件有require语句,我会遇到一个问题。感谢您的解释。我知道问题的异步性。如果我真的像你开始说的那样,我没有任何未定义的问题,但是我的应用程序只是在某种程度上崩溃了,因为我没有首先解决jquery。我正在看一看您链接的问题,但找不到先解决jquery的方法。可能使用$document(ready)?我不清楚您为什么会遇到问题<在调用对define
的回调之前,解析code>jquery。如果dependency1
也依赖于jquery
,那么您需要将jquery
放在它的依赖项列表中:在它的define
调用中,或者如果它是第三方非AMD代码段,您需要在RequireJS配置中设置一个shim
,将jquery
列为依赖项。例如,现在我遇到了一个问题,我必须触发一个给定函数,该函数位于$(document).ready之后的另一个js文件中,但不知何故我得到了externalFile.thatFunction()未定义,因为externalFile似乎与jQuery同时得到解决。