ExtJS is pretty nice, overall, and it comes with a powerful build tool – Sencha Cmd.
Running builds with it can be tedious, because it doesn’t have any up-to-date checks – it constantly rebuilds stuff it doesn’t need. Oh, the time wasting!
As it turns out, Sencha Cmd is an Ant-based build tool. Which means we can create Gradle builds that augment it – given us support for such things as up-to-date checks.
Like this:
| ant.importBuild 'build.xml' | |
| def packages_dir = file('../packages') | |
| clean { | |
| doLast { delete 'bootstrap.js', 'bootstrap.css', 'bootstrap.json' } | |
| } | |
| refresh { | |
| inputs.dir 'app' | |
| inputs.file 'app.json' | |
| packages_dir.listFiles().each() { package_dir -> inputs.dir new File(package_dir, 'src') } | |
| outputs.file file('bootstrap.js') | |
| outputs.file file('bootstrap.json') | |
| } | |
| js { | |
| inputs.dir 'app' | |
| packages_dir.listFiles().each() { package_dir -> inputs.dir new File(package_dir, 'src') } | |
| outputs.file file("../build/${this.property('build.environment')}/${projectName}/app.js") | |
| } | |
| resources { | |
| inputs.dir 'resources' | |
| packages_dir.listFiles().each() { package_dir -> inputs.dir new File(package_dir, 'resources') } | |
| outputs.file file("../build/${this.property('build.environment')}/${projectName}/resources") | |
| } | |
| sass { | |
| inputs.dir 'sass' | |
| packages_dir.listFiles().each() { package_dir -> inputs.dir new File(package_dir, 'sass') } | |
| outputs.file file("../build/${this.property('build.environment')}/${projectName}/resources/${projectName}-all.css") | |
| outputs.file file('bootstrap.css') | |
| } | |
| page { | |
| // what are the inputs to page, I wonder? | |
| // the outputs are the microloader.js and the index.html... | |
| } |
| # the default Build Environment. Production is the default for Sencha Cmd. | |
| # Use -Dbuild.environment on the command line to change, otherwise it doesn't get passed to the ant build properly | |
| build.environment=production | |
| # The project name. Should match what is in the app.json file | |
| projectName=MyApp |
Share and Enjoy!
