js 获取包含 class 定义的文件的文件名

js get filename of file containing class definition

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

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?
}

默认情况下您无法使用该信息,相关模块必须提供访问该信息的方法。

您已经提到 __filename 所以我假设您使用的是 Node.提供 User 的模块可以提供这样的信息:

export const SourceFilename = __filename;

请注意,如果没有 Node 的 __filename,就没有符合规范的方法来做到这一点(但是有一个 under consideration 并且在添加的道路上相当远)。


更新问题的更新答案:class(构造函数)User 上没有存储提供此信息的任何内容。因此,再次定义 User 的代码需要提供该信息(作为 User 上的 属性,作为您可以从模块中获取并单独传递给装饰器等的东西) .否则,您根本无法使用它。