有没有办法从JavaScript文件中获取所有导出的名称?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法从JavaScript文件中获取所有导出的名称?相关的知识,希望对你有一定的参考价值。

假设我有一个javascript文件(lib.js),该文件可以导出一些类,函数等。

export class Employment 
    id = "";
    startDate = "";
    endDate = "";
    companyEmailAddress = "";
;


export function HolidayPopupContainer() 
    return (<div id="#HolidayPopupContainer" />);


export default withStyles(styles)(Button);

export default class DayView extends React.Component 
    constructor(props) 
        super(props);
        this.state = 
            readOnly: false
        


    ;
export const Status = [
    "Select Status",
    "Pending",
    "Approved",
    "Rejected",
    "All"
]

现在,此文件另存为lib.js在其中一个文件夹中。由于此文件已导出,因此导出的文件可以由其他JavaScript文件导入。

有一种方法可以通过编程方式从JavaScript文件中找到导出的完整列表。

预期输出应为列表/数组/ json等。上述js文件的输出为

Employment
HolidayPopupContainer
withStyles
DayView 
Status 

Object.keys对您有帮助吗?

答案

根据文档-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export,每个模块只能有一个default export

除了上述解决方案之外,您还可以使用动态导入来获取导出的名称。

// some.js

export const name = "someName";

export class Employment 
    id = "";
    startDate = "";
    endDate = "";
    companyEmailAddress = "";
;

export function HolidayPopupContainer() 
    return "HolidayPopupContainer";


export default class DayView  
    constructor() 

    


export const Status = [
    "Select Status",
    "Pending",
    "Approved",
    "Rejected",
    "All"
]

// index.js

const exportedVar = [];

import('./some.js')
    .then(module => 
        const default: defaultExport, ...rest = module;
        exportedVar.push(defaultExport.name, ...Object.keys(rest));
        console.log(exportedVar);
    );

请参阅-https://stackblitz.com/edit/js-yndmc6

另一答案

首先,模块中应该只有one个默认导出。如果您修复了该问题,并删除了默认导出之一,例如,将DayView更改为命名导出,然后使用[]

import * as LibNamespace from './lib.js'

您将有一个(命名空间)对象,其属性为命名的导出,再加上默认导出的default属性。对于您的代码,此对象的键将是

console.log(Object.keys(LibNamespace))
// ['Employment', 'HolidayPopupContainer', 'default', 'DayView', 'Status']

如果您想将withStyles命名为“ named”,而不是将其包含在上面,而不是default,则需要将其更改为命名出口:

const exportedVar = withStyles(styles)(Button);
export  exportedVar as withStyles ;

但是有点令人困惑,因为看起来您的作用域中已经有一个名为withStyles的变量。也许将导出的变量称为其他名称:

export const buttonResult = withStyles(styles)(Button);

(或您喜欢的任何东西)

以上是关于有没有办法从JavaScript文件中获取所有导出的名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有所有属性的页面复制canvas元素?

如何使用 JavaScript 从完整路径中获取文件名?

从对象 id 中提取日期并将其导出到 mongodb 中的 csv

有没有办法从通过 JavaScript 嵌入的 YouTube 视频中获取 CHAPTERS?

有没有办法从不同的 foreach 中获取值?

有没有办法在不使用画布 API 的情况下从图像文件中获取二进制数据?