使用 RequireJS 自动加载依赖模块

automatically loading of a dependent module using RequireJS

本文关键字:依赖 模块 加载 RequireJS 使用      更新时间:2023-09-26

我正在使用Knockout和Require。我想在一个单独的模块中有一些 Knockout 处理程序。没有依赖于此模块的 JavaScript 代码,但它用于 HTML 中的数据绑定属性。

我如何告诉 Require,每当添加用于 Knockout 的脚本时,它也应该添加此模块,并且它依赖于 Knockout(它应该能够使用"ko")?

如果我没看错的话,这只是关于"定义一个具有依赖项的模块",这是一个非常基本的requirejs。看看requirejs api文档中的"具有依赖关系的定义函数"部分。

以下是文档中的示例:

//my/shirt.js now has some dependencies, a cart and inventory
//module in the same directory as shirt.js
define(["./cart", "./inventory"], function(cart, inventory) {
        //return an object to define the "my/shirt" module.
        return {
            color: "blue",
            size: "large",
            addToCart: function() {
                inventory.decrement(this);
                cart.add(this);
            }
        }
    }
);

因此,您也可以在淘汰处理程序中执行此操作,在那里您可以将淘汰依赖项传递给函数。然后,在每个需要 knockout 的模块中,将 knockout 处理程序添加到 define 语句中的依赖项中。如果你不需要它们在模块中,而只需要在 DOM 中,那么你就不必将它们传递给函数参数。您可以将挖空处理程序添加到定义依赖项列表的末尾,而无需添加其他参数,如下所示:

define(["knockout", "knockout-handlers"], function(knockout) {
        //you're module using knockout, 
        //knockout-handlers will be available inside the dom
});

当我重新思考我的答案时,我得出的结论是循环依赖在这里不是问题。你可以为"自动依赖"使用填充码配置:

//within your config
requirejs.config({
    shim: {
        'knockout': {
            deps: ['knockout-handlers']
        }
    }
});
//your knockout handlers module definition
define(["knockout"], function(knockout) {
        return {
          //Your knockout-handler module
        }
});

这应该在每次加载淘汰赛时加载您的淘汰赛处理程序。