関数の呼び出し元の絶対パスを取得する方法を知りたいですか?Nodejs:呼び出し元関数のファイル名を取得する
レッツは言う:
ファイルa.js
私は
b()
を呼んで
。 b()
は、ファイルb.js
で定義された関数です。 a.js
はb
が必要です。だから、ノードのb.js
からa.js
の絶対パスを取得するにはどうすればよいですか?
関数の呼び出し元の絶対パスを取得する方法を知りたいですか?Nodejs:呼び出し元関数のファイル名を取得する
レッツは言う:
ファイルa.js
私は
b()
を呼んで
。 b()
は、ファイルb.js
で定義された関数です。 a.js
はb
が必要です。だから、ノードのb.js
からa.js
の絶対パスを取得するにはどうすればよいですか?
これは、呼び出し元のファイルを見つけるために、スタックトレースを使用する方法の例ですノードに
function _getCallerFile() {
try {
var err = new Error();
var callerfile;
var currentfile;
Error.prepareStackTrace = function (err, stack) { return stack; };
currentfile = err.stack.shift().getFileName();
while (err.stack.length) {
callerfile = err.stack.shift().getFileName();
if(currentfile !== callerfile) return callerfile;
}
} catch (err) {}
return undefined;
}
これは受け入れられた回答である必要があります:http://stackoverflow.com/a/29581862/11236 – ripper234
JavaScriptでスタックトレースを取得するのはかなり難しいです。私が見つけた最良の方法は、エラーを投げてキャッチし、Error.getStack()
(すべてのブラウザでは実装されていない、つまりIEを意味する)からスタックを取得し、出力をフォーマットすることです。
各スタックフレームには、ファイルパス、行番号、および関数名が表示されます。 Webkitも引数をサポートしていますが、最後にチェックした時点ではまだ動作していませんでした。
次に、異なるイベント間でコードをトレースするという問題があります。
私は実際にこのことについてブログ記事を書いた:http://fritsvancampen.wordpress.com/2013/03/28/error-handling-in-javascript-a-better-way/
あなたはモジュールのフルパスを決定するためにrequire.resolve(module)
を使用することができます。
var path = require.resolve("a");
//or
var path = require.resolve("./a.js");
発信者が必ずしも事前に決定されているわけではないので、この方法は機能しません。 –
はまさに こちらの質問に答えていないが、いくつかは、このinformatに感謝かもしれませんイオン。フォーエバーNodeJS &(-monitor)で
、 以下はプロセスが開始されたファイル名が含まれています
process.mainModule.filename
はいえ™多くの用途を試していません。
これはかなりまともな説明です:https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi。
助けて頂きました。ありがとう! – shriek
prepareStackTrace関数の復元に失敗すると、問題が発生する可能性があります。ここでは副作用を取り除く例です
function _getCallerFile() {
var originalFunc = Error.prepareStackTrace;
var callerfile;
try {
var err = new Error();
var currentfile;
Error.prepareStackTrace = function (err, stack) { return stack; };
currentfile = err.stack.shift().getFileName();
while (err.stack.length) {
callerfile = err.stack.shift().getFileName();
if(currentfile !== callerfile) break;
}
} catch (e) {}
Error.prepareStackTrace = originalFunc;
return callerfile;
}
素晴らしい!私はそれに関連する問題を何時間も解決しようとしていました。元の機能を再割り当てするとすべてが修正されました。 –
「発信者」してみましょう - >nodejs caller module
も参照してくださいhttp://stackoverflow.com/questions/13227489/how-can-one-get-the-ノード内の呼び出し元関数のファイルパス- –
また、http://stackoverflow.com/questions/10111163/in-node-js-how-can-i-get-the-pathも参照してください。 -of-a-module-i-have-loaded-via-require-that-is – basilikum
私の答え[ここ](https://stackoverflow.com/a/44872310/52499)を参照してください。 –