Я анализирую все модули в каталоге, инициализирую их и, наконец, экспортирую. Рассматриваемые модули - это knex
модели, подобные этой:
// schema/users.js
import createModel from './common'
const name = 'User'
const tableName = 'users'
const selectableProps = ['userId', 'name', 'email', 'updated_at', 'created_at']
export default knex => {
const model = createModel({
knex,
name,
tableName,
selectableProps,
})
return { ...model }
}
Каждое из определений модели расширено общими частями:
// schema/common.js
export default ({
knex = {},
name = 'name',
tableName = 'tablename',
selectableProps = [],
timeout = 1000,
}) => {
const findAll = () =>
knex
.select(selectableProps)
.from(tableName)
.timeout(timeout)
return {
name,
tableName,
selectableProps,
timeout,
findAll,
}
}
Наконец, все модели инициализируются и экспортируются :
// schema/index.js
import { readdir } from 'fs'
import { promisify } from 'util'
import { default as knex } from '../db'
let modules = {}
export default new Promise(async $export => {
const readFileAsync = promisify(readdir)
const getModels = async dir => await readFileAsync(dir)
const files = await getModels(__dirname)
for await (const file of files) {
if (file !== 'common.js' && file !== 'index.js') {
let mod = await import(__dirname + '/' + file).then(m => m.default(knex))
modules[mod.name] = mod
}
}
await $export(modules)
console.log(modules)
})
Кажется, вышеописанное работает, но я не могу понять, как импортировать один из этих модулей из другого файла. Я пытаюсь сделать что-то вроде:
const User = async () => await import('../schema') // not working
или
const User = (async () => await import('../schema'))() // not working
Любая помощь в этом будет оценена!