为什么简化的CommonJS Wrapper语法无法在我的Dojo AMD模块上运行?

Phi*_*hix 5 javascript dojo js-amd

我开始尝试围绕requirejs和新的Dojo AMD结构,但我有一些早期测试的问题:

CG/signup.js:

define(['dojo/_base/fx', 'dojo/dom'], function(fx, dom){    
    return function(){
        this.hidePreloader = function(id){
            var preloader = dom.byId(id);
            fx.fadeOut({node : preloader}).play()
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

这很好用.在master cg.js文件中:

require(['dojo/_base/kernel', 'dojo/_base/loader'])
dojo.registerModulePath('cg', '../cg')

require(['cg/signup', 'dojo/domReady!'], function(Signup){
        var sp = new Signup();
        sp.hidePreloader('preloader')
})
Run Code Online (Sandbox Code Playgroud)

巴姆.完成.但是,在使用Simplified CommonJS Wrapper结构时:

define(function(require){    
    var fx = require('dojo/_base/fx'),
        dom = require('dojo/dom');

    return function(){
        this.hidePreloader = function(id){
            var preloader = dom.byId(id);
            fx.fadeOut({node : preloader}).play()
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

我收到一个undefinedModule错误.它似乎来自这dojo/_base/fx条线,但我不知道为什么.

UPDATE

为了澄清.

index.html脚本

<script type="text/javascript" src="js/dojo/dojo.js.uncompressed.js" data-dojo-config="isDebug:true,async:true"></script>
<script type="text/javascript" src="js/cg.js"></script>
Run Code Online (Sandbox Code Playgroud)

cg.js

require(['dojo/_base/kernel', 'dojo/_base/loader'])
dojo.registerModulePath('cg', '../cg')

require(['cg/signup', 'dojo/domReady!'], function(signup){
    signup.testFunc()
})
Run Code Online (Sandbox Code Playgroud)

JS/CG/signup.js

define(['require', 'exports'], function(require, exports){
    var dom = require('dojo/_base/kernel');
// Any other require() declarations (with very very few exceptions like 'dojo/_base/array throw undefinedModule errors!!!

    // without any error causing requires, this works fine.
    exports.testFunc = function(){
        alert("hello")
    }
})
Run Code Online (Sandbox Code Playgroud)

neo*_*art 3

dojo 完全支持简化的 CommonJS Wrapper 格式。但是,有一个前提条件......您必须没有依赖项数组。

define(function (require, exports, module) {
    var fx = require('dojo/_base/fx'),
        dom = require('dojo/dom');

    // continue...
});
Run Code Online (Sandbox Code Playgroud)

这不会起到同样的作用

define(['require', 'exports', 'module'], function (require, exports, module) {
    var fx = require('dojo/_base/fx'),
        dom = require('dojo/dom');

    // continue...
});
Run Code Online (Sandbox Code Playgroud)

这也不会...

// in this case require, exports and module will not even exist
define([], function (require, exports, module) {
        var fx = require('dojo/_base/fx'),
        dom = require('dojo/dom');

    // continue...
});
Run Code Online (Sandbox Code Playgroud)