如何使用requireJS处理依赖项

时间:2013-08-06 21:51:29

标签: javascript requirejs

这就是我的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');

});

我认为问题是我的shXml文件周围没有define(...)包装器...我想知道我是否可以在不使用该包装器的情况下完成这项工作。也许出口垫片会这样做。

现在,我每次都会得到this error

此问题也被问到here on github.

1 个答案:

答案 0 :(得分:1)

Check out this article,也来自github。我测试了这个,它运行得很好,但是你必须用这行代替你的brush.js文件的第一行(在syntaxhighlighter里面):

SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);

我甚至不知道为什么会解决这个问题,但确实如此,您可以像这样加载脚本:

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']
        }
    }