Javascript js获取包含类定义的文件的文件名

Javascript js获取包含类定义的文件的文件名,javascript,filenames,Javascript,Filenames,我需要获取导入类的文件名: fileA.js export default class User { } import someDecorator from './decorator' @someDecorator class User { } fileB.js import User from './fileA' function getClassFilename(constructor) { // do something like __filename, but to ge

我需要获取导入类的文件名:

fileA.js

export default class User {
}
import someDecorator from './decorator'

@someDecorator
class User {
}
fileB.js

import User from './fileA'

function getClassFilename(constructor) {
    // do something like __filename, but to get the filename where User is defined rather than the current filename
}

console.log(getClassFilename(User.constructor)) // fileA.js
这是总的想法。然而,实际用例是基于装饰器的:

fileA.js

export default class User {
}
import someDecorator from './decorator'

@someDecorator
class User {
}
decorator.js

export default function (target) {
    // can I somehow get the target filename without passing it as a property?
}

默认情况下,该信息不可用,相关模块必须提供访问该信息的方法

您已经提到了
\u filename
,所以我假设您正在使用Node。提供
用户
的模块可以提供如下信息:

export const SourceFilename = __filename;
注意:如果没有节点的
\uu文件名
(但是有一种方法,而且在添加的过程中,这是合理的)



更新问题的更新答案:类(构造函数)
User
中没有存储提供此信息的内容。同样,定义
用户
的代码需要提供这些信息(作为
用户
上的属性,作为您可以从模块中获得并单独传递给装饰器的内容,等等)。否则,您将无法使用它。

谢谢您的建议。不幸的是,我现在不得不意识到,我试图概括我的用例太多了,因为我试图在应用于类的装饰器中获取文件名。我会更新这个问题。对不起that@Chris:基本相同的答案(我已经更新):除非模块提供信息,否则您将无法使用它。很好的提示。我可以将文件名作为一个属性添加到类中,这样我就可以访问它,而不必显式地执行/导入它。