我正在使用以下内容从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
答案 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
返回函数时可以使用的参数
我更喜欢只需要子文件中的路径并从那里打印或使用不同的工具
关键部分是将必要的信息从父母传递给孩子,这发生在这里:
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
删除文件)