Node.js - Abrufen des aktuellen Dateinamens


Antworten:


230

Node.js bietet hierfür eine Standard-API: Pfad .

Das Abrufen des Namens des aktuellen Skripts ist dann einfach:

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

Erhält dies nicht eher den Basisnamen als den tatsächlichen Dateinamen?
Phil

10
Für ein Skript mit dem Namen erhalten script.jsSie script.js. Wenn Sie den Namen nur ohne Erweiterung haben möchten, da wir hier von einem jsSkript sprechen, können Sie es verwenden var scriptName = path.basename(__filename, '.js');odervar scriptName = path.basename(__filename, path.extname(__filename))
bis

6
eine andere Möglichkeit, die Erweiterung path.parse(__filename).name
RH Becker

__filenameist in einem ES6-Modul nicht definiert.
Cullub

1
@Cullub, Auszug aus der NodeJS- Dokumentation : Diese CommonJSVariablen sind in ES-Modulen nicht verfügbar. Entsprechungen von __filenameund __dirnamekönnen innerhalb jeder Datei über erstellt werden import.meta.url.
Herve

46

Innerhalb eines Moduls können Sie eine der folgenden Aktionen ausführen, um den vollständigen Pfad mit dem Dateinamen abzurufen

this.filename;
module.filename;
__filename;

Wenn Sie nur den tatsächlichen Namen ohne Pfad oder Erweiterung möchten, können Sie so etwas tun.

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

4
Sie möchten wahrscheinlich path.sep verwenden, um es plattformübergreifend zu machen. Folgendes habe ich getan: __filename.slice (__ filename.lastIndexOf (path.sep) +1);
Ryan

2
Für diejenigen, die nur diesen super praktischen var path = require('path');module.filename.slice(__filename.lastIndexOf(require('path').sep)+1, module.filename.length -3);
Einzeiler

17
die -3 nimmt eine Länge der Verlängerung an, so etwas könnte besser funktionierenpath.basename(module.filename, path.extname(module.filename))
dre

32

Nur um den Dateinamen zu erhalten. Kein zusätzliches Modul einfach:

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

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

Dafür bin ich hergekommen. Vielen Dank!
Leviathanbadger

1
Dies sollte die akzeptierte Antwort sein. Funktioniert im strengen Modus. Sehr einfach. Danke dir!
Matthew

2
Es sei denn, Ihre Erweiterung ist nicht 2 Zeichen lang. Dies ist durchaus möglich, da Sie die Skriptinterpretation an jede gewünschte Dateierweiterung binden können. Dies ist möglicherweise keine gute Allround-Lösung.
ErikE

24
'use strict';

const scriptName = __filename.split(/[\\/]/).pop();

Erläuterung

console.log(__filename);
// 'F:\__Storage__\Workspace\StackOverflow\yourScript.js'
const parts = __filename.split(/[\\/]/);
console.log(parts);
/*
 * [ 'F:',
 *   '__Storage__',
 *   'Workspace',
 *   'StackOverflow',
 *   'yourScript.js' ]
 *
**/

Hier verwenden wir die Split- Funktion mit regulärem Ausdruck als erstem Parameter.
Der reguläre Ausdruck wir für Separator wollen , ist [\/](Split durch /oder \) , aber /Symbol muss entwertet werden sie von regex Terminator zu unterscheiden /, so/[\\/]/ .

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

Verwenden Sie dies nicht

Sie sollten path.basenamestattdessen stattdessen verwenden (zuerst in Node.js v0.1.25 dokumentiert ), da es alle Eckfälle behandelt, die Sie nicht kennen möchten, wie Dateinamen mit Schrägstrichen (z. B. Datei mit dem Namen "foo \ bar" unter Unix). Siehe pathAntwort oben .


Bitte Erklärung hinzufügen
Daniel Cheung

@ DanielCheung Hier bist du! Aber wirklich alles ist im Internet durchsuchbar, einfach googeln javascript splitund loslegen.
ilyaigpetrov

3
Ich habe dir geholfen ... -_- Deine Antwort wurde zum Löschen gewählt. Eine Antwort, die nicht genug erklärt oder nur Code enthält, wird gelöscht.
Daniel Cheung

3

Sie können sich auch Console-Plus ansehen . Dies fügt jedem Protokolltext Dateinamen und Leinen hinzu und hat unterschiedliche Farben für .log, .info und .error.


Ziemlich cool. Installation mit "npm install --save console-plus" oder wenn Sie Garn verwenden: "yarn add console-plus"
Andrew Faulkner

1

Nun, ich wollte den Dateinamen als Tag für den Logger verwenden, also am einfachsten und was ich wollte, ist Folgendes:

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

1

Ich weiß, es ist schon lange her, aber was ich getan habe, ist __filename.split('\\').pop(). Dadurch wird der vollständige Pfad mit dem Dateinamen angezeigt. Teilen Sie ihn auf \und erhalten Sie den letzten Index, der Ihr Dateiname ist.


1
Auf macOS__filename.split('/').pop()
Reece Daniels

1

Mit dieser Funktion können Sie den Dateinamen abrufen:

/**
 * @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(/^.*[\\\/]/, '');
}

Wenn Sie nodejs verwenden, können Sie das Paket installieren, das diese Funktion https://www.npmjs.com/package/jotils enthält

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.