Overview of Angular libraries
許多應用都需要解決一些同樣的常見問題，例如提供統一的使用者介面、渲染資料，以及允許資料輸入。開發人員可以為特定的領域建立一些通用解決方案，以便在不同的應用中重複使用。像這樣的解決方案就可以建構成 Angular 函式庫，這些函式庫可以作為 npm 套件進行發佈和共享。
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.
Angular 函式庫是一個 Angular 專案，它與應用的不同之處在於它本身是不能執行的。必須在某個應用中匯入函式庫並使用它。
An Angular library is an Angular project that differs from an app in that it cannot run on its own. A library must be imported and used in an app.
這些函式庫擴充套件了 Angular 的基本功能。例如，要嚮應用新增響應式表單，請使用
ng add @angular/forms 新增該函式庫的 npm 套件，再從應用程式碼中，從
ReactiveFormsModule。同樣，把 Service Worker 函式庫新增到 Angular 應用中是將應用轉換為漸進式 Web 應用程式（PWA）的步驟之一。Angular Material 是一個大型通用函式庫的典範，它提供了一些複雜、可複用，兼具高度適應性的 UI 元件。
Libraries extend Angular's base functionality. For example, to add 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 library to an Angular application is one of the steps for turning an application into a Progressive Web App (PWA). Angular Material is an example of a large, general-purpose library that provides sophisticated, reusable, and adaptable UI components.
任何一位應用開發者都可以使用這樣或那樣的函式庫，它們都已經由 Angular 團隊或第三方發佈為 npm 套件。參閱使用已發佈的函式庫。
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.
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 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.
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.