Javascript 在AMD模块中使用敲除es5插件

Javascript 在AMD模块中使用敲除es5插件,javascript,jquery,knockout.js,dojo,Javascript,Jquery,Knockout.js,Dojo,例如,我可以在requirejs应用程序AMD模块中使用knockout。实际使用dojo工具包 // Main viewmodel class define(['knockout-x.y.z'], function(ko) { return function appViewModel() { this.firstName = ko.observable('Bert'); }; }); 但是我如何使用knockoutjs扩展knockout-es5这在AMD模块

例如,我可以在requirejs应用程序AMD模块中使用knockout。实际使用dojo工具包

// Main viewmodel class
define(['knockout-x.y.z'], function(ko) {
    return function appViewModel() {
        this.firstName = ko.observable('Bert');
    };
});

但是我如何使用knockoutjs扩展knockout-es5这在AMD模块中不起作用。

你是对的,knockout-es5不是AMD兼容模块。然而,这并不妨碍您在RequireJS中正确使用它。您需要做的是在require配置中使用一个shim()。之所以需要这样做,是因为您需要告诉require插件依赖于Knockout,因此无法首先加载

以下是您的require配置的外观:

var require = {
    paths: {
        'ko': 'knockout.min',
        'koES5': 'knockout-es5.min',
    },
    shim: {
        'koES5': { deps: ['ko'] }
    }
};
define(['ko', 'koES5'], function(ko) {
    return function appViewModel() {
        this.firstName = ko.observable('Bert');
    };
});
这将创建两条路径,一条到Knockout,另一条到Knockout-es5。在垫片中,我们告诉require,敲除es5取决于敲除。这确保了加载以正确的顺序进行

现在,您的RequireJS模块应该如下所示:

var require = {
    paths: {
        'ko': 'knockout.min',
        'koES5': 'knockout-es5.min',
    },
    shim: {
        'koES5': { deps: ['ko'] }
    }
};
define(['ko', 'koES5'], function(ko) {
    return function appViewModel() {
        this.firstName = ko.observable('Bert');
    };
});

注意:从技术上讲,您不需要将ko作为需求,因为koES5已经要求加载它,因为它被标记为依赖项。另外,koES5不需要变量,因为它不会返回任何您想要使用的内容,您只需添加它作为确保文件加载的必要条件。

对不起,我编辑了文章,我使用的是dojo toolkit。它不适用于dojo。