Require.js + R.js优化器忽略Shim

时间:2012-07-13 15:36:39

标签: javascript node.js requirejs

R.js没有加载我的垫片,因此jQuery在tinyMCE之前加载并且在加载之前初始化了tiny。我怎样才能让垫片起作用?:

积js.js:

var requirejs = require('requirejs');
var config = {
    mainConfigFile: '../js/main.js',
    include: [],
    name: 'main',
    out: '../js/build/build.js',
};

    requirejs.optimize(config, function (buildResponse) {
    var contents = fs.readFileSync(config.out, 'utf8');
});

main.js:

require.config({
    paths: {
        jQuery: 'common/libs/jquery/jquery-min',
        TinyMCE: 'common/libs/tinyMCE/tiny_mce',
    },
    shim: {
        'jQuery': {
            deps:['TinyMCE'],
            exports: '$',
        },
       'jQueryUi': {
            deps: ['jQuery']
        },
        'jQuerySelectmenu': {
            deps: ['jQuery', 'jQueryUi']
        },
        'jQueryAutosize': {
            depts: ['jQuery']
        },
        'Underscore': {
            exports: '_'
        },
        'Backbone': {
            deps: ['Underscore', 'jQuery'],
            exports: 'Backbone'
        }
    }
});

require(['common/src/app'], function (App) {
    App.initialize();
});

2 个答案:

答案 0 :(得分:11)

此问题已在r.js 2.1.11

修复

只是放置

构建配置中的

wrapShim: true

github issue

configuration example

答案 1 :(得分:6)

我最近遇到了一些类似的问题让我有点难过。我不熟悉TinyMCE代码,但我发现你还没有填充它。

垫片(通常)不能依赖AMD样式库。不确定TinyMCE是否属于AMD模块样式类别,但如果确实如此......那你就麻烦了。如果没有,你也需要垫片。

https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#wiki-shim

  

“shim”配置的重要警告:

     

仅使用其他“shim”模块作为shimmed脚本的依赖项,或者没有依赖项的AMD库,并在创建全局(如jQuery或lodash)之后调用define()。否则,如果您使用AMD模块作为shim配置模块的依赖项,则在构建之后,可能不会在构建中的填充代码执行之后评估该AMD模块,并且将发生错误。最终的解决方法是将所有已调整的代码升级为可选的AMD define()调用。