2013-12-11 122 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

要求配置是全局的。你只能創建子需求對象,但這是一個非常狹窄的用例(從未用過單元測試問題)。 –