使用Angular Library来创建通用组件

Angular Library 是什么意思?

    • Angular CLI v6 から提供された機能で通常の application 作成と異なり library を作ることができる

ref. Library support in Angular CLI 6

优势

    • Angular は Angular CLI の Multiple Projects を利用するとひとつの repository 内で複数の application を管理できるが library を作ることによりこれらの複数 application で共通に使えるコンポーネント群を作ることができる

 

    また library をパッケージングすることで npm として公開しなくても別の Angular repository で同じように共通コンポーネントととしても使用可能

试着去做

创建一个应用

    sample-project という名前で Angular repository を作成する(これは library とは別)
$ ng new sample-project
$ cd sample-project
# 起動まで確認する
$ yarn start --open

创建图书馆

    • my-lib という名前で library project を作成する

 

    • shell

 

    • $ yarn ng generate library my-lib

sample-project の中に projects/my-lib/ というディレクトリが作られたのが確認できる

构建图书馆

    • library をビルドする

–watchオプションを付けると変更を監視するようになる(Angular CLI v6.2 以上)
1 回だけビルドしたい場合は不要

$ yarn ng build my-lib --watch

在图书馆项目中创建组件。

    • ButtonComponent を作成する

repository 内に project が複数あるので –project で対象を指定する必要がある

$ yarn ng g c components/button --project my-lib
    • ButtonComponent の公開

下記のように export する

diff --git a/projects/my-lib/src/lib/my-lib.module.ts b/projects/my-lib/src/lib/my-lib.module.ts
index 1737e01..384bef0 100644
--- a/projects/my-lib/src/lib/my-lib.module.ts
+++ b/projects/my-lib/src/lib/my-lib.module.ts
@@ -6,6 +6,6 @@ import { ButtonComponent } from './components/button/button.component';
   declarations: [MyLibComponent, ButtonComponent],
   imports: [
   ],
-  exports: [MyLibComponent]
+  exports: [MyLibComponent, ButtonComponent]
 })
 export class MyLibModule { }

尝试使用

在同一个代码库的应用中使用图书馆

    • my-lib で作った ButtonComponent を sample-project で使う

同じ repository 内にある application では library のビルドだけですぐに使うことができる

diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 2c3ba29..f95347c 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -1,6 +1,8 @@
 import { BrowserModule } from '@angular/platform-browser';
 import { NgModule } from '@angular/core';

+import { MyLibModule } from 'my-lib';
+
 import { AppRoutingModule } from './app-routing.module';
 import { AppComponent } from './app.component';

@@ -10,7 +12,8 @@ import { AppComponent } from './app.component';
   ],
   imports: [
     BrowserModule,
     AppRoutingModule,
+    MyLibModule,
   ],
   providers: [],
   bootstrap: [AppComponent]
    • コンポーネントを表示する

あとはいつもどおりタグを記述するだけでコンポーネントの表示ができる

diff --git a/src/app/app.component.html b/src/app/app.component.html
index 0f3d9d8..0e56a2e 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -17,5 +17,6 @@
     <h2><a target="_blank" rel="noopener" href="https://blog.angular.io/">Angular blog</a></h2>
   </li>
 </ul>
+<lib-button></lib-button>

 <router-outlet></router-outlet>

在另一个仓库中使用

    library のパッケージングが必要なので my-lib のビルド成果物があるディレクトリで下記コマンドを実行
$ cd dist/my-lib
$ yarn pack
# my-lib-v0.0.1.tgz ができる
    • my-lib-v0.0.1.tgz ができる

 

    • もし名前を変えたければ $ yarn pack –filename my-lib.tgz のようにする

 

    パッケージングした library を任意の application でインストールする
$ yarn add ../angular-sample/sample-project/dist/my-lib/my-lib.tgz
    使い方は同一 repository 内のときと同様

总结

通过使用最新的Angular CLI工具,我发现创建库变得非常容易。虽然这次仅试用了组件,但是也有可能将服务和管道等作为共享库准备好。

以下是参考:
参照或参考资料。

    • Library support in Angular CLI 6

 

    The Angular Library Series – Building and Packaging
广告
将在 10 秒后关闭
bannerAds