Проблема с динамиком ES2020 c import () - PullRequest
0 голосов
/ 12 апреля 2020

Я анализирую все модули в каталоге, инициализирую их и, наконец, экспортирую. Рассматриваемые модули - это 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

Любая помощь в этом будет оценена!

...