我會盡量簡化我的問題。我有一個主要的應用程序(基本上是單頁應用程序),它需要基於自己的配置文件的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無法跟蹤我的模塊的依賴關係?
任何幫助表示讚賞。
乾杯。