Добрый день!
Решил освежить в памяти JS и разобраться в новых веяниях, а то как-то забросил его.
Начал с TypeScript и node.js, а заодно задумался на тему организации кода и какой-то модульной системы.
И, чтобы всё это совместить, написал на TypeScript модульную систему, которая эмулирует ноду в браузере.
Не совсем, конечно, эмулирует, но немного.
Собственно, вот:
axy.define.
Имеется некая виртуальная файловая система, в которой в виде файлов лежат модули и любые другие данные, с ними можно работать с помощью модуля fs.
require() ищет модули внутри этой "ФС".
Полный алгоритм ноды: относительные пути, поиск по node_modules + системные каталоги, подстановка расширений, индексные файлы, package.json...
Можно написать аяксовый загрузчик и модули с данными будут прозрачно подсасываться с сервера.
Частично реализованы некоторые элементы окружения, global, process, модули ядра, такие как fs, path.
Пример
Ссылка
Тестовое приложение тупо меняет цвет страницы на серый.
Для сборки проекта есть
утилита в виде npm модуля, которая запускается из командной строки с нужными опциями.
Рекурсивно и асинхронно обходит каталог с исходниками, заключает модули во врапперы, записывает всё в итоговый каталог.
В примере тестовый проект собран вместе с node_modules в которой лежит сама утилита сборки.
В браузере же:
1. Из "командной строки" опять запускается сборка проекта уже в виртуальной ФС.
2. Собранный проект запускает отдельную песочницу.
3. В песочнице опять проходит сборка с нуля.
4. Собранный повторно проект уже запускается и меняет цвет страницы.
5. Стандартный поток вывода перенаправлен из консоли в дивы.
Такой вот трэш.
Вопросы
1. Почему данное решение шлак?
2. Кто использует на данную тему, что-нибудь кроме бабеля? Какие отзывы?