有什么方法可以从JavaScript文件中获取所有导出的名称?

时间:2019-12-04 11:44:12

标签: 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"
]

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

是否可以通过编程方式从JavaScript文件中找到导出的完整列表。

预期输出应为list / array / json等。上述js文件的输出应为

Employment
HolidayPopupContainer
withStyles
DayView 
Status 

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

2 个答案:

答案 0 :(得分:0)

根据文档-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

答案 1 :(得分:-1)

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

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

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

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

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

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

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

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

(或您喜欢的任何内容)