LoginSignup
7
9

More than 3 years have passed since last update.

Angular(ver6~)でlibraryを作る方法

Last updated at Posted at 2018-11-26

AngularでLibraryを作る方法

AngularCLIのver6以降からLibraryを作るためのコマンドが追加されました。公式ドキュメントで詳細が書かれていないようですが、Angular CLIを使うことで今まで比較的困難であったAngularのLibraryを簡単に作れるようになりました。

手順

1.プロジェクトを作成

まず、普通にAngularアプリを作るのと同じ要領で ng new コマンドを使用します。

ng new your-app

2.Libraryを作成

cd your-appでプロジェクトのルートに移動し、ライブラリを作成します。

ng generate library your-library-name

ここで your-app配下に projects/your-libraryディレクトリが作られます。このディレクトリがあなたのプロジェクトになります。

※Angular6以降では、ng newコマンドで複数のプロジェクトを束ねる単位を作成し、ng generate library your-libコマンドやng generate application your-projectコマンドで配下に複数のプロジェクトを作成することができます。
Libraryだけを作りたい場合はyour-app配下にアプリケーションが無駄に作られてしまうのですが、この辺の適切な運用方法を解説したドキュメントはまだ無いようです。

3.コンポーネントやディレクティヴを作成(任意)

以下のようなコマンドでライブラリ配下にコンポーネントやディレクティヴ等を作成できます。

ng generate component --project=your-library
ng generate directive --project=your-library

ディレクティヴやコンポーネントを公開したい場合にはディレクティヴのdeclarationとexport, public_api.tsからexportを忘れずに。

your-library.module.ts
@NgModule({
  imports: [],
  declarations: [
    YourDirective,   
  ],
  exports: [
    YourDirective,
  ]
})
export class YourLibraryModule {
}

public_api.ts
/*
 * Public API Surface of x-angular-bootstrap
 */
export * from './lib/your-library.module';
export * from './lib/your-directive.directive';

4.ビルド

your-appの直下で以下のコマンドでビルドできます。

ng build --project=your-library

5.公開

npmを利用する場合

cd dist/your-project
npm publish --access=public

※npmの利用方法 → 3分でできるnpmモジュール

6.注意点

  1. 一度公開したプロジェクトを更新した場合、package.jsonのversionを繰り上げる必要があります。npmでは同じバージョンのプロジェクトを二度公開できません。
  2. npmのフリーアカウントではプライベートlibraryが作成できないので、npm publish --access=public を実行する必要があります。2度目以降の公開では --accessオプションは不要です。
  3. 公開したlibraryは npm install your-library@latestで最新のバージョンをインストールできます。
  4. ライブラリ配下にnpmでパッケージをインストールした場合、あなたのライブラリを利用するプロジェクトの依存関係に影響を与える可能性があります。なのでライブラリ配下でパッケージをインストールする場合、ライブラリ内でパッケージの利用を明示的に許可する必要があります。そのための記述がng-package.jsonwhitelistedNonPeerDependenciesオプションです。以下のような記述になります。
{
  "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
  "dest": "../../dist/your-lib",
  "lib": {
    "entryFile": "src/public_api.ts"
  },
  "whitelistedNonPeerDependencies": ["external-library-name"]
}
7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9