Node.js - obtendo o nome do arquivo atual


121

Como obter o nome do arquivo atual, o nome da função e o número da linha?

Quero usá-lo para fins de registro / depuração, equivalente a __FILE__, __LINE__ em c

Respostas:


230

Node.js fornece uma API padrão para fazer isso: Caminho .

Obter o nome do script atual é fácil:

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

46

dentro de um módulo você pode fazer qualquer um dos seguintes para obter o caminho completo com o nome do arquivo

this.filename;
module.filename;
__filename;

Se você deseja apenas o nome real, sem caminho ou extensão, pode fazer algo assim.

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

32

Para obter apenas o nome do arquivo. Nenhum módulo adicional simplesmente:

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

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

24
'use strict';

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

Explicação

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

Aqui usamos a função de divisão com expressão regular como o primeiro parâmetro.
A expressão regular que queremos como separador é [\/](dividida por /ou \), mas o /símbolo deve ser escapado para distingui-lo do terminador regex /, portanto /[\\/]/.

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

Não use isto

Você realmente deve usar em path.basenamevez disso ( documentado primeiro em Node.js v0.1.25 ), porque ele lida com todos os casos extremos que você não quer saber, como nomes de arquivos com barras dentro (por exemplo, arquivo denominado "foo \ bar" no unix). Veja a pathresposta acima .


3

Você também pode olhar para console-plus . Isso adiciona o nome do arquivo e o número da linha a qualquer texto de registro e tem cores diferentes para .log, .info e .error.


1

Bem, eu queria usar o nome do arquivo como a tag para o logger, então o mais direto e o que eu queria é isso:

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

1

Eu sei que já faz muito tempo, mas o que eu fiz é __filename.split('\\').pop(). Isso obterá o caminho completo com o nome do arquivo, divida-o \e obterá o último índice que será o seu nome de arquivo.


1

você pode usar esta função para obter o nome do arquivo:

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

se você usar nodejs, você pode instalar o pacote que inclui esta função https://www.npmjs.com/package/jotils

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.