Рабочее пространство frontend#
Клиентский код пишется в редакторе vscode в рабочем пространстве.
Рабочее пространство позволяет одновременно работать с несколькими
nodejs проектами.
Рабочее пространство веб расширений распологается по адресу: btk/src/web/ext/packages.code-workspace
Nodejs проект#
Фронтент код компилируется с помощью технологии nodejs.
Шаблон проекта:
node_modules
Модули, необходимые для разработки и компиляции проекта. Данные модули закачиваются при инициализации проекта с помощью менеджера пакетовnpmsrc
Исходный кодpackage.json
Содержит перечень зависимостей необходимых для компиляции и выполнения проекта, а так же необходимые скрипты для разработки.rollup.mjs
Содержит правила сборки проекта в rollup.tsconfig.json
Содержит настройки языка typescript для проекта.
gs-web-dtk#
Nodejs проект, предоставляющий общий код в веб расширения, располагается по пути
btk/src/web/ext/gs-web-dtk
Веб расширение#
Nodejs проект, реализующий веб расширение, располагается по пути btk/src/web/ext/packages/[web_extension_name]
Для обеспечения удобной отладки и модификации кода, модуль gs-web-dtk подключается по исходному
коду.
Это приводит к следующим особенностям в конфигурации веб расширения:
Корнем сборки является каталог рабочего пространства
Необходимо жестко определять корневой репозиторий
node_modules, так как@rollup/plugin-node-resolveсмотрит так же в репозитории модуляgs-web-dtkНеобходимо для общих модулей указывать правило разрешения конфликта.
Примечание
Если
gs-web-dtkне будет иметь собственного стандартного репозитория модулей, подсказчик vscode не сможет корректно осуществлять проверку синтаксиса.
Пример конфигурации plugin-node-resolve:
nodeResolve(
{browser: true,
dedupe: ['react', 'react-dom'],
rootDir: process.cwd()
}
)
Пример конфигурации tsconfig.json для веб расширения:
{
"compilerOptions": {
"rootDir": "../../",
"sourceMap": true,
"module": "ES6",
"jsx": "react",
"moduleResolution": "node",
"esModuleInterop": true,
"baseUrl": "../../",
"paths": {
"gs-web-dtk": ["gs-web-dtk/src/index.ts"],
"*" : ["packages/dashboard/node_modules/*"]
},
"lib": ["es2018","DOM"]
}
}
Подготовка к работе#
Установите nodejs
https://nodejs.org/en/Откройте
workspacevscodeВключите закладку npn scripts
Перечень доступных закладок находится под 3 точками в заголовкеExplorerПодготовьте к работе
gw-web-dtk
Выполнитеnpm script: gs-web-dtk > package.json > npm_installПодготовьте пакет к работе
Выполнитеnpm script: npm_install
Редактирование исходного кода#
Отредактируйте файлы
Нажмите сохранить
Выполните npm script:
build\Внимание
Скрипт должен быть выполнент для текущего веб расширения
Дождитесь компиляция бандла
Примечание
Чтобы исключить необходимость пересборки проекта в Intellij idea при компиляции в vscode в rollup проект
добавлен следующий хук:
copy({
targets: [
{ src: '../../../../main/resources/ru/bitec/app/btk/dashboard/web', dest: '../../../../../target/scala-2.12/classes/ru/bitec/app/btk/dashboard' },
],
hook:'writeBundle'
})
Данный хук копирует скомпилированный код в собранные файлы проекта.
Отладка проекта#
Отладка в chrome#
Обновите страницу браузера, чтобы исключить устаревшие копии исходного кода
Откройте инструмент разработчика и перейдите на вкладку «Sources»
Откройте требуемый файл
Файлы находится в папке {host}/webserver/sid/{guid}/siv/webУстановите точку остановки
Отладка в vscode#
Запустите браузер в режиме отладки
Для этого выполните командуchrome.exe --remote-debugging-port=9229В разделе отладке запустите цель
Attache chromeОткройте требуемый файл
Установите точку остановки
Настройка отладки в vscode#
Для настройки отладки в новом проекте создайте файл .vscode/launch.json с следующим содержимым:
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach Chrome against localhost",
"type": "chrome",
"request": "attach",
"port": 9229,
"sourceMapPathOverrides": {
"../../../../../../../../web/ext/*": "${workspaceFolder}/../../*"
}
}
]
}
Совет
Для диагностики отладки в debug console воспользуйтесь командой .scripts
Данная команда помогает корректно настроить sourceMapPathOverrides для работы с точками прерывания.