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

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'); }); 

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

这个问题已经在r.js 2.1.11中解决了

只是地方

wrapShim: true在构buildconfiguration中为wrapShim: true

github问题

configuration示例

最近我遇到了一些类似的问题,让我有点难过。 我对TinyMCE代码并不熟悉,但是我看到你还没有把它清除。

垫片(一般)不能依赖于AMD风格的库。 不知道TinyMCE是否属于AMD模块types,但是如果它确实存在,那么你遇到了麻烦。 如果没有的话,你也需要把它擦亮。

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

“垫片”configuration的重要警告:

只有使用其他“shim”模块作为shimmed脚本的依赖关系,或者没有依赖关系的AMD库,并在创build全局(如jQuery或lodash)之后调用define()。 否则,如果使用AMD模块作为shimconfiguration模块的依赖项,则在构build之后,只有在构build中的shimmed代码执行之后才能评估AMD模块,并且会发生错误。 最终的解决办法是升级所有的shimmed代码,以便有可选的AMD define()调用。