Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

231
Visualizações
Desde una función, ¿cómo obtener detalles sobre el módulo que realmente llamó a esta función?

En una función de uso general, me gustaría obtener información sobre el módulo que llama a esta función (especialmente el directorio base, que se puede recuperar dentro de un módulo con path.dirname(module.filename) ).

lo que probé

Por ahora, la única forma que encontré para hacerlo es agregar un module como parámetro para la función:

lib/mi-lib.js :

 const path = require('path'); exports.print_calling_module_path = function(calling_module) { console.log(path.dirname(calling_module.filename)); }

principal.js :

 const my_lib = require('./lib/my-lib.js'); console.log('Here is the path of this actual module:'); my_lib.print_calling_module_path(module);

... pero obliga a usar un parámetro extra, que contamina la lista de argumentos de funciones con (¿posiblemente?) información deducible.

Lo que estoy buscando

Por ejemplo:

lib/mi-lib.js :

 const path = require('path'); exports.print_calling_module_path = function(/* no extra argument */) { let calling_module = .... ; // <== How to get this ?? console.log(path.dirname(calling_module.filename)); }

principal.js :

 const my_lib = require('./lib/my-lib.js'); console.log('Here is the path of this actual module:'); my_lib.print_calling_module_path(/* no extra argument */);

Dentro de la función print_calling_module_path() , ¿cómo puedo obtener el objeto del módulo de llamada sin pasarlo como parámetro? ¿Quizás algo relacionado con el seguimiento de la pila?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Consulte la documentación https://nodejs.org/api/modules.html#modules_the_module_object Mencionan las propiedades require.main y require.parent . Si no funciona para usted, use el comentario de ap sobre el uso de new Error().stack

over 4 years ago · Santiago Trujillo Relatório

0

Finalmente uso new Error().stack como sugirió ap; aquí el código final, siguiendo el ejemplo en la pregunta:

lib/mi-lib.js:

 function unique_filter(value, index, self) { return self.indexOf(value) === index; } function get_module_stack() { return new Error().stack.split(/\n/) .map(line => line.match(/\(([^:\)]*)/)) // Match lines with filenames .filter(match => match !== null) // Remove null matches .map(match => match[1]) // Map to the the actual filenames .filter(unique_filter) // Make filenames unique } exports.print_calling_module_path = function() { console.log(get_module_stack()[1]); }

Sin embargo, no estoy seguro de si este método es lo suficientemente confiable como para usarlo en la producción.
Cualquier comentario al respecto será bienvenido.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda