Рабочее пространство frontend
Contents
Рабочее пространство frontend#
Клиентский код пишется в редакторе vscode
в рабочем пространстве.
Рабочее пространство позволяет одновременно работать с несколькими
nodejs проектами.
Рабочее пространство веб расширений распологается по адресу: btk/src/web/ext/packages.code-workspace
Nodejs проект#
Франтент код компилируется с помощью технологии nodejs.
Шаблон проекта:
node_modules
Модули необходимые для разработки и компиляции проекта. Данные модули закачиваются при инициализации проекта с помощью менеджера пакетовnpm
src
Исходный код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/Откройте
workspace
vscodeВключите закладку 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
для работы с точками прерывания.