146

現在のファイル名、関数名、行番号を取得するにはどうすればよいですか?

c__FILE__で、と同等のロギング/デバッグ目的で使用したい__LINE__

4

9 に答える 9

279

Node.js には、そのための標準 API であるPathが用意されています。

現在のスクリプトの名前を取得するのは簡単です。

var path = require('path');
var scriptName = path.basename(__filename);
于 2015-02-04T10:31:22.753 に答える
54

モジュール内で、次のいずれかを実行して、ファイル名のフルパスを取得できます

this.filename;
module.filename;
__filename;

パスや拡張子のない実際の名前だけが必要な場合は、次のようにすることができます。

module.filename.slice(__filename.lastIndexOf(path.sep)+1, module.filename.length -3);
于 2013-09-22T10:02:08.303 に答える
43

ファイル名のみを取得します。単純に追加のモジュールはありません:

// abc.js
console.log(__filename.slice(__dirname.length + 1));

 // abc
console.log(__filename.slice(__dirname.length + 1, -3));
于 2015-08-06T12:45:54.203 に答える
25
'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

于 2015-08-31T11:41:45.453 に答える
3

また、 console-plusを見るかもしれません。これにより、ログテキストにファイル名と行番号が追加され、.log、.info、および.errorの色が異なります。

于 2013-01-08T07:26:34.873 に答える
1

さて、私はロガーのタグとしてファイル名を使用したかったので、最も簡単で、私が望んでいたのはこれです:

__filename.substring(__dirname.length + 1, __filename.lastIndexOf("."))
于 2017-04-03T18:58:59.907 に答える
0

ここにリストされていないという理由だけで、別のオプションは から を削除する__dirnameこと__filenameです。

__filename.replace(`${__dirname}/`, '')

pathモジュールをインポートしたくない場合に便利だと思います。しかし、私はそれpath.basename(__filename)が最も適切であると信じています。

于 2022-01-09T19:06:49.430 に答える