JavaScript/TypeScript中Python fn.__module__的等效实现方法
JavaScript/TypeScript中获取函数所属模块的方法
在Python中可以通过fn.__module__直接获取函数所属的模块,但JavaScript/TypeScript并没有原生提供类似的内置属性,不过可以通过以下几种方式实现等效效果:
1. ES模块(ESM)中自定义模块属性
在ES模块环境下,可以利用import.meta.url获取当前模块的URL,手动为函数附加模块标识:
mymodule.js
export function foo() {} // 为函数添加模块信息属性 foo.module = import.meta.url;
main.js
import { foo } from './mymodule.js'; console.log(foo.module); // 输出模块的完整URL,例如 file:///user/project/mymodule.js
TypeScript中的写法完全一致,只需将文件后缀改为.ts即可。
2. CommonJS模块中利用module对象
在Node.js的CommonJS环境中,可以直接使用module.filename获取模块的绝对路径,同样手动附加给函数:
mymodule.cjs
function foo() {} foo.module = module.filename; module.exports = { foo };
main.cjs
const { foo } = require('./mymodule.cjs'); console.log(foo.module); // 输出模块的绝对路径,例如 /user/project/mymodule.cjs
3. TypeScript装饰器统一处理
如果使用TypeScript,可以通过装饰器自动为函数添加模块信息,避免手动重复操作:
// 定义装饰器 function AttachModuleInfo(target: any, propertyKey: string) { target[propertyKey].module = import.meta.url; } export class MyModule { @AttachModuleInfo static foo() {} }
导入后访问MyModule.foo.module即可获取该函数所属模块的URL。
需要注意的是,以上所有方案都是通过自定义属性实现,因为JS/TS语言本身没有为函数内置模块归属的原生属性,这一点和Python的__module__有所不同。
内容的提问来源于stack exchange,提问作者theahura
相关产品推荐
相关产品推荐

