38 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Overview of Angular libraries
 | |
| 
 | |
| Many applications need to solve the same general problems, such as presenting a unified user interface, presenting data, and allowing data entry.
 | |
| Developers can create general solutions for particular domains that can be adapted for re-use in different apps.
 | |
| Such a solution can be built as Angular *libraries* and these libraries can be published and shared as *npm packages*.
 | |
| 
 | |
| An Angular library is an Angular [project](guide/glossary#project) that differs from an app in that it cannot run on its own.
 | |
| A library must be imported and used in an app.
 | |
| 
 | |
| Libraries extend Angular's base functionality. For example, to add [reactive forms](guide/reactive-forms) to an app, add the library package using `ng add @angular/forms`, then import the `ReactiveFormsModule` from the `@angular/forms` library in your application code.
 | |
| Similarly, adding the [service worker](guide/service-worker-intro) library to an Angular application is one of the steps for turning an application into a [Progressive Web App](https://developers.google.com/web/progressive-web-apps/) (PWA).
 | |
| [Angular Material](https://material.angular.io/) is an example of a large, general-purpose library that provides sophisticated, reusable, and adaptable UI components.
 | |
| 
 | |
| Any app developer can use these and other libraries that have been published as npm packages by the Angular team or by third parties. See [Using Published Libraries](guide/using-libraries).
 | |
| 
 | |
| ## Creating libraries
 | |
| 
 | |
| If you have developed functionality that is suitable for reuse, you can create your own libraries.
 | |
| These libraries can be used locally in your workspace, or you can publish them as [npm packages](guide/npm-packages) to share with other projects or other Angular developers.
 | |
| These packages can be published to the npm registry, a private npm Enterprise registry, or a private package management system that supports npm packages.
 | |
| See [Creating Libraries](guide/creating-libraries).
 | |
| 
 | |
| Whether you decide to package functionality as a library is an architectural decision, similar to deciding whether a piece of functionality is a component or a service, or deciding on the scope of a component.
 | |
| 
 | |
| Packaging functionality as a library forces the artifacts in the library to be decoupled from the application's business logic.
 | |
| This can help to avoid various bad practices or architecture mistakes that can make it difficult to decouple and reuse code in the future.
 | |
| 
 | |
| Putting code into a separate library is more complex than simply putting everything in one app.
 | |
| It requires more of an investment in time and thought for managing, maintaining, and updating the library.
 | |
| This complexity can pay off, however, when the library is being used in multiple apps.
 | |
| 
 | |
| <div class="alert is-helpful">
 | |
| 
 | |
| Note that libraries are intended to be used by Angular apps.
 | |
| To add Angular functionality to non-Angular web apps, you can use [Angular custom elements](guide/elements).
 | |
| 
 | |
| </div>
 |