Node.js-現在のファイル名の取得


回答:


230

Node.jsは、そのための標準APIを提供します。パス。

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

var path = require('path');
var scriptName = path.basename(__filename);

これは実際のファイル名ではなくベース名を取得しませんか?
— Phil

10
という名前のスクリプトのscript.js場合、を取得しscript.jsます。拡張子を付けずに名前だけを付けたい場合は、ここでjs使用できるスクリプトについて説明します。var scriptName = path.basename(__filename, '.js');またはvar scriptName = path.basename(__filename, path.extname(__filename))
— herve

6
拡張機能を削除する別の方法:path.parse(__filename).name
— RHベッカー

__filenameES6モジュールでは定義されていません。
— Cullub

1
@ Cullub、nodejs ドキュメントからの抽出:これらのCommonJS変数はESモジュールでは使用できません。__filenameおよびと同等のものは、__dirnameを介して各ファイル内に作成できますimport.meta.url。
— ハーブ

46

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

this.filename;
module.filename;
__filename;

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

module.filename.slice(__filename.lastIndexOf(path.sep)+1, module.filename.length -3);

4
おそらく、path.sepを使用してクロスプラットフォームにする必要があります。これが私がしたことです__filename.slice(__ filename.lastIndexOf(path.sep)+1);
— ライアン

2
この非常に便利なワンライナーをコピーして貼り付けるだけの場合は、var path = require('path');事前に変更するか、次のように変更してくださいmodule.filename.slice(__filename.lastIndexOf(require('path').sep)+1, module.filename.length -3);
— forrestranger

17
-3は拡張の長さを想定しており、このようなものがより適切に機能する可能性がありますpath.basename(module.filename, path.extname(module.filename))
— dre

32

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

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

 // abc
console.log(__filename.slice(__dirname.length + 1, -3));

これが私がここに来た理由です。ありがとう!
— leviathanbadger 2017年

1
これは受け入れられる答えになるはずです。厳密モードで動作します。非常に簡単です。ありがとうございました!
— マシュー

2
拡張子が2文字でない限り、スクリプトの解釈を任意のファイル拡張子にバインドできるため、これは完全に可能です...したがって、これは総合的な解決策として適切ではない可能性があります。
— ErikE

24
'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' ]
 *
**/

ここでは、最初のパラメーターとして正規表現を使用した分割関数を使用します。 私たちは、セパレータに必要な正規表現がある(で分割または)が、記号は、正規表現ターミネータからそれを区別するためにエスケープする必要がありますので、。
[\/]/\///[\\/]/

const scriptName = __filename.split(/[\\/]/).pop(); // Remove the last array element
console.log(scriptName);
// 'yourScript.js'

これを使用しないでください

実際にはpath.basename代わりに使用する必要があります(Node.js v0.1.25で最初に文書化))。これは、スラッシュを含むファイル名(UNIXでは "foo \ bar"という名前のファイルなど)について知りたくないすべてのケースを処理するためです。上記のpath回答を参照してください。


説明を追加してください
— Daniel Cheung

@DanielCheungこんにちは!しかし、実際にはこれらすべてがインターネットで検索可能javascript splitです。
— ilyaigpetrov

3
私はあなたを助けていました... -_-あなたの回答は削除に投票されました。答えは十分に説明していないか、単に含むコードがします削除されます。
— Daniel Cheung

3

console-plusもご覧ください。これにより、ロギングテキストにファイル名と行番号が追加され、.log、.info、.errorの色が異なります。


かなりクール。「npm install --save console-plus」を使用してインストールするか、yarnを使用している場合:「yarn add console-plus」
— Andrew Faulkner

1

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

__filename.substring(__dirname.length + 1, __filename.lastIndexOf("."))

1

もう久しぶりですが、やってみました__filename.split('\\').pop()。これはファイル名を含むフルパスを取得し、それを分割して、ファイル名に\なる最後のインデックスを取得します。


1
macOSの場合__filename.split('/').pop()
— Reece Daniels

1

この関数を使用してファイル名を取得できます。

/**
 * @description 
 * get file name from path
 * @param {string} path path to get file name
 * @returns {string} file name
 * @example 
 * getFileName('getFileName/index.js') // => index.js
 */
export default function getFileName(path) {
    return path.replace(/^.*[\\\/]/, '');
}

nodejsを使用する場合、この関数を含むパッケージをインストールできます https://www.npmjs.com/package/jotils

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.