--- Title: 再配布可能なライブラリ nav: ja --- # 再配布可能なライブラリ 拡張ライブラリは、JSON 形式の標準の Angular ライブラリと定義ファイルに基づいています。 詳細については、次の記事をご覧ください: [Angular CLI 6のライブラリサポート](https://github.com/angular/angular-cli/wiki/stories-create-library#library-support-in-angular-cli-6) あわせて参照 - Angular Library Series - Angular CLI を使用したライブラリの作成 - Part 1: https://blog.angularindepth.com/creating-a-library-in-angular-6-87799552e7e5 - Part 2: https://blog.angularindepth.com/creating-a-library-in-angular-6-part-2-6e2bc1e14121 ## 拡張ライブラリの作成 最初に、ワークスペース内で新しいプロジェクトを生成します: ```sh nx generate library my-extension ``` `projects/my-extensions` フォルダに新しいプロジェクトを取得します。 デフォルトでは、プロジェクトには少なくとも次のコンテンツが含まれています: - Example component `my-extension.component.ts` - Example service `my-extension.service.ts` - Angular Module example `my-extension.module.ts` 次に、次のコマンドでプロジェクトをビルドします: ```sh nx build my-extension ``` NX は、プロジェクトの Typescript パスマッピングを自動的に構成するため、ライブラリをリンクするための追加手順は必要ありません。 ### 動的コンポーネントを登録する ここで、`MyExtensionComponent` を拡張コンポーネントとして登録する必要があります。 次の例のようにコードを更新します: ```typescript import { ExtensionService } from '@alfresco/adf-extensions'; @NgModule({...}) export class MyExtensionModule { constructor(extensions: ExtensionService) { extensions.setComponents({ 'my-extension.main.component': MyExtensionComponent, }); } } ``` `MyExtensionComponent` を参照する場合、 JSON 定義で `my-extension.main.component` 識別子を使用できるようになりました。 ### プラグイン定義ファイル ライブラリプロジェクトのルートフォルダに次の内容の新しい `assets/my-extension.json` ファイルを作成します: ```json { "$schema": "../../../extension.schema.json", "$version": "1.0.0", "$name": "plugin1", "$description": "demo plugin", "routes": [ { "id": "my.extension.route", "path": "ext/my/route", "component": "my-extension.main.component" } ], "features": { "navbar": [ { "id": "my.extension.nav", "items": [ { "id": "my.extension.main", "icon": "extension", "title": "My Extension", "route": "my.extension.route" } ] } ] } } ``` ルートの `package.json` ファイルを更新し、`scripts` セクションに次のエントリを追加します: ```json { "scripts": { "build:my-extension": "nx build my-extension && npx cpr projects/my-extension/assets dist/my-extension/assets --deleteFirst" } } ``` このスクリプトを使用して、ライブラリを構築し、アセットをアウトプットフォルダにコピーできるようになりました。 **Tip:** ライブラリのインストール手順を `README.md` ファイルで提供することをお勧めします。 プラグイン定義ファイルをメインアプリケーションの `assets/plugins` フォルダにコピーするビルドルールが開発者に必要であることを忘れないでください。 ## NPM へのライブラリの公開 公開する前に、常にライブラリを再構築する必要があります: ```sh npm run build:my-extension ``` アウトプットフォルダに移動し、publish コマンドを実行します。 ```sh cd dist/my-extension npm publish ``` 注: 有効な [NPM](https://www.npmjs.com/) アカウントが必要です。 詳細については、[ライブラリの公開](https://github.com/angular/angular-cli/wiki/stories-create-library#publishing-your-library) の記事をご覧ください。 ## 拡張ライブラリの使用 拡張ライブラリを NPM に公開していると仮定すると、標準コマンドを使用してインストールできます: ```sh npm install my-extension ``` これにより、ライブラリとそのすべての依存関係がインストールされます。 **注:** アプリケーションはすでに `dist` フォルダのローカルバージョンを使用するように設定されているため、元のワークスペースにライブラリをインストールする必要はありません。 ### アセットをコピーする 同じワークスペースで拡張ライブラリを開発およびテストする場合は、`angular.json` 設定ファイルを編集し、次のルールを追加します。 ```json { "glob": "**/*.json", "input": "dist/my-extension/assets", "output": "/assets/plugins" } ``` NPM から拡張機能をインストールする場合は、次のルールを使用します: ```json { "glob": "**/*.json", "input": "node_modules/my-extension/assets", "output": "/assets/plugins" } ``` ### モジュールの登録 メインアプリケーションで、`src/app/extensions.module.ts` ファイルを編集し、次の例のようにモジュール宣言を追加します: ```typescript import { MyExtensionModule } from 'my-extension'; @NgModule({ imports: [ MyExtensionModule ] }) export class AppExtensionsModule {} ``` ### プラグインの登録 最後に、`assets/app.extensions.json` ファイルを更新し、新しいプラグインへの参照を追加します: ```json { "$references": [ "my-extension.json" ] } ``` ## ライブラリのテスト アプリケーションを実行し、追加のナビゲーションサイドバーエントリがあることを確認します: ```sh npm start ``` `My Extension` リンクをクリックすると、メインコンテンツ領域にライブラリからの拡張機能コンポーネントが表示されます。 **Note:** アプリケーションの設定によっては、`admin` ユーザーが利用できる `Settings` ダイアログ (アプリケーションプロファイルボタンをクリックします) を介して外部プラグインを有効にする必要がある場合があります。