現在のファイル名、関数名、行番号を取得するにはどうすればよいですか?
c__FILE__
で、と同等のロギング/デバッグ目的で使用したい__LINE__
Node.js には、そのための標準 API であるPathが用意されています。
現在のスクリプトの名前を取得するのは簡単です。
var path = require('path');
var scriptName = path.basename(__filename);
モジュール内で、次のいずれかを実行して、ファイル名のフルパスを取得できます
this.filename;
module.filename;
__filename;
パスや拡張子のない実際の名前だけが必要な場合は、次のようにすることができます。
module.filename.slice(__filename.lastIndexOf(path.sep)+1, module.filename.length -3);
ファイル名のみを取得します。単純に追加のモジュールはありません:
// abc.js
console.log(__filename.slice(__dirname.length + 1));
// abc
console.log(__filename.slice(__dirname.length + 1, -3));
'use strict';
const scriptName = __filename.split(/[\\/]/).pop();
console.log(__filename);
// 'F:\__Storage__\Workspace\StackOverflow\yourScript.js'
const parts = __filename.split(/[\\/]/);
console.log(parts);
/*
* [ 'F:',
* '__Storage__',
* 'Workspace',
* 'StackOverflow',
* 'yourScript.js' ]
*
**/
ここでは、最初のパラメーターとして正規表現を使用して分割関数を使用します。
セパレーターに必要な正規表現は( orで分割) ですが、正規表現ターミネーターと区別するために記号をエスケープする必要があるため、. [\/]
/
\
/
/
/[\\/]/
const scriptName = __filename.split(/[\\/]/).pop(); // Remove the last array element
console.log(scriptName);
// 'yourScript.js'
代わりに実際に使用する必要があります( Node.js v0.1.25 でpath.basename
最初に文書化されています)。スラッシュが含まれるファイル名など、知りたくないすべてのコーナーケースを処理するためです (たとえば、UNIX の「foo\bar」という名前のファイル)。上記の回答を参照してください。path
また、 console-plusを見るかもしれません。これにより、ログテキストにファイル名と行番号が追加され、.log、.info、および.errorの色が異なります。
さて、私はロガーのタグとしてファイル名を使用したかったので、最も簡単で、私が望んでいたのはこれです:
__filename.substring(__dirname.length + 1, __filename.lastIndexOf("."))
ここにリストされていないという理由だけで、別のオプションは から を削除する__dirname
こと__filename
です。
__filename.replace(`${__dirname}/`, '')
path
モジュールをインポートしたくない場合に便利だと思います。しかし、私はそれpath.basename(__filename)
が最も適切であると信じています。