Jak uzyskać aktualną nazwę pliku, nazwę funkcji i numer linii?
Chcę go używać do rejestrowania / debugowania cel, równoważna __FILE__, __LINE__ wc
Jak uzyskać aktualną nazwę pliku, nazwę funkcji i numer linii?
Chcę go używać do rejestrowania / debugowania cel, równoważna __FILE__, __LINE__ wc
Odpowiedzi:
Node.js udostępnia do tego standardowy interfejs API: Path .
Uzyskanie nazwy bieżącego skryptu jest wtedy łatwe:
var path = require('path');
var scriptName = path.basename(__filename);
script.js, otrzymasz script.js. Jeśli chcesz mieć tylko nazwę bez rozszerzenia, tak jak mówimy tutaj o jsskrypcie, możesz użyć var scriptName = path.basename(__filename, '.js');lubvar scriptName = path.basename(__filename, path.extname(__filename))
path.parse(__filename).name
__filenamenie jest zdefiniowany w module ES6.
CommonJSzmienne nie są dostępne w modułach ES. Odpowiedniki __filenamei __dirnamemożna tworzyć w każdym pliku za pośrednictwem import.meta.url.
w module możesz wykonać dowolną z następujących czynności, aby uzyskać pełną ścieżkę z nazwą pliku
this.filename;
module.filename;
__filename;
Jeśli potrzebujesz tylko rzeczywistej nazwy bez ścieżki ani rozszerzenia, możesz zrobić coś takiego.
module.filename.slice(__filename.lastIndexOf(path.sep)+1, module.filename.length -3);
var path = require('path');wcześniej lub zmienić gomodule.filename.slice(__filename.lastIndexOf(require('path').sep)+1, module.filename.length -3);
path.basename(module.filename, path.extname(module.filename))
Aby uzyskać tylko nazwę pliku. Brak dodatkowego modułu po prostu:
// 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' ]
*
**/
Tutaj używamy funkcji split z wyrażeniem regularnym jako pierwszym parametrem.
Wyrażenie regularne, którego chcemy jako separator, to [\/](podzielone przez /lub \), ale /symbol musi zostać zmieniony, aby odróżnić go od terminatora wyrażenia regularnego /, więc /[\\/]/.
const scriptName = __filename.split(/[\\/]/).pop(); // Remove the last array element
console.log(scriptName);
// 'yourScript.js'
Naprawdę powinieneś użyć path.basenamezamiast tego (po raz pierwszy udokumentowano w Node.js v0.1.25 ), ponieważ obsługuje on wszystkie narożne przypadki, o których nie chcesz wiedzieć, jak nazwy plików ze ukośnikami w środku (np. Plik o nazwie "foo \ bar" na unixie). Zobacz pathodpowiedź powyżej .
javascript spliti zacznij działać.
Możesz również spojrzeć na console-plus . To dodaje nazwę pliku i numer linii do dowolnego tekstu logowania i ma różne kolory dla .log, .info i .error.
Wiem, że minęło już dużo czasu, ale to co zrobiłem __filename.split('\\').pop(). Spowoduje to uzyskanie pełnej ścieżki z nazwą pliku, podziel go, \a następnie otrzyma ostatni indeks, który będzie nazwą pliku.
__filename.split('/').pop()
możesz użyć tej funkcji, aby uzyskać nazwę pliku:
/**
* @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(/^.*[\\\/]/, '');
}
jeśli używasz nodejs, możesz zainstalować pakiet zawierający tę funkcję https://www.npmjs.com/package/jotils