Круговые зависимости возвращают неопределенный - PullRequest
0 голосов
/ 16 марта 2019

Я хотел провести рефакторинг своего приложения Nodejs / Babel 7.Это приложение GraphQL с моделями Bookshelf.js для управления базой данных.Поэтому я организовал свой код в несколько частей:

  • index.js, server.js и несколько других «бесплатных» файлов, которые в основном являются точками входа в каталог приложения
  • смодели с окончанием вида индексного файла, который пересылает экспорт (пример ниже)
  • каталог с типами GQL, с аналогичным индексным файлом
  • каталог с запросами GQL, снова с аналогичным индексным файлом
  • каталог со службами, аналогичный индексный файл

Пока все хорошо.До рефакторинга модули просто импортировали некоторые другие модули напрямую, поэтому хотелось иметь хороший однострочный импорт, например:

import {Contact, Product, Set, Content, User} from 'models/Models'

Но ... здесь есть проблема.мои модули сильно зависят друг от друга.Под этим я подразумеваю, что модель иногда импортирует сервис или тип, сервис может импортировать модели и так далее.Когда я запустил код, я обнаружил кучу ошибок «ожидал чего-то, но нашел неопределенные».Я исследовал этот вопрос и обнаружил, что это из-за циклических зависимостей - мои индексные файлы загружены не полностью и поэтому возвращают неопределенное значение.Забавно то, что до того, как я реорганизовал код, все работало (поэтому нет реальной проблемы с циклическими зависимостями, их можно решить с помощью транспилятора, но когда я использую «индексные» файлы для структурирования импорта, это невозможно).

Очевидным решением было бы вернуться к предыдущей структуре и просто жить с ней, но это только краткосрочное решение.Как я могу решить эту проблему?

Пример файла индекса (обрезается):

export { default as Contact } from 'models/ancestor/Contact'
export { default as Content } from 'models/ancestor/Content'

export { default as UserData } from 'models/mega/UserData'

export { default as Action } from 'models/organization/Action'
export { default as Connection } from 'models/organization/Connection'
...