您可以执行以下操作:
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 模块,它将被缓存,因此这不会提高应用的性能。
另外
您也可以以 bad 或 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 中删除文件)