如何从子文件名中获取父文件名?

时间:2018-05-11 19:30:02

标签: node.js path

我正在使用以下内容从parent.js文件中打印文件名:

let path = require('path');
let fileName = path.basename(__filename);
console.log(fileName);

但是,我正在调用child.js文件中的parent.js文件,实际上我想从parent.js文件中打印child.js的文件名,例如

console.log(childFileName + " is being called by " + parentFileName);
childFileName is being called by parentFileName

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

<强> parent.js

const path = require('path');
const fileName = path.basename(__filename);
const child = require('child.js')(fileName)

<强> child.js

const path = require('path');
const fileName = path.basename(__filename);

module.exports = (requiredFrom = 'Somewhere') => {
    console.log(`${fileName} is being called from ${requiredFrom}`);
}

此方法需要将具有调用者名称的子文件作为参数,这将使所需文件中的文件可用作module.exports返回函数时可以使用的参数

编辑1

  

我更喜欢只需要子文件中的路径并从那里打印或使用不同的工具

关键部分是将必要的信息从父母传递给孩子,这发生在这里:

const child = require('child.js')(fileName)

因此,要在 parent.js 文件中执行相同的操作而不需要path,您可以执行以下操作:

<强> parent.js

const child = require('child.js')(__filename);

<强> child.js

const path = require('path');
const fileName = path.basename(__filename);

module.exports = (fileFrom = '') => {
    const requiredFrom = path.basename(fileFrom) || 'Somewhere';
    console.log(`${fileName} is being called from ${requiredFrom}`);
}

无论如何,一旦您在应用上的任何位置需要path模块,它就会被缓存,因此这不会提高应用的性能。

的方法,另外

您也可以使用错误 hackish 方式执行此操作,它可能符合您的需求:

<强> parent.js

const child = require('child.js');

<强> child.js

const path = require('path')
const fileName = path.basename(__filename);
const requiredFrom = module.parent.filename;

console.log(`${fileName} is being called from ${requiredFrom}`);

delete require.cache[__filename]

这种方法的缺点是你将失去保留child.js文件的不同需求值的能力(这会在每次需要时从require.cache删除文件)