Angular Material Template
This template provides a starter project that implements best practices in coding, building and testing AngularJS applications using Material Design. Features include:
- A well-organized component hierarchy starting from
approot. Components are implemented using directives (no dangling controllers). This provides a good architectural direction until Angular 2.0 becomes available.
- Follows AngularJS style guidelines (e.g.
- Uses AngularUI Router for flexible routing and nested views.
- Uses Angular Material to implement an interface that conforms to Material Design.
- Provides logging and exception handling frameworks.
- Provides a Gulp based build system – code changes are reflected in the browser immediately.
- Uses Karma, Mocha and Chai for testing.
Visit our wiki for detailed concepts and useful recipes for extending the template.
- Install Node
- on OSX, install home brew and type
brew install node
- on Windows, use the installer available at nodejs.org
- On OSX you can alleviate the need to run as sudo by following John Papa’s instructions
- on OSX, install home brew and type
- Open terminal
npm install -g node-inspector bower gulp
Clone this repo and run the content locally:
$ npm install $ gulp serve-dev
npm installwill install the required node libraries under
node_modulesand then call
bower installwhich will install the required client-side libraries under
gulp serve-devwill serve up the Angular application in a browser window. It is designed for an efficient development process. As you make changes to the code, the browser will update to reflect the changes immediately.
When you are ready to build the application for production, run the following command:
$ gulp serve-build
This will build a production-ready package in the
The folder structure is somewhat simplified and flatter compared to John Papa’s Gulp Patterns project. The description below includes reasons for some of my customizations.
Highest Level Structure
/bower_components /build /node_modules /src /test
bower_components:Bower components downloaded by
bower install(do not check in)
build:Production build (do not check in)
node_modules:Node.js modules downloaded by
npm install(do not check in)
test:contains client tests. This folder is intentionally kept separate from client source because I expect many different types of tests in this folder (unit, integration, acceptance). On real projects, the number of test files can easily exceed the number of source files, hence I like to keep the clutter away from the real source – just my preference!
Source Folder Structure
/src /components /core /framework /images /app.module.js /app.scss /index.html
Below this level you will find various folders that arrange the application’s functionality into logical modules.
framework:Container for reusable services such as logging, exception handling, routing, security, local storage etc. These services are expected to work out-of-the-box without any changes for most applications. The template provides sample implementations for the first three. (This folder is called
blocksin the gulp-patterns project.)
core:Contains functionality that is shared across the application and will probably need customization for a specific application. This includes directives, filters and services and styles common to the entire application.
components:Contains all the components of the application. We recommend thinking of an Angular application as a tree of components, starting with the
appcomponent as the root of this tree.
images:Images used in the application.
Displays all of the available gulp tasks.
gulp vet --verbose
Displays all files affected and extended information about the code analysis.
Runs all unit tests using karma runner, mocha, chai and sinon with phantomjs. Depends on vet task, for code analysis.
Runs a watch to run all unit tests.
Remove all files from the build and temp folders
Remove all images from the build folder
Remove all fonts from the build folder
Remove all styles from the build folder
Fonts and Images
Copy all fonts from source to the build folder
Copy all images from source to the build folder
Compile less files to CSS, add vendor prefixes, and copy to the build folder
Angular HTML Templates
Create an Angular module that adds all HTML templates to Angular’s $templateCache. This pre-fetches all HTML templates saving XHR calls for the HTML.
gulp templatecache --verbose
Displays all files affected by the task.
Serving Development Code
Serves the development code and launches it in a browser. The goal of building for development is to do it as fast as possible, to keep development moving efficiently. This task serves all code from the source folders and compiles less to css in a temp folder.
Building Production Code
Copies all fonts, copies images and runs
gulp htmlto build the production code to the build folder.
Serving Production Code
Serve the optimized code from the build folder and launch it in a browser.
This template is heavily influenced by John Papa’s AngularJS Style Guide and his Gulp Patterns project. I would like to take this opportunity to thank John for providing these excellent resources to make our jobs easier and more enjoyable.