1

関数をエクスポートする Node.js モジュールがあります。

module.exports = function(data){

   return {
     // return some object
    }

};

ここではシングルトン パターンを使用しようとしていますが、それほど手間はかかりません。これはライブラリ用であり、ライブラリ コードがこの関数を誤って複数回呼び出す可能性がありますが、コードの定義はユーザーに依存する必要があるため、ユーザーが適切なシングルトン パターンを実装することを保証できません。 .

エクスポートされた関数が複数回呼び出された場合にエラーをスローするために使用できる適切なパターンはありますか?

私はこのようなことを考えています:

const fn = require('./user-defined-module');
const someObject = fn();
// next I want to somehow mark this module as having been loaded

明確にするために、次のことはよくありません。

var loaded = null;

module.exports = function(data){

  if(loaded) {
    return loaded;
  }

  // do some stuff

  return loaded = {
    // return some object
  }

};

いくつかのユースケースでは十分かもしれませんが、いくつかの理由から標準のシングルトン コードを廃止しようとしています。

require 関数のモンキーパッチがこれに役立つとは思いませんが、多分。

現在、そのようなモジュールをロードする私のコードは次のようになっています。

const fn = require('./user-defined-module');
const obj = fn.apply(ctx, some_args);

問題は、コードベースのどこかで呼び出すことができることです

const obj = fn.apply(ctx, some_args);

また。コードベースが大きくなってきたので、早く失敗したいです。

私の考えでは、最初に呼び出されたら、 fn を再定義するのが最善の方法です。

(1) ローカル変数 fn を次のように設定する必要があります

fn = function(){
  throw 'whoops you messed up'
}

さらに重要なこと (2)

module.exports 値をに設定する必要があります

module.exports = function(){
  throw 'whoops you messed up'
};

意味があることを願っています

4

1 に答える 1