如何获取当前文件名、函数名和行号?
我想用它来记录/调试,相当于__FILE__
,__LINE__
在c
Node.js 提供了一个标准 API 来执行此操作:Path。
获取当前脚本的名称很容易:
var path = require('path');
var scriptName = path.basename(__filename);
在模块中,您可以执行以下任何操作来获取带有文件名的完整路径
this.filename;
module.filename;
__filename;
如果您只想要没有路径或扩展名的实际名称,您可以这样做。
module.filename.slice(__filename.lastIndexOf(path.sep)+1, module.filename.length -3);
仅获取文件名。简单地没有额外的模块:
// 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' ]
*
**/
这里我们使用带有正则表达式的split函数作为第一个参数。
我们想要用于分隔符的正则表达式是(split by or ) 但必须对符号进行转义以将其与正则表达式终止符区分开来,所以. [\/]
/
\
/
/
/[\\/]/
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
的答案。
您还可以查看console-plus。这会将文件名和行号添加到任何日志记录文本中,并且 .log、.info 和 .error 具有不同的颜色。
好吧,我想使用文件名作为记录器的标签,所以最直接的,我想要的是:
__filename.substring(__dirname.length + 1, __filename.lastIndexOf("."))
我知道已经很久了,但我所做的是__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
只是因为我没有看到它在这里列出,另一种选择是__dirname
从__filename
.
__filename.replace(`${__dirname}/`, '')
如果您不想导入path
模块,我认为这很有用。但是,我相信这path.basename(__filename)
是最合适的。