Я хотел провести рефакторинг своего приложения 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'