requirejs加载模块

时间:2017-10-20 19:07:42

标签: javascript requirejs

我有一个JS文件ClaimStartup.main.js。

(function ($, window,require) {
window.claimStartup = function (options) {                
    this.factoryInstance = null;
}
claimStartup.prototype = {
    init: function (params) {
         var self = this;
        require(['ClaimStartupFactory'],
            function(ClaimStartupFactory) {
                self.factoryInstance = ClaimStartupFactory(claimTypeCode);
            });            
        return self;
    }

ClaimStartupFactory在不同的JS文件中定义(ClaimStartupFactory.js)

define(function (require) {
var claimTypes = {
    'JAL': require('JALModule')
    , 'SeniorCare': require('SeniorCareModule')
    //, 'W2': require('modules/W2')
};
return function (claimType) {
    try {
        return new claimTypes[claimType];
    } catch (error) {
        throw new Error('Unknown Claim Type Specified.');
    }
}
}); 

当我调试这个时,我收到错误

Uncaught Error: Mismatched anonymous define() module: function () {
 return {
    // declare the function to change the background color
    setBackgroundJAL: function (color) {
        console.log('HI');
    }
};

}

JAL.module.js是:

define(function () {
   return {
    // declare the function to change the background color
    setBackgroundJAL: function (color) {
        console.log('HI');
    }
};
});

请让我知道我在使用中做错了什么? 这是MVC5.net应用程序,也许我缺少.net捆绑与requireJS配置。 我的场景需要requirejs配置文件吗?

由于 Sajesh

1 个答案:

答案 0 :(得分:0)

您有requirerequire(moduleName)次调用moduleName,其中require是一个字符串。这是require电话的CommonJS形式。 RequireJS是一个AMD模块加载器,它不执行CommonJS as-is 。它确实提供了一些便于从CommonJS过渡到AMD的设施。因此,它将允许CommonJS形式的require调用,但前提是此require调用define调用中的本地require

local define是通过require调用提供的依赖关系获得的。这与全球空间中存在的全球需求相对立。您无法使用全局require进行CommonJS样式的ClaimStartup.main.js调用。

require中,您正在使用全局require以CommonJS样式进行require调用。这是不允许的,你会得到你得到的错误。你需要:

  • 使用AMD风格的require(['ClaimStartupFactory'], function (factory) {调用,这意味着传递一组依赖项并提供回调:require。请注意,此define(function (require) {是异步的,因此您必须考虑到这一点。

  • 将该文件转换为适当的AMD模块。将其包裹在require中,以便获得可以拨打的本地ClaimStartupFactory.js

您的define文件也存在问题,因为它混合了AMD风格和CommonJS风格。您应该将所有依赖项传递给赋予define(['modules/JALModule'], function (JAL) { var claimTypes = { 'JAL': JAL 的数组:

require

或仅使用CommonJS风格的define(function (require) { var claimTypes = { 'JAL': require('modules/JALModule') 来电:

'ClaimStartupFactory'

我在两种情况下都从列表中删除了npz因为这种依赖是奇怪的:看起来你的模块依赖于它自己。

如果你想在幕后学习所有墙面工作的机制,我还有另外一个answer处理它。