現在、プロジェクトは緩やかなES6モジュール形式であり、データベース接続はハードコードされています。私はこれをnpmモジュールに変えたいと思っています。そして今、エンドユーザーにコードの設定を許可する方法の問題に直面しています。私の最初の試みはインスタンス化されるクラスとしてそれを書き直すことでしたが、以前よりも複雑なコードを使用していますので、代替案を見ています。私は自分の設定オプションを調べています。プロセスに書き込むように見えますが、私は考えていない潜在的な問題、ノー・ノーなどの選択肢を考えています。npmモジュールを設定するためのENV変数の作成
npmモジュールを構成するのに許容できる方法をenvで処理するためにユーザー書き込み設定を持っていますか?これは、グローバルな書き込みのように、名前空間の考慮事項を扱うためです。私もpackage.json
の使用を検討しましたが、それは資格情報などのためにはうまくいかないでしょう。同様に、rcファイルを使用するのは面倒です。私は適切な方法論があればそれを見つけられませんでした。
process.env['MY_COOL_MODULE_DB'] = ...
私はそれを見るように、基本的5ishオプションがあります。
- 打ち - ないオプション
- なクラスとして構成されたスコープを作成する - 私が今持っているものはとbleh
- ユースA node-configなどの設定 - npmのためのユーザーフレンドリーなオプションではありません
- globals/envとして保存します。コメントに示唆されているように、エクスポートされた関数でそのプロセスをラップすることで、複雑な非首尾よく名前空間を確保しながらエンドユーザーから抽象化することができます
.rc
ファイルを作成するようにユーザーに依頼します。この場合ではありません。
これはnpmの使用例ですが、これは実際に関数としてエクスポートされるコードを構成する一般的な課題に当てはまります。私はクラスのユースケースを持っていますが、唯一の必要性は、より複雑なコードの経費(私の場合は)で構成されたスコープを作成しているときに、その価値があるかどうかはわかりません。
更新私はこれは議論の質問ですが、私の選択肢を周りに私の脳を包んで助けたことを実現します。
// options.js
let options = {}
export function setOptions(o) { options = o }
export function getOptions(o) { return options }
そして、ユーザー・コールsetOptions()
を持っており、内部でこのgetOptions
を呼び出す:私はこのようなものだと思います。私はノードがモジュールを1回だけ必要とするので、私のoptions
オブジェクトは設定したままにしておきます。
私にとっては、基本的には、グローバルを使ってモジュールを構成することと同じです。オプションを取る関数をエクスポートしないでください。クラスを外に出しすぎると複雑になります。 – robertklep
@robertklepしかし、この関数はどのようにしてvarsを保存しますか?その同じ挑戦。 1)ハードコード - オプションではない、2)クラスなどの設定されたスコープを作成する - 私が今使っているものとbleh 3)node-configなどの設定を使う - 本当にnpmのユーザーフレンドリーなオプションか4)/env。だから私がユーザーに関数を渡すと、私がやっていることは、まだいくつかのenvのラッパーを作っていることになります。私は、複雑な名前空間を作成し、それをユーザから抽象化することができます。 – cyberwombat
多分私は理解していないかもしれません。あなたはモジュールを書いています。データベース資格のような特定のオプションを取るべきです。アプリケーションコードからそれらのオプションをモジュールに渡す方法を探しています。 – robertklep