2013-07-17 59 views
0

我遇到了一个问题,试图为组织中的另一个团队编写的一些JavaScript代码创建RequireJS填充。脚本通过一个noraml HTML脚本加载,例如:RequireJS模块尝试加载填充模块

<script src="MyCustomModule.js" type="text/javascript"></script> 

我main.js包含以下内容:

requirejs.config({ 
    paths: { 'text': 'durandal/amd/text' }, 
    shim: { 
     'MyCustomModule': { exports: 'My.Custom.Module' } 
    } 
}); 

我试图访问自定义模块中的各种方式,但这种是我当前的代码:

define(['MyCustomModule'], function (require, MyCustomModule) { 
... 
} 

但每次页/应用程序加载时我得到这表明它无法加载app/MyCustomModule.js(我可以在控制台看到404错误RequireJS错误在哪里t试图从服务器请求文件)。我究竟做错了什么?

回答

1

您还需要包括MyCustomModulepaths

requirejs.config({ 
    paths: { 
     'text': 'durandal/amd/text' 
     'MyCustomModule': 'path/to/MyCustomModule' 
    }, 
    shim: { 
     'MyCustomModule': { 
      exports: 'My.Custom.Module' 
     } 
    } 
}); 

如果你不这样做,define(['MyCustomModule'] (...)将寻找在baseUrl位置的依赖,在你的情况:app/MyCustomModule


换句话说:shim不能“捡”不是由RequireJS加载的全局变量。

+0

是否记录在某处,文档位于:http://requirejs.org/docs/api.html#config-shim没有提及有关设置路径的任何信息(但是当我回来时我肯定会尝试它明天上班)。 – CodingGorilla

+1

几乎你链接的整个章节*类型*暗示填充只适用于RequireJS加载的依赖(*“假设[库]已经安装在baseUrl目录中,否则你可能需要为它们设置路径配置: “*,*”要加载属于或使用shim配置的模块,需要一个正常的require/define调用“*等等),但是你说得对,它似乎没有明确提及它。这是James Burke自己提出的一个相同问题的另一种解决方案(https://groups.google.com/forum/#!msg/requirejs/CI79vnKEsWM/2Vmi38yWC_cJ – kryger

+0

)。这基本上就是我们已经做的,我希望通过实施垫片来清理大约15个这样的文件。看起来垫片是一种“更干净”的方式。也许不是... – CodingGorilla