Javascript 如何使用requireJS处理依赖关系

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

这就是我的config.js文件的样子:

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
末尾调用函数。