我需要获取导入类的文件名:
fileA.js
export default 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
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?
}
答案 0 :(得分:1)
默认情况下,您无法获得该信息,相关模块必须提供访问信息的方式。
您已经提到过__filename
,所以我假设您正在使用Node。提供User
的模块可以提供如下信息:
export const SourceFilename = __filename;
请注意,如果没有节点__filename
(但有一个under consideration并且距离存在的路径相当远,那么没有符合规范的方法添加)。
更新了有关更新问题的答案:提供此信息的类(构造函数)User
上没有任何内容。同样,定义User
的代码需要提供该信息(作为User
上的属性,作为您可以从模块获得的内容并单独传递给装饰器等)。否则,它根本无法使用。