2015-02-11 74 views
3

我會盡量簡化我的問題。我有一個主要的應用程序(基本上是單頁應用程序),它需要基於自己的配置文件的JavaScript文件。自動列出require.js依賴與異步加載r.js優化

JSON的配置文件看起來像這樣(即配置文件是不相關的requirejs,它是應用程序自己的配置文件):

"modules": [ 
    { 
     "categories": "categories/main" 
    } 
] 

主要應用基本上是加載其配置JSON文件,並要求運行時模塊,是這樣的:

function loadModule(id, modulePath) { 
    require([modulePath], function(module) { 
     // modulePath is categories/main 
    }); 
} 

我有一個AMD的配置,看起來就像是:

require.config({ 
    'paths': { 
     'categories':'js/app/modules/categories', 

模塊看起來是這樣的:

define('categories/main', [ 
    'categories/data/navigation' 
], function (
    navigation 
) { 

    'use strict'; 

    var CategoriesModule = function() { 

    }; 

    CategoriesModule.id = 'categories'; 

    return CategoriesModule; 
}); 

因此,這是工作的所有罰款與非minified的版本。

請注意,即使我在我的應用程序中動態加載模塊,我仍然希望模塊在我的應用程序中唯一一個縮小文件內縮小。我不想在運行時發出http請求來加載模塊。

爲此,我已包括在我的優化構建模塊:

require.config({ 
    include: [ 
     'app/modules/categories/main' 

這工作也很不錯,但這裏是我想要做的事。

如果你回頭看看模塊,它需要另一個文件:'categories/data/navigation'

而這個文件沒有被縮小,因爲顯然r.js沒有辦法跟蹤在運行時加載的文件的依賴關係。

我有一種期望的r.js來跟隨我在這個優化構建配置中「包含」的依賴關係。

所以要解決這個問題,我需要做在我的優化構建的配置如下:

require.config({ 
    include: [ 
     'app/modules/categories/main', 
     'app/modules/categories/data/navigation' 

換句話說,該模塊使用文件列表是什麼我試圖避免。我認爲findNestedDependencies會解決問題,但它不會。這裏是我的r.js配置信息:

options: { 
    paths: { 
     'main': 'js/main' 
    }, 
    logLevel: 0, 
    baseUrl: 'public', 
    mainConfigFile: ['build/optimization/require.config.js', 'public/js/app/config/amd.js'], 
    generateSourceMaps: false, 
    preserveLicenseComments: true, 
    name: 'main', 
    out: 'public/js/main.min.js', 
    removeCombined: true, 
    findNestedDependencies: true, 
    uglify: { 
     beautify: false, 
     mangle: false 
    } 
} 

這個程序是相當大的。對我來說,限制創建模塊,一個「即插即用」的時候所需的必要的工作是很重要的模塊就是我後。

列出模塊用於縮小的所有文件是我希望找到的解決方案。

任何提示?任何想法?

爲什麼當我在優化配置中包含模塊的主文件時,r.js無法跟蹤我的模塊的依賴關係?

任何幫助表示讚賞。

乾杯。

回答

1

我會回答我自己的問題。 r.js無法關注模塊的依賴關係,因爲我在構建優化配置中包含了模塊的完整路徑。使用路徑快捷方式(也是模塊的已定義名稱),r.js可以遵循依賴關係。

我不知道爲什麼,但我想這可能是有道理的。

相反,使用:

require.config({ 
include: [ 
    'app/modules/categories/main' 

的包括應該是:

require.config({ 
    include: [ 
     'categories/main' 

大概是因爲需要配置路徑:

require.config({ 
    'paths': { 
     'categories':'js/app/modules/categories' 

希望這將有助於有人用相同的有點問題!