Javascript 如何使用requireJS处理依赖关系
这就是我的config.js文件的样子:Javascript 如何使用requireJS处理依赖关系,javascript,requirejs,Javascript,Requirejs,这就是我的config.js文件的样子: require.config({ baseUrl: '../', paths: { jQuery: 'js/jquery-1.10.2.min', uiEffectsCore: 'js/jQueryUIEffectsCore', //Handlebars: 'js/handlebars', SyntaxHighlighter: 'j
require.config({
baseUrl: '../',
paths: {
jQuery: 'js/jquery-1.10.2.min',
uiEffectsCore: 'js/jQueryUIEffectsCore',
//Handlebars: 'js/handlebars',
SyntaxHighlighter: 'js/syntaxhighlighter/scripts/shCore',
shXml: 'js/syntaxhighlighter/scripts/shBrushXml'
},
shim: {
jQuery: {
exports: 'jQuery'
},
uiEffectsCore: {
deps: ['jQuery']
},
shXml: {
deps: ['SyntaxHighlighter']
}
}
});
require(['js/main']);
然后我的main.js如下所示:
define(function(require){
require('jQuery');
require('uiEffectsCore');
require('SyntaxHighlighter');
require('shXml');
});
define(function(require){
require('jQuery');
require('uiEffectsCore');
require('SyntaxHighlighter');
require('shXml');
require('shCss');
require('shJs');
require('Raphael');
我认为问题在于在我的shXml文件周围没有define(…)
包装器。。。我想知道我是否可以不用包装纸就能完成这项工作。也许一个出口垫片可以做到这一点
就目前的情况而言,我每次都会感到失望
同样来自github的人也提出了这个问题。我对此进行了测试,效果很好,但您必须将brush.js文件的第一行(在syntaxhighlighter中)替换为以下行:
SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
我甚至不知道为什么这样可以解决这个问题,但确实如此,您可以像这样加载脚本:
define(function(require){
require('jQuery');
require('uiEffectsCore');
require('SyntaxHighlighter');
require('shXml');
});
define(function(require){
require('jQuery');
require('uiEffectsCore');
require('SyntaxHighlighter');
require('shXml');
require('shCss');
require('shJs');
require('Raphael');
您需要在配置中为依赖项添加一个垫片:
paths: {
SyntaxHighlighter: 'js/syntaxhighlighter/scripts/shCore',
shXml: 'js/syntaxhighlighter/scripts/shBrushXml',
shCss: 'js/syntaxhighlighter/scripts/shBrushCss',
shJs: 'js/syntaxhighlighter/scripts/shBrushJScript'
},
shim: {
shXml: {
deps: ['SyntaxHighlighter']
},
shCss: {
deps: ['SyntaxHighlighter']
},
shJs: {
deps: ['SyntaxHighlighter']
}
}
问题是您正在使用的库与AMD不兼容。您必须提前手动指定并加载所有依赖项才能使代码正常工作。@RobW当然,我现在就是这么做的,只需在my require.js脚本之前将syntaxhighlighter内容保留在正则脚本标记中。我相信您可以将依赖项放在
shim.shXml.deps
数组中,请参阅@RobW updated question,仍然没有幸运您以前的main.js格式更好。请记住,requireJS无法神奇地同步解决所有依赖项。必须指定依赖项数组中的所有依赖项;RequireJS将解析所有依赖项,并最终在require
末尾调用函数。