• This repository has been archived on 26/Mar/2018
  • Stars
    star
    5,749
  • Rank 6,669 (Top 0.2 %)
  • Language
    JavaScript
  • Created over 11 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Yeoman generator for AngularJS

AngularJS generator Build Status Gitter

Yeoman generator for AngularJS - lets you quickly set up a project with sensible defaults and best practices.

There are many starting points for building a new Angular single page app, in addition to this one. You can find other options in this list at Yeoman.io.

Roadmap for upcoming plans/features/fixes

Usage

For step-by-step instructions on using Yeoman and this generator to build a TODO AngularJS application from scratch see this tutorial.

Install yo, grunt-cli, bower, generator-angular and generator-karma:

npm install -g grunt-cli bower yo generator-karma generator-angular

If you are planning on using Sass, you will need to first install Ruby and Compass:

  • Install Ruby by downloading from here or use Homebrew
  • Install the compass gem:
gem install compass

Make a new directory, and cd into it:

mkdir my-new-project && cd $_

Run yo angular, optionally passing an app name:

yo angular [app-name]

Run grunt for building and grunt serve for preview

Generators

Available generators:

App

Sets up a new AngularJS app, generating all the boilerplate you need to get started. The app generator also optionally installs Bootstrap and additional AngularJS modules, such as angular-resource (installed by default).

Example:

yo angular

Route

Generates a controller and view, and configures a route in app/scripts/app.js connecting them.

Example:

yo angular:route myroute

Produces app/scripts/controllers/myroute.js:

angular.module('myMod').controller('MyrouteCtrl', function ($scope) {
  // ...
});

Produces app/views/myroute.html:

<p>This is the myroute view</p>

Explicitly provide route URI

Example:

yo angular:route myRoute --uri=my/route

Produces controller and view as above and adds a route to app/scripts/app.js with URI my/route

Controller

Generates a controller in app/scripts/controllers.

Example:

yo angular:controller user

Produces app/scripts/controllers/user.js:

angular.module('myMod').controller('UserCtrl', function ($scope) {
  // ...
});

Directive

Generates a directive in app/scripts/directives.

Example:

yo angular:directive myDirective

Produces app/scripts/directives/myDirective.js:

angular.module('myMod').directive('myDirective', function () {
  return {
    template: '<div></div>',
    restrict: 'E',
    link: function postLink(scope, element, attrs) {
      element.text('this is the myDirective directive');
    }
  };
});

Filter

Generates a filter in app/scripts/filters.

Example:

yo angular:filter myFilter

Produces app/scripts/filters/myFilter.js:

angular.module('myMod').filter('myFilter', function () {
  return function (input) {
    return 'myFilter filter:' + input;
  };
});

View

Generates an HTML view file in app/views.

Example:

yo angular:view user

Produces app/views/user.html:

<p>This is the user view</p>

Service

Generates an AngularJS service.

Example:

yo angular:service myService

Produces app/scripts/services/myService.js:

angular.module('myMod').service('myService', function () {
  // ...
});

You can also do yo angular:factory, yo angular:provider, yo angular:value, and yo angular:constant for other types of services.

Decorator

Generates an AngularJS service decorator.

Example:

yo angular:decorator serviceName

Produces app/scripts/decorators/serviceNameDecorator.js:

angular.module('myMod').config(function ($provide) {
    $provide.decorator('serviceName', function ($delegate) {
      // ...
      return $delegate;
    });
  });

Options

In general, these options can be applied to any generator, though they only affect generators that produce scripts.

CoffeeScript and TypeScript

For generators that output scripts, the --coffee option will output CoffeeScript instead of JavaScript, and --typescript will output TypeScript instead of JavaScript.

For example:

yo angular:controller user --coffee

Produces app/scripts/controller/user.coffee:

angular.module('myMod')
  .controller 'UserCtrl', ($scope) ->

For example:

yo angular:controller user --typescript

Produces app/scripts/controller/user.ts:

/// <reference path="../app.ts" />

'use strict';

module demoApp {
    export interface IUserScope extends ng.IScope {
        awesomeThings: any[];
    }
    
    export class UserCtrl {

        constructor (private $scope:IUserScope) {
	        $scope.awesomeThings = [
              'HTML5 Boilerplate',
              'AngularJS',
              'Karma'
            ];
        }
    }
}

angular.module('demoApp')
  .controller('UserCtrl', demoApp.UserCtrl);

Minification Safe

tl;dr: You don't need to write annotated code as the build step will handle it for you.

By default, generators produce unannotated code. Without annotations, AngularJS's DI system will break when minified. Typically, these annotations that make minification safe are added automatically at build-time, after application files are concatenated, but before they are minified. The annotations are important because minified code will rename variables, making it impossible for AngularJS to infer module names based solely on function parameters.

The recommended build process uses ng-annotate, a tool that automatically adds these annotations. However, if you'd rather not use it, you have to add these annotations manually yourself. Why would you do that though? If you find a bug in the annotated code, please file an issue at ng-annotate.

Add to Index

By default, new scripts are added to the index.html file. However, this may not always be suitable. Some use cases:

  • Manually added to the file
  • Auto-added by a 3rd party plugin
  • Using this generator as a subgenerator

To skip adding them to the index, pass in the skip-add argument:

yo angular:service serviceName --skip-add

Bower Components

The following packages are always installed by the app generator:

  • angular
  • angular-mocks

The following additional modules are available as components on bower, and installable via bower install:

  • angular-animate
  • angular-aria
  • angular-cookies
  • angular-messages
  • angular-resource
  • angular-sanitize

All of these can be updated with bower update as new versions of AngularJS are released.

json3 and es5-shim have been removed as Angular 1.3 has dropped IE8 support and that is the last version that needed these shims. If you still require these, you can include them with: bower install --save json3 es5-shim. wiredep should add them to your index.html file but if not you can manually add them.

Configuration

Yeoman generated projects can be further tweaked according to your needs by modifying project files appropriately.

Output

You can change the app directory by adding an appPath property to bower.json. For instance, if you wanted to easily integrate with Express.js, you could add the following:

{
  "name": "yo-test",
  "version": "0.0.0",
  ...
  "appPath": "public"
}

This will cause Yeoman-generated client-side files to be placed in public.

Note that you can also achieve the same results by adding an --appPath option when starting generator:

yo angular [app-name] --appPath=public

Testing

Running grunt test will run the unit tests with karma.

Contribute

See the contributing docs

When submitting an issue, please follow the guidelines. Especially important is to make sure Yeoman is up-to-date, and providing the command or commands that cause the issue.

When submitting a PR, make sure that the commit messages match the AngularJS conventions.

When submitting a bugfix, write a test that exposes the bug and fails before applying your fix. Submit the test alongside the fix.

When submitting a new feature, add tests that cover the feature.

Changelog

Recent changes can be viewed on Github on the Releases Page

Sponsors

Love Yeoman work and community? Help us keep it alive by donating funds to cover project expenses!
[Become a sponsor]

License

BSD license

More Repositories

1

yeoman

Yeoman - a set of tools for automating development workflow
10,023
star
2

generator-webapp

A gulp.js generator for modern webapps
JavaScript
3,773
star
3

yo

CLI tool for running Yeoman generators
JavaScript
3,755
star
4

generator-chrome-extension

Scaffold out a Chrome extension
JavaScript
2,596
star
5

update-notifier

Update notifications for your CLI app
JavaScript
1,742
star
6

grunt-usemin

[UNMAINTAINED] Replaces references to non-optimized scripts or stylesheets into a set of HTML files (or any templates/views)
JavaScript
1,224
star
7

generator-generator

Generate a Yeoman generator
JavaScript
1,213
star
8

generator

Rails-inspired generator system that provides scaffolding for your apps
TypeScript
1,172
star
9

yeoman-app

A desktop app that scaffolds projects using Yeoman
JavaScript
988
star
10

generator-webapp_DEPRECATED

Yeoman generator that scaffolds out a front-end web app
JavaScript
980
star
11

generator-polymer

Scaffold out a Polymer project
JavaScript
931
star
12

generator-mobile

Scaffold out a mobile project based on Web Starter Kit
JavaScript
918
star
13

configstore

Easily load and persist config without having to think about where and how
JavaScript
853
star
14

yeoman.io

Yeoman website
CSS
790
star
15

generator-backbone

Scaffold out a Backbone.js project
JavaScript
639
star
16

generator-node

Create a Node.js module
JavaScript
577
star
17

insight

Node.js module to help you understand how your tool is being used by anonymously reporting usage metrics to Google Analytics
JavaScript
554
star
18

bower-requirejs

[DEPRECATED] Automagically wire-up installed Bower components into your RequireJS config
JavaScript
376
star
19

generator-chromeapp

Scaffold out a Chrome app
JavaScript
311
star
20

stringify-object

Stringify an object/array like JSON.stringify just without all the double-quotes
JavaScript
302
star
21

grunt-filerev

[DEPRECATED] File revving
JavaScript
260
star
22

yosay

Tell Yeoman what to say
JavaScript
207
star
23

grunt-bower-requirejs

[DEPRECATED] Grunt task - Automagically wire-up installed Bower components into your RequireJS config
JavaScript
199
star
24

generator-bootstrap

Yeoman generator for Bootstrap
JavaScript
187
star
25

generator-karma

Yeoman generator for Karma
JavaScript
173
star
26

environment

Yeoman runtime environment
JavaScript
123
star
27

generator-jquery

Generate a jQuery plugin
JavaScript
85
star
28

generator-gruntfile

Create a basic Gruntfile with yo.
JavaScript
74
star
29

doctor

Detect potential issues with users system that could prevent Yeoman from working correctly
JavaScript
61
star
30

yeoman-assert

Assert utility from yeoman
JavaScript
53
star
31

yeoman-generator-list

JavaScript
52
star
32

yeoman-test

Test utilities for Yeoman generators
TypeScript
42
star
33

generator-mocha

Yeoman generator for Mocha
JavaScript
42
star
34

generator-gruntplugin

Create a gruntplugin module with yo, including Nodeunit unit tests.
JavaScript
35
star
35

generator-jasmine

Yeoman generator for Jasmine
JavaScript
34
star
36

yeoman-character

The Yeoman character in your CLI. Like wat.
JavaScript
22
star
37

yeoman-welcome

Yeoman welcome message used in generators
JavaScript
19
star
38

media

Yeoman logo and artwork
15
star
39

generator-commonjs

Generate a CommonJS module
JavaScript
15
star
40

insight-dashboard

[DEPRECATED] Insight into Yeoman
CSS
11
star
41

Hackathons

Running a Yeoman hackathon? Start here for ideas, tips, and goals
10
star
42

html-wiring

[DEPRECATED] Set of utilities to update HTML files
JavaScript
10
star
43

cli-list

Parse comma-separated argument lists.
JavaScript
8
star
44

yeoman-remote

Fetch packages and archives from remote resources with cache support
JavaScript
8
star
45

generator-dummytest

JavaScript
3
star
46

generator-dummy

Dummy generator used for unit testing purpose
JavaScript
2
star