1

私は Node.JS 開発にかなり慣れていないので、Hubot アダプターを作成しようとしています。

モジュールは、 I need to useという名前のhubotクラスをエクスポートします。TextMessage私のアダプターでは、このインスタンスを作成し、次のように実行中のロボットに渡します。

{Adapter, TextMessage} = require 'hubot'
class MyAdapter extends Adapter
  onNewMessage: (text) =>
    @receive new TextMessage text

ただし、Hubot 自身のコードでは、メッセージがinstanceof TextMessage. ボットを実行してアダプターを使用すると、このチェックは常に失敗します。

プロジェクト構造は次のようにレイアウトされます。

my-bot
 |- node_modules
    |- my-adapter
    |  |- node_modules
    |  |  |- hubot
    |- hubot  

その結果require('hubot')、は に与えられたものとは異なるモジュールのコピーmy-adapterを私に与えます。hubotmy-bot

ここで Node モジュールの基本的な概念を理解していないことは確かです。私は何を間違っていますか?

4

1 に答える 1

2

このように設計されている理由は、モジュールが常に「新しい」バージョン (あなたのようなライブラリによって変更されていない) を取得できるようにするためです。一般に、require()依存関係の 1 つであれば、そのモジュールのデフォルトの動作に依存できるはずです。 (代替手段は予測不可能であり、おそらく安全ではありません。)

モジュールの目的が別のモジュールを適応させることである場合は、次のいずれかを行う必要があります。

変更されたモジュールを返す

たとえば、モジュールは次のようになります。

module.exports = require('hubot');
// ... your custom modifications

または:

var hubot = module.exports.hubot = require('hubot');

これは、アプリ自体が に依存するのでhubotはなく、モジュールのみに依存することを意味します。

hubotアダプターの依存関係としてリストされていません

Node.js呼び出しはパスをカスケードします。そのため、単に依存関係としてrequire()インストールしない場合でも、それを行うことができ、アプリのバージョンが使用されます。hubotrequire()

これは、 をインストールせずにモジュールをインストールしhubotて問題を引き起こす可能性があることを意味しますが、一方で、複数のモジュールが同じ基本モジュールを変更することもできます。

個人的には、2番目のオプションを選択します。

于 2014-02-11T16:56:41.947 に答える