gpt4 book ai didi

javascript - requireJS 可选依赖

转载 作者:行者123 更新时间:2023-12-03 00:22:31 27 4
gpt4 key购买 nike

我正在向我开发的 JavaScript 库添加 AMD 支持。

该库可能使用 jquery,但如果未加载 jquery,它仍然可以工作。

定义模块依赖项时,有一种方法可以将依赖项设置为“可选”,这样如果缺少该库,该模块仍然可以工作?

最佳答案

我最近遇到了完全相同的问题,以下是我解决它的方法。我定义了一个名为 optional 的 RequireJS 插件,它通过显式地将无法加载的模块定义为空对象来忽略它们(但我想您也可以将其定义为 null 或其他任何您想要的值)。

这里是代码(使用 RequireJS 2.1.15 测试):

define("optional", [], {
load : function (moduleName, parentRequire, onload, config){

var onLoadSuccess = function(moduleInstance){
// Module successfully loaded, call the onload callback so that
// requirejs can work its internal magic.
onload(moduleInstance);
}

var onLoadFailure = function(err){
// optional module failed to load.
var failedId = err.requireModules && err.requireModules[0];
console.warn("Could not load optional module: " + failedId);

// Undefine the module to cleanup internal stuff in requireJS
requirejs.undef(failedId);

// Now define the module instance as a simple empty object
// (NOTE: you can return any other value you want here)
define(failedId, [], function(){return {};});

// Now require the module make sure that requireJS thinks
// that is it loaded. Since we've just defined it, requirejs
// will not attempt to download any more script files and
// will just call the onLoadSuccess handler immediately
parentRequire([failedId], onLoadSuccess);
}

parentRequire([moduleName], onLoadSuccess, onLoadFailure);
}
});

然后您可以选择使用简单的方法来请求模块

require(['optional!jquery'], function(jquery){...});

知道如果 jquery 模块无法加载,传递给回调函数的参数将是一个空对象。

关于javascript - requireJS 可选依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14164610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com