Автоматическое сканирование для файлов конфигурации из ExtJS
Я создаю приложение ExtJS 6.2 с нуля. Я новичок в этой структуре, поэтому я мог бы использовать некоторую помощь при создании лесов.
В разработанном приложении должны быть отдельные "плагины", которые (на уровне кода/пакетов) будут полностью разделены. У нас также есть какой-то Маршрутизатор, который зарегистрирует некоторую информацию для имени имени (путь/контроллер/модель/дополнительная информация). Я бы хотел, чтобы она работала аналогично шаблону проектирования шаблонов. Когда я добавляю новый плагин/модуль, я также добавляю файл с определенным шаблоном имени - например. ModuleACMEGlobalConf. Я хочу, чтобы приложение ExtJS (или компонент/класс - независимо) каким-то образом сканировало все дерево классов для файлов с таким шаблоном имени, прочитало их содержимое, а затем разместило мою конфигурацию/глобальное пространство имен маршрутизатора.
И вопрос в том, что это лучший способ достичь этого?
UPDATE:
Структура Я хочу иметь:
MyAppFolder
---Module1
.....MyConfigGlobal1.js
---Module2
.....MyConfigGlobal2.js
---
---Router.js -> I want this file to scan whole 'MyAppFolder' tree, find files with *ConfigGlobal*.js pattern, read them and store in global namespace
MyConfigGlobal1.js
var config = { configProp1: 'test', configProp2: 'test2'}
MyConfigGlobal2.js
var config = {configProp3: 'test3', configProp4: 'test4'}
Router.js
var configsMap = EXT.SOMETHING.FIND.ME.CLASSES.FROM.TREE.WITH.NAME('*MyConfigGlobal*')
И я хочу, чтобы маршрутизатор загружал все (он может быть на уровне класса, а не на уровне файла) - будь то один класс или сто. И с этим решением мне не нужно менять Router.js когда-либо - просто добавьте еще один класс конфигурации в новом модуле, который я создаю. Поэтому нет необходимости повторять предыдущие модули.
Но если в Router есть что-то подобное:
var requiredConfigs = ['MyGlobalConfig1.js','MyGlobalConfig2.js']
И я собираюсь добавить третий файл/класс в этот список в Router, это означает, что политика сломана, и мне нужно повторно протестировать module1 и module2, потому что код, общий для них каким-то образом, был изменен.
Ответы
Ответ 1
Без грубой форсировки или вызова на бэкэнд вы не сможете. Это ограничение браузера.
Причина - безопасность. Потому что, если бы вы могли, тогда теоретически можно было бы использовать JavaScript для сканирования веб-сайтов и получения структур каталогов, возможно, просмотра или даже доступа к файлам без разрешения.
Лучший и, возможно, самый эффективный способ - написать метод, который сканирует ваш веб-каталог в вашем бэкэнд и доставляет список, как вы упомянули в своей идее requiredConfigs
как объект JSON. Даже что-то вроде
<script type="text/javascript" source="configFiles.js"></script>
в вашем файле index.html будет работать надежно. Затем у вас есть список файлов для загрузки. Затем вы можете изменить свой загрузочный файл таким образом, чтобы эти файлы были включены в ваш необходимый список, который может быть выполнен с использованием чистого JavaScript, непосредственно перед инициализацией ExtJS.