首页 新闻 会员 周边

为什么Seajs一定要在factory方法的参数规定是require,exports,module这样的东西?

0
悬赏园豆:5 [已关闭问题] 关闭于 2014-11-06 21:47

研究过Seajs都会发现factory方法参数中必须是特定的require,exports,module这三个参数,这个虽然是符合CMD规范,但是为什么我们不能将三个参数一起放在一个对象里面呢?

我知道 require是在define的时候要实现在factory.toString()中通过正则表达式找到require中定义的依赖项,但是我们把正则表达式改一下我们同样能够找到:

例如:

define('a',['b','c'],function(cmd){
    var b = cmd.require('b');

    var c = cmd.require('c');

});

此时将原来的正则表达式----- /"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g,

改成 /"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*\.require|(?:^|[^$])\b\.require\s*\(\s*(["'])(.+?)\1\s*\)/g,

详见红色加粗部分;

 

由于使用seajs的风格,我在spm压缩合并的时候需要特别小心,在使用其他压缩合并工具的时候有会出现require被混淆掉;而上述方案我则可以只需要一个简单的压缩合并工具,就可以了;不用纠结在spm的build上了;

其实我想知道是不是这个规范不能被打破? 希望大牛能解决下我的疑问;谢谢;

buns.li的主页 buns.li | 菜鸟二级 | 园豆:202
提问于:2014-11-05 10:51
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册