javascript - 通过读取 Node.js 中目录中的所有文件来动态导出模块

标签 javascript node.js es6-modules

所以今天我尝试读取所有默认导出 来自某个包含 index.js 的目录。尝试将其包装在一个对象内,然后再次将其导出。有没有更好的方法来处理这个问题?

 export default (() => require('fs')
            .readdirSync(__dirname)
            .filter(fileName => !!/.js$/ig.test(fileName))
            .map(fileName => fileName.split('.')[0])
            .reduce((defaultExportObj, nextFileName) => {
                try {
                    return {
                        ...defaultExportObj,
                        [nextFileName]: require(__dirname + `/${nextFileName}`),
                    };
                }catch(err) { throw err; }
            }, {}))();

最佳答案

我想我会做这样的事情 - 不确定这是否更好 - 更好的是 ^^

webpack: require.context

function expDefault(path, mode = "sync"){

    const modules = {}
    const context = require.context(path, false, /\.js$/, mode)
    context.keys().forEach(file => {
        const name = fileName.replace(/^.+\/([^/]+)\.js$/, "$1")
        modules[name] = context(name).default
    })
    return modules
}
export default expDefault(__dirname)

关于javascript - 通过读取 Node.js 中目录中的所有文件来动态导出模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58457014/

相关文章:

javascript - JS 导入是不可变的还是不可写的?

javascript - 使用 VueJS、VuelidateJS 和 NodeJS/Express 时的项目结构

javascript - Safari DP导入ES2015模块需要文件扩展名

javascript - 如何创建翻书/翻页?

javascript - Node.js 通过快速渲染将参数传递给客户端

javascript - fs.write 和 read 不更新

node.js - 在 Node js 应用程序中实现国际化的最佳方法

javascript - 我应该将上传功能放在Vue组件中的哪里?

javascript - 根据一组规则即时修改链接 (Greasekit/Javascript)

javascript - Angular 4 : Can't bind to 'ngForFor' since it isn't a known property of 'li'