関数をエクスポートする 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'
};
意味があることを願っています