5

假设我有一个 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在这里有什么帮助吗?

4

2 回答 2

4

首先,一个模块中应该只有一个默认导出。如果您解决了这个问题,并删除了一个默认导出 - 例如,您更改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);

(或任何你喜欢的)

于 2019-12-04T11:49:48.007 回答
1

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

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

// 一些.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

于 2019-12-07T07:05:19.103 回答