## Contributing to Nx We would love for you to contribute to Nx! Read this document to see how to do it. ## Got a Question? We are trying to keep GitHub issues for bug reports and feature requests. Stack Overflow is a much better place to ask general questions about how to use Nx. ## Building the Project After cloning the project run: `yarn`. After that run `yarn build` to build the `bazel`, `nx`, and `schematics` packages. After that run `yarn linknpm`. ### Running Unit Tests To make sure your changes do not break any unit tests, run `yarn test`. You can also run `yarn test:schematics` and `yarn test:nx` to test the schematics and nx packages individually. > If you need to test only the **collection/ngrx.spec.ts** test [for example], you can use an optional `$1` argument as follows:

`yarn test:schematics schematics/src/collection/ngrx/ngrx` ### Running E2E Tests To make sure you changes do not break any unit tests, run `yarn e2e`. Running e2e tests can take some time, so if it often useful to run a single test. You can do it as follows: `yarn e2e lint` ## Submitting a PR Please follow the following guidelines: * Make sure unit tests pass * Make sure e2e tests pass * Make sure you run `yarn format` * Update your commit message to follow the guidelines below ### Commit Message Guidelines Commit message should follow the following format: ``` type(scope): subject BLANK LINE body ``` #### Type The type must be one of the following: * build * feat * fix * refactor * style * docs * test #### Scope The scope must be one of the following: * bazel * nx * schematics #### Subject The subject must contain a description of the change. #### Example ``` feat(schematics): add an option to generate lazy-loadable modules `ng generate lib mylib --lazy` provisions the mylib project in tslint.json ``` #### Commitizen To simplify and automate the process of commiting with this format, **Nx is a [Commitizen](https://github.com/commitizen/cz-cli) friendly repository**, just do `git add` and execute `yarn commit`. ## Migrations Nx allows users to automatically upgrade to the newest version of the package. If you are introducing a change that would require the users to upgrade their workspace, add a migration to `packages/schematics/migrations`. Migrations are named in the following fashion: `YYYYMMDD-name.ts` (e.g., 20171129-change-schema.ts). The `yarn nx-migrate` command will run all the migrations after the one encoded in .angular-cli.json.