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

Che*_*tan 7 javascript object module.exports

假设我有一个 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"
]
Run Code Online (Sandbox Code Playgroud)

现在该文件作为 lib.js 保存在其中一个文件夹中。由于该文件具有导出功能,因此导出的文件可以由其他 JavaScript 文件导入。

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

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

Employment
HolidayPopupContainer
withStyles
DayView 
Status 
Run Code Online (Sandbox Code Playgroud)

Object.keys在这里有什么帮助吗?

Cer*_*nce 8

首先,模块中应该只有一个默认导出。如果你解决这个问题,并删除默认导出之一 - 比如说,你更改DayView为命名导出,然后使用

import * as LibNamespace from './lib.js'
Run Code Online (Sandbox Code Playgroud)

您将拥有一个(命名空间)对象,其属性是命名导出以及default默认导出的属性。对于您的代码,该对象的键将是

console.log(Object.keys(LibNamespace))
// ['Employment', 'HolidayPopupContainer', 'default', 'DayView', 'Status']
Run Code Online (Sandbox Code Playgroud)

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

const exportedVar = withStyles(styles)(Button);
export { exportedVar as withStyles };
Run Code Online (Sandbox Code Playgroud)

但这有点令人困惑,因为看起来您已经有一个withStyles在范围内命名的变量。也许可以将导出的变量称为其他名称:

export const buttonResult = withStyles(styles)(Button);
Run Code Online (Sandbox Code Playgroud)

(或任何你喜欢的)