14

いくつかの理由から、プラグイン スタイル システムでアプリケーションの機能を構築できるようにしたいと考えています。

  1. 新しいプロジェクトは、必要なプラグインを選択し、不要な機能のコードを持たないようにすることができます
  2. 他の開発者は、コアの仕組みについてあまり知識がなくても、システム用のプラグインを構築できます。

これを実装する方法がよくわかりません。これらを個別にホストするpluginsフォルダーが必要ですが、私の質問は次のとおりです。

  1. プラグインはコア システムとどのようにやり取りしますか?
  2. フォルダ構造はどのように機能しますか? それぞれが標準の MVC 構造 (コントローラー、サービス、モデル、ビューなど) を保持しますか?

この手法に関連するチュートリアルやドキュメントがあれば、役立つと思います。少し検索しましたが、概念ではなく、実際に作業しているコードにあまりにも密接に関連しており、nodejs に特に関連するものは見つかりませんでした。

4

2 に答える 2

7

アップタイム プロジェクト ( https://github.com/fzaninotto/uptime/blob/master/app.js#L46 )で行ったのと同様のアプローチを提案します。

  • アプリケーションの重要な部分でアプリケーション イベントをトリガーする
  • アプリケーション構成に「プラグイン」セクションを追加します
  • 各プラグイン名はパッケージ名でなければなりません。プラグイン パッケージは、コールバックまたは init() 関数を含むオブジェクトを返す必要があります。
  • いずれにせよ、init() を呼び出すとき、またはコールバックを実行するときに、プラグインが実行する必要があるオブジェクト (構成、接続など) をプラグインに挿入します。
  • プラグイン モジュールはリスナーをアプリケーション イベントに登録し、それを変更します。

利点:

  • 軽量
  • 依存関係を npm に依存する
  • 車輪を再構築しないでください
于 2014-01-15T10:31:11.730 に答える
0

基本機能のプラグイン プロトタイプを作成し、ユーザーがそのプラグインをモジュールで定義できるようにします。モジュールでは、ユーザーはプロトタイプからオブジェクトを継承し、その機能を拡張してから、プラグイン オブジェクトを返すコンストラクターをエクスポートします。

メイン システムはすべてのプラグインを require("pluginname") によってロードし、それぞれに対してコンストラクターを呼び出します。

于 2013-02-17T02:43:38.120 に答える