2013-12-11 70 views
0

我正在构建一个AMD模块,它使用来自子文件夹的全局变量的多个库。太减少代码并防止全局泄露我想使用配置,但似乎require配置只能在全局上下文中使用(有多讽刺)?!模块配置路径和垫片

我想我的模块里面做基本上是这样的:

define(['require'], function(require) { 
    require.config({ 
    baseUrl: 'sub/directory/', 
    paths: { 
     libfoo: 'libfoo23.min', 
    }, 
    shim: { 
     libfoo: { 
     exports: 'Foo' 
    } 
    }); 
    require(['libfoo'], function(Foo) {}); 
}); 

回答

1

不,你不能那样做。

而且有一个很好的理由:如果模块加载配置被定义在里面需要加载配置的模块,谁先到?这是一个鸡和鸡蛋的问题。

RequireJS试图减少全球污染;通过引入仅需要引导的2个全局变量(require()define())就成功了。

+0

但是,这并不意味着模块无法清除其依赖关系。我不太清楚这是件好事吗?! –

+0

这是正确的,一个模块不能完成他自己的依赖关系。这对我来说也是一个障碍,但同时它也阻止了一个模块在最终构建中被包含两次 –

1

我通常做这种方式。

config.js

require.config({ 
    baseUrl: 'sub/directory/', 
    paths: { 
     libfoo: 'libfoo23.min', 
    }, 
    shim: { 
     libfoo: { 
     exports: 'Foo' 
    } 
}); 

bootstrap.js

define([ 'config' ], function() { 
    require([ 'main' ]); 
}); 

而在HTML,我引导这样:

<script data-main="/public/app/bootstrap" src="~/public/vendor/requirejs/require.js"></script> 

其他的一切(应用程序)从main.js开始

+0

这样你就可以在全局require对象和全局配置上运行,这可能不是一个好主意。 –

+0

要求配置是全局的。你只能创建子需求对象,但这是一个非常狭窄的用例(从未用过单元测试问题)。 –