我使用Grunt來構建項目,但它並不重要,因爲所有你需要的是組合文件,所以maven應該超過能力。
我希望我的dev版本還是靠ExtJS的動態類加載器,所以我不必重建每當我修改一個文件的項目,只有產版將精縮到一個單一的文件。在我開始工作之前有幾個陷阱,這就是我最終的結果。這也是ExtJS6,但它可能仍然應該是相同的。
它全部由後端變量dev
控制,當設置爲false
時,將使用縮小的來源。
的index.html(我使用一些元模板語言爲例)
<html>
<head>
{{if dev}}
<script src="/ext/ext-all-debug.js"></script>
{{else}}
<script src="/ext/ext-all.js"></script>
{{/if}}
<script>
var dev = {{dev}};
Ext.Loader.setConfig({enabled: dev});
</script>
{{if dev}}
<script src="/app.min.js"></script>
{{else}}
<script src="/app.js"></script>
{{/if}}
</head>
<body></body>
<html>
的應用程序文件,當動態加載器被禁用requires
指令無法正常工作,所以我不得不添加類似條件這無處不在:
Ext.define('MyApp.view.Panel', {
extend: 'MyApp.view.GenericPanel',
requires: dev ? [
'MyApp.view.AnotherView',
] : [],
...
});
Gruntfile。JS(如果你只需要更換拼接與uglify
到處concat
)
module.exports = function(grunt) {
grunt.initConfig({
pkg : grunt.file.readJSON('package.json'),
uglify : {
build: {
files: {
'../app.min.js': ['../app/view/GenericPanel.js', '../app/**/*.js', '../app.js'],
}
}
},
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default', [ 'uglify' ]);
};
咕嚕的project.json:
{
"name": "My App",
"version": "1.0.0",
"devDependencies": {
"grunt": "~0.4.5",
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-uglify": "^1.0.1"
}
}
文件的順序關係,在默認情況下咕嚕將使用字母順序。如果你擴展某個類,父類必須包含更高的類。 app.js
應該在最後。除此之外,它在單個混合文件中運行良好,因此我不必進一步自定義文件順序。 Grunt擁有非常強大的path patterns,所以如果您需要確保某個文件包含在內,那麼您只需在其他路徑模式之前列出它,並且它足夠聰明,不會包含它兩次。
我建議你從簡單的連接開始,不要縮小,只有在那些作品嚐試縮小它。縮小時,可能需要小心全局函數和變量,因爲如果縮小器過於激進,它們可以重命名。 Grunt的縮小器幾乎可以用默認設置工作,我只需要對我的代碼做一些小的修改(與全局函數有關)。
+1 @serg。 這是很棒的信息!我正在瀏覽maven文檔並意識到出了什麼問題。縮小器只是試圖縮小一個特定的文件夾,而不是需要縮小的文件夾。我需要更改我想縮小的源文件夾。我也確實需要確保我正在按照正確的順序縮小這些文件夾,最後app.js就像你說的那樣。我還將這些條件添加到了需求語句中,這是一個巨大的幫助!這使我能夠設置一個配置文件,以使用縮小的應用程序或正常的應用程序進行故障排除。 – evanrich3891