フレンドが興味深い質問をしましたが、いくつか試しましたが役に立たないのですが、ノードJSモジュールをオーバーライドする方法はありますか?ノードJSオーバーライド標準モジュール
たとえば、ファイルシステムではなくS3バケットを使用するreadFile関数をオーバーライドしたいとします。 IE:
var fs = require('fs');
fs.readFile('my_text_file.txt', ...);
は、実際に私はプロトタイプを試みたが、それは彼らが__proto__
オブジェクトなしでネイティブモジュールを設定しているようで、彼らは.constructor
性質を持っていないこの
FileSystem.readFile = function() {
// Connect to S3 and retrieve remote file
}
のようなものを実行しますそれは誰にでも何でも意味します。
私はNodes VMを使用することを考えましたが、ユーザーがnpm
経由でモジュールをインストールして使用できるようにするには、これは厳しいものです。
私は実際に新しいモジュールを作成する(私は私のnode_modules
フォルダにfs.js
という名前のファイルを入れて、それを必要とすることはできませんので、。それだけでも無視されます)されて来ている最も近いとちょうどfs
の値をハード設定私が望むものだが、これは正しくない、私はユーザにrequire('fs')
を使用して、私のカスタム関数を使用したい。
独自のバージョンのNode JSをコンパイルしないと、これはすべて可能ですか?
私はnode.jsで作業していないので、全く動作しない可能性があります。どの関数が 'FileSystem'を宣言してそれをあなたのカスタムオブジェクト("サブクラス ")のプロトタイプとして使用するかを調べることができます。 MyFS = {FileSystem.call(this);}; MyFs.prototype = new FileSystem();または、goog.baseやgoog.inheritのようなものを使用して、親の関数と呼ばれるサブクラスを作成し、コンストラクタに渡されるパラメータ(http://docs.closure-library.googlecode.com/git/closure_goog_base)を作成します。 js.html badseは 'arguments.callee.caller'を使用していますが、ecma 5 strictでは動作しませんので、書き直す必要があります。 – HMR
goog.baseとgoog.inheritsに関する良い記事はこちらです:http://bolinfest.com/essays/googbase.html – HMR
私は 'FileSystem'を説明の目的で作成しました。モジュールには' __proto__'オブジェクトがなく、したがってコンストラクタはありません。私が得た最も近いものは、オブジェクトに直接プロパティを設定し、別のスクリプトを含むことですが、 'require( 'fs')したい、そして私のカスタム機能を持っています –