Overview
Utopia Fleet Builder uses Grunt as its task runner to automate the build process. The build system:- Compiles AngularJS templates into JavaScript
- Minifies and concatenates JavaScript files
- Minifies and combines CSS stylesheets
- Generates game data from source modules
- Copies static assets to the build directory
All build configuration is defined in
gruntfile.js at the project root.Build Architecture
Grunt Tasks
Main Build Tasks
default (Main Build)
default (Main Build)
The default task runs a complete build of the application.Executes in order:
build-js- JavaScript compilationbuild-css- CSS compilationbuild-index- HTML filesbuild-data- Game data generationcopy- Static assetsclean:templates- Cleanup temporary files
build-js
build-js
Compiles Angular templates and JavaScript into a single minified file.Steps:
- ngtemplates - Compiles HTML templates to
staw-utopia/utopia-templates.js - uglify - Minifies and concatenates:
- All JS files from
src/js/*.js - All JS files from
src/js/common/**/*.js - Generated templates file
- All JS files from
staw-utopia/js/utopia.min.js (with source map)Source maps are generated for debugging minified code.
build-css
build-css
Minifies and combines CSS stylesheets.Steps:
- cssmin - Minifies CSS files:
src/css/*.csssrc/css/common/*.css- Excludes
utopia-print.css
- copy:css - Copies print stylesheet separately
staw-utopia/css/utopia.min.css(main styles)staw-utopia/css/utopia-print.css(print styles)
build-index
build-index
Copies HTML files to the build directory.Copies:
src/*.htmlsrc/staw-utopia/*.html
staw-utopia/*.htmlbuild-data
build-data
Generates the game data JSON file from source modules.Process:
- Executes
npm run datavia Node child process - Runs ESLint on data files
- Executes
src/data/index.jsto generate JSON
staw-utopia/data/data.jsonwatch
watch
Monitors source files and automatically rebuilds on changes.Watches:
Gruntfile.js→ Reloads Grunt configurationsrc/js/*.js,src/js/common/**/*.js→build-jssrc/templates/*.html,src/templates/common/*.html→build-jssrc/css/**.css,src/css/common/*.css→build-csssrc/*.html,src/staw-utopia/*.html→build-indexsrc/data/*→build-data
Grunt Plugin Configuration
ngtemplates (Angular Templates)
Compiles HTML templates into an AngularJS module.Template URLs are simplified to just filenames, making them easier to reference in Angular code.
uglify (JavaScript Minification)
Minifies JavaScript with source map support.- Concatenates all JS files in order
- Includes compiled templates
- Generates source maps for debugging
- Includes original source code in map
cssmin (CSS Minification)
Minifies and combines CSS files.Print styles are excluded from the main bundle and copied separately to allow conditional loading.
copy (Asset Copying)
Copies static assets to the build directory.- Third-party JavaScript libraries
- Font files
- Images and icons
- PDF assets
- jQuery PowerTip plugin
- CSS libraries
clean (Cleanup)
Removes temporary or generated files.Build Outputs
After a successful build, thestaw-utopia/ directory contains:
Build Performance
Full Build
~10-20 secondsRuns all tasks from scratch
Incremental (Watch)
~1-3 secondsOnly rebuilds changed files
Optimization Tips
Troubleshooting
Build fails with 'Task not found'
Build fails with 'Task not found'
Problem: Grunt can’t find a registered task.Solution: Ensure the plugin is loaded:
JavaScript errors in minified code
JavaScript errors in minified code
Problem: Minification breaks the application.Solution:
- Check for missing semicolons in source
- Use the source map for debugging
- Temporarily disable uglify to isolate the issue
Templates not updating
Templates not updating
Problem: Angular template changes don’t appear.Solution:
- Verify watch is monitoring
src/templates/*.html - Run
grunt build-jsmanually - Hard refresh browser (clear template cache)
Data generation fails
Data generation fails
Problem:
build-data task errors.Solution:- Check ESLint output:
npm run lint-data - Fix syntax errors in data files
- Verify all data modules export valid arrays/objects
Customizing the Build
To modify the build process:- Edit
gruntfile.jsat the project root - Add new tasks or modify existing configurations
- Load additional plugins with
grunt.loadNpmTasks() - Register custom tasks with
grunt.registerTask()
Next Steps
Data Structure
Learn how game data is organized
Contributing
Guidelines for submitting changes