Важно: каждая задача выполняется в виде отдельного проекта с собственным GitHub репозиторием.
Важно: на данные задачи требование отсутствия ошибок в ESLint не распространяется (но вы можете его запустить и изучить ошибки, которые вам будут показаны).
Важно: решения должны быть построены на базе шаблона Webpack (для задач под номерами 1 и 2).
В личном кабинете на сайте netology.ru в поле комментария к домашней работе вставьте ссылки на ваши GitHub-проекты.
Ваш проект разросся и необходимо его разделить на модули. Модули помогают обеспечить изолированность кода и внести порядок в проект. Но для работы с модулями необходимо настроить загрузчик модулей (удостоверьтесь с помощью сервиса caniuse.com что модули поддерживаются не везде).
Используйте следующую структуру, чтобы настроить экспорт в бандл:
- каталог
src
:- каталог
css
- файл
style.css
(в качестве содержимого используйтеbody { color: #999; }
)
- файл
- каталог
js
- файл
app.js
(в качестве содержимого используйтеconsole.log('app worked')
)
- файл
- файл
index.html
(шаблон для HTMLWebpackPlugin) (содержимое файла - произвольно, скрипты и стили должны подключаться автоматически, за счёт использования HTMLWebpackPlugin и MiniCssExtractPlugin) - файл
index.js
(Webpack entry point)
- каталог
- файл
webpack.config.js
- файл
package.json
- другие файлы
Убедитесь, что после экспорта, бандл запускается и работает (создайте для этого скрипт в npm, который запускает HTTP-сервер для каталога dist
). HTTP-сервер выберите сами.
Вы успешно настроили загрузку модулей с Webpack и сборку приложения. Пришло время всё грамотно разделить на модули!
Разделите всё приложение на модули:
- Модуль Domain - где будет храниться логика предметной области (персонажи, атаки и т.д.)
- Модуль Game - отвечающий за работу приложения (загрузку и сохранение)
- Модуль App - отвечающий за запуск приложения
Заглушки для модулей:
файл domain.js
:
class Character {
}
файл game.js
class Game {
start() {
console.log('game started');
}
}
class GameSavingData {
}
function readGameSaving() {
}
function writeGameSaving() {
}
файл app.js
const game = new Game();
game.start();
Организуйте:
- Из модуля
domain
экспорт классаCharacter
в качествеdefault
'ного - В модуле
game
импорт классаCharacter
- Экспорт из модуля
game
классаGame
в качестве дефолтного, классаGameSavingData
и функцийreadGameSaving
иwriteGameSaving
- В модуле
app.js
одним импортом импортируйтеGame
,GameSavingData
и функцииreadGameSaving
,writeGameSaving
(их при импорте переименуйте вloadGame
иsaveGame
соответственно)
С самими функциями и классами ничего делать не нужно, нужно только правильно расставить инструкции import
/export
.
Важно: данная задача не является обязательной
В качестве внутреннего эксперимента вы решили попробовать нативную поддержку модулей в браузерах (без Webpack).
Преобразуйте предыдущую задачу так, чтобы использовалась нативная поддержка модулей ES в браузерах.
Для этого инициализируйте проект на базе npm
, подключите туда live-server (ESLint, Babel и Webpack не подключайте).
Подключите все модули* на базовую страницу index.html
, так, чтобы при открытии этой страницы в браузере в консоли отобразилось game started
.
Наверное, стоит подключать не все, а только "стартовый".
В личном кабинете на сайте netology.ru в поле комментария к домашней работе вставьте ссылки на ваши GitHub-проекты.