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

有没有办法从JavaScript文件中获取所有导出的名称?,javascript,object,module.exports,Javascript,Object,Module.exports,假设我有一个JavaScript文件(lib.js),它导出一些类、函数等 export class Employment { id = ""; startDate = ""; endDate = ""; companyEmailAddress = ""; }; export function HolidayPopupContainer() { return (<div id="#HolidayPopupContainer" />); }

假设我有一个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"
]

有什么帮助吗?

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

import * as LibNamespace from './lib.js'
您将拥有一个(名称空间)对象,其属性为命名导出,以及默认导出的
default
属性。对于您的代码,此对象的键将

console.log(Object.keys(LibNamespace))
// ['Employment', 'HolidayPopupContainer', 'default', 'DayView', 'Status']
如果希望将
with style
命名为“命名”,并包含在上述内容中而不是
default
,则需要将其改为命名导出:

const exportedVar = withStyles(styles)(Button);
export { exportedVar as withStyles };
但这有点让人困惑,因为它看起来已经有了一个名为
withStyles
的变量。可能将导出的变量称为其他变量:

export const buttonResult = withStyles(styles)(Button);
(或您喜欢的任何内容)

根据文档-,每个模块只能有一个
默认导出

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

//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);
    });

请参阅-

import*作为“模块名称”中的名称。。。现在,
name.Employment
name.HolidayPopupContainer
等是您访问他导出的内容的方式(名称可以是您想要的任何内容)-这是因为我没有尝试过,所以请更正我的错误,但我认为您应该能够从“/Lib”中执行
import*作为Lib
然后执行
Object.keys(Lib)
。但是,您应该从某些导出中删除默认关键字,因为
default
将成为lib上的一个属性。如果对象属性是您要查找的,则可以使用Object.keys,在这种情况下,属性是您导出的项?@Kobe<代码>导入默认导出,*作为“模块名称”中的名称?@JaromandaX我想那会有用的,不错的。
const exportedVar = [];

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