Javascript js获取包含类定义的文件的文件名
我需要获取导入类的文件名: fileA.jsJavascript 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
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:基本相同的答案(我已经更新):除非模块提供信息,否则您将无法使用它。很好的提示。我可以将文件名作为一个属性添加到类中,这样我就可以访问它,而不必显式地执行/导入它。