12

R.js 没有加载我的 shim,因此 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');
});

主.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();
});
4

2 回答 2

11

此问题已在r.js2.1.11修复

只是放置

wrapShim: true在构建配置中。

github问题

配置示例

于 2014-04-07T02:47:29.583 回答
6

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

垫片(通常)不能依赖于 AMD 样式库。不确定 TinyMCE 是否属于 AMD 模块样式类别,但如果是的话……你有麻烦了。如果没有,您也需要对其进行填充。

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

“垫片”配置的重要警告:

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

于 2012-09-20T00:50:05.880 回答