generator-angular-ui-router
Version:
Yeoman generator for AngularJS( include UI-router )
302 lines (228 loc) • 8.06 kB
Markdown
# AngularJS generator (add ui-router plugin)
This project fork from :yeoman / generator-angular
I add 'ui-router' plugin in this module.
Maintainer: [iamblue](https://github.com/iamblue)
Based on [angular-seed](https://github.com/angular/angular-seed/)
## Usage
Install `generator-angular-ui-router`:
```
npm install -g generator-angular-ui-router
```
Make a new directory, and `cd` into it:
```
mkdir my-new-project && cd $_
```
Run `yo angular-ui-router`, optionally passing an app name:
```
yo angular-ui-router [app-name]
```
Optionally using Sass:
```
[?] Would you like to use Sass with the Compass CSS Authoring Framework? Yes
[?] Which syntax do you prefer? (Use arrow keys)
❯ sass
scss
```
## Generators
Available generators:
* [angular-ui-router](#app) (aka [angular-ui-router:app](#app))
* [angular-ui-router:controller](#controller)
* [angular-ui-router:directive](#directive)
* [angular-ui-router:filter](#filter)
* [angular-ui-router:route](#route)
* [angular-ui-router:service](#service)
* [angular-ui-router:provider](#service)
* [angular-ui-router:factory](#service)
* [angular-ui-router:value](#service)
* [angular-ui-router:constant](#service)
* [angular-ui-router:decorator] (#decorator)
* [angular-ui-router:view](#view)
**Note: Generators are to be run from the root directory of your app.**
### App
Sets up a new AngularJS app, generating all the boilerplate you need to get started. The app generator also optionally installs Twitter Bootstrap and additional AngularJS modules, such as angular-resource.
Example:
```bash
yo angular-ui-router
```
### Route
Generates a controller and view, and configures a route in `app/scripts/app.js` connecting them.
Example:
```bash
yo angular-ui-router:route myroute
```
Produces `app/scripts/controllers/myroute.js`:
```javascript
angular.module('myMod').controller('MyrouteCtrl', function ($scope) {
// ...
});
```
Produces `app/views/myroute.html`:
```html
<p>This is the myroute view</p>
```
### Controller
Generates a controller in `app/scripts/controllers`.
Example:
```bash
yo angular-ui-router:controller user
```
Produces `app/scripts/controllers/user.js`:
```javascript
angular.module('myMod').controller('UserCtrl', function ($scope) {
// ...
});
```
### Directive
Generates a directive in `app/scripts/directives`.
Example:
```bash
yo angular-ui-router:directive myDirective
```
Produces `app/scripts/directives/myDirective.js`:
```javascript
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:
```bash
yo angular-ui-router:filter myFilter
```
Produces `app/scripts/filters/myFilter.js`:
```javascript
angular.module('myMod').filter('myFilter', function () {
return function (input) {
return 'myFilter filter:' + input;
};
});
```
### View
Generates an HTML view file in `app/views`.
Example:
```bash
yo angular-ui-router:view user
```
Produces `app/views/user.html`:
```html
<p>This is the user view</p>
```
### Service
Generates an AngularJS service.
Example:
```bash
yo angular-ui-router:service myService
```
Produces `app/scripts/services/myService.js`:
```javascript
angular.module('myMod').service('myService', function () {
// ...
});
```
You can also do `yo angular-ui-router:factory`, `yo angular-ui-router:provider`, `yo angular-ui-router:value`, and `yo angular-ui-router:constant` for other types of services.
### Decorator
Generates an AngularJS service decorator.
Example:
```bash
yo angular-ui-router:decorator serviceName
```
Produces `app/scripts/decorators/serviceNameDecorator.js`:
```javascript
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
For generators that output scripts, the `--coffee` option will output CoffeeScript instead of JavaScript.
For example:
```bash
yo angular-ui-router:controller user --coffee
```
Produces `app/scripts/controller/user.coffee`:
```coffeescript
angular.module('myMod')
.controller 'UserCtrl', ($scope) ->
```
A project can mix CoffeScript and JavaScript files.
### Minification Safe
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. By providing the `--minsafe` option, the code generated will out-of-the-box be ready for minification. The trade-off is between amount of boilerplate, and build process complexity.
#### Example
```bash
yo angular-ui-router:controller user --minsafe
```
Produces `app/controller/user.js`:
```javascript
angular.module('myMod').controller('UserCtrl', ['$scope', function ($scope) {
// ...
}]);
```
#### Background
Unannotated:
```javascript
angular.module('myMod').controller('MyCtrl', function ($scope, $http, myService) {
// ...
});
```
Annotated:
```javascript
angular.module('myMod').controller('MyCtrl',
['$scope', '$http', 'myService', function ($scope, $http, myService) {
// ...
}]);
```
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 `ngmin`, a tool that automatically adds these annotations. However, if you'd rather not use `ngmin`, you have to add these annotations manually yourself.
## Bower Components
The following packages are always installed by the [app](#app) generator:
* angular
* angular-mocks
* angular-scenario
The following additional modules are available as components on bower, and installable via `bower install`:
* angular-cookies
* angular-loader
* angular-resource
* angular-sanitize
* angular-ui-router
All of these can be updated with `bower update` as new versions of AngularJS are released.
## 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 a `appPath` property to `bower.json`. For instance, if you wanted to easily integrate with Express.js, you could add the following:
```json
{
"name": "yo-testt",
"version": "0.0.0",
...
"appPath": "public"
}
```
This will cause Yeoman-generated client-side files to be placed in `public`.
## Testing
For tests to work properly, karma needs the `angular-mocks` bower package.
This script is included in the bower.json in the `devDependencies` section, which will
be available very soon, probably with the next minor release of bower.
While bower `devDependencies` are not yet implemented, you can fix it by running:
```bash
bower install angular-mocks
```
By running `grunt test` you should now be able to run your unit tests with karma.
## Contribute
See the [contributing docs](https://github.com/yeoman/yeoman/blob/master/contributing.md)
When submitting an issue, please follow the [guidelines](https://github.com/yeoman/yeoman/blob/master/contributing.md#issue-submission). 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](https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/).
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.
## License
[BSD license](http://opensource.org/licenses/bsd-license.php)