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

时间:2017-12-16 17:56:34

标签: javascript filenames

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

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

1 个答案:

答案 0 :(得分:1)

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

您已经提到过__filename,所以我假设您正在使用Node。提供User的模块可以提供如下信息:

export const SourceFilename = __filename;

请注意,如果没有节点__filename(但有一个under consideration并且距离存在的路径相当远,那么没有符合规范的方法添加)。

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