Project layout, Domain driven development, Single Responsibility Principle
│ ├── happynrwlapp/
│ │ ├── registration/
│ │ │ ├── feature-main/
│ │ │ ├── feature-login/
│ │ │ ├── ui-form/
│ │ │ └── utils-testing/
│ │ ├── search/
│ │ │ ├── feature-results/
│ │ │ └── utils-testing/
│ │ └── shared/
│ │ └── ui/
│ ├── adminapp/
| └── shared/
│ ├── ui/
│ └── utils-testing/
application module types
yeti-web-app yeti web app
yeti-web-app-e2e yeti web app e2e testing
yeti-mobile-app mobile version of yeti app
yeti-desktop-app desktop version of yeti app
yeti-api yeti backend API
The app.module is almost the same for the Web, Mobile and Desktop applications. It only imports the feature-shell and performs platform-specific configurations.
library module types
workspace libraries, and package libraries(has package.json)
workspace libraries are used only within the workspace.
package libraries are publishable to NPM and can be used outside its workspace.
Utility libraries contain utilities and services.
Data-access can contain NGXS-related code and services.
Component libraries should contain presentational components and directives.
Feature libraries contain business logic, application screens, routable etc.
scoped library modules
booking/data-access -- a scoped library used in single domain. contains
booking/shell-<web/mobile...> -- shell libraries used in a single domain. can have many shell libraries in a single domain
booking/feature-search-<web/mobile...> -- feature libraries used in single domain. can have many feature modules in a single domain
booking/shared/ui -- a shared library used by multiple feature modules in a single domain. contains
shared/feature-<something> -- shared feature modules used in multiple domains. Can have many feature modules in shared domain
shared/data-access -- a shared type=angular library, contains , used across libs
shared/environments -- a shared type=angular library, contains environments, used across libs
shared/scss -- a shared type=universal library, contains scss, used across libs and apps
shared/assets -- a shared type=universal library, contains static non-TypeScript assets e.g., , used across libs and apps
shared/ui --a shared UI library used across applications
shared/utils --a shared type=universal libraries used across applications. e.g., data structures , algorithms
nestjs - contains nestjs shared and feature modules
nestjs/config -- config module
nestjs/environments -- a shared universal library, contains environments, used across libs
components -- publishable component modules, published to NPM via Lerna. to be used by parent project as well as outside projects. modules here contains package.json
core -- core library contains used globally, only included in application modules
Libraries with a broader scope (e.g., shared/ui) should not depend on the libraries with narrower scope (e.g., booking/shared/ui).
Component libraries should only depend on other component libraries and utility libraries, but should not depend feature libraries.
The shell component is the entry point component of our layout and features. Every additional route is added to the children array of the shell component route. Additional routes will be rendered by the router outlet in the shell component template.