Как получить текущее имя файла, имя функции и номер строки?
Я хочу использовать его для входа / отладки цели, что эквивалентно __FILE__, __LINE__ в с
Как получить текущее имя файла, имя функции и номер строки?
Я хочу использовать его для входа / отладки цели, что эквивалентно __FILE__, __LINE__ в с
Ответы:
Node.js предоставляет для этого стандартный API: Путь .
Тогда легко получить имя текущего скрипта:
var path = require('path');
var scriptName = path.basename(__filename);
script.jsвы получите script.js. Если вы хотите, чтобы имя было только без расширения, как мы говорим здесь о jsскрипте, вы можете использовать var scriptName = path.basename(__filename, '.js');orvar scriptName = path.basename(__filename, path.extname(__filename))
path.parse(__filename).name
__filenameне определен в модуле ES6.
CommonJSпеременные недоступны в модулях ES. Эквиваленты __filenameи __dirnameмогут быть созданы внутри каждого файла с помощью import.meta.url.
внутри модуля вы можете выполнить любое из следующих действий, чтобы получить полный путь с именем файла
this.filename;
module.filename;
__filename;
Если вам просто нужно настоящее имя без пути или расширения, вы можете сделать что-то вроде этого.
module.filename.slice(__filename.lastIndexOf(path.sep)+1, module.filename.length -3);
var path = require('path');module.filename.slice(__filename.lastIndexOf(require('path').sep)+1, module.filename.length -3);
path.basename(module.filename, path.extname(module.filename))
Чтобы получить только имя файла. Никаких дополнительных модулей просто:
// 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' ]
*
**/
Здесь мы используем функцию разделения с регулярным выражением в качестве первого параметра.
Регулярное выражение, которое мы хотим использовать в качестве разделителя, - это [\/](разделить на /или \), но /символ должен быть экранирован, чтобы отличать его от терминатора регулярного выражения /, поэтому /[\\/]/.
const scriptName = __filename.split(/[\\/]/).pop(); // Remove the last array element
console.log(scriptName);
// 'yourScript.js'
Вы действительно должны использовать path.basenameвместо этого (впервые задокументировано в Node.js v0.1.25 ), потому что он обрабатывает все угловые случаи, о которых вы не хотите знать, например, имена файлов с косой чертой внутри (например, файл с именем "foo \ bar" в unix). См. pathОтвет выше .
javascript splitи приступайте.
Вы также можете посмотреть console-plus . Это добавляет имя файла и номер записи к любому тексту журнала и имеет разные цвета для .log, .info и .error.
Я знаю, что прошло уже много времени, но я сделал то, что сделал __filename.split('\\').pop(). Это получит полный путь с именем файла, разделит его, а \затем получит последний индекс, который будет вашим именем файла.
__filename.split('/').pop()
вы можете использовать эту функцию для получения имени файла:
/**
* @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