Контрибьюция в PnP JS: Динамическая отладка изменений
В процессе контрибьюции в проект с исходным кодом следуют придерживаться правил, определенных командой проекта и комьюнити, при этом хочется адаптировать процесс под себя. Данная статья описывает подход, который я применяю по время внесения изменений в PnP JS. Идентичные техники могут быть применыны почти к любому проекту на TypeScript. Но, как всегда в разработке под SharePoint есть свои нюансы.
Отладка PnP JS
Для упрощения процесса отладки я использую PnP JS Core Debug, это промежуточный проект, позволяющий отлаживать изменения в рамках локальных исходных кодов PnP JS непосредственно в TypeScript и выполнением запросов в различные инстансы SharePoint не покидая среду Node.js.
Пререквизиты
- Node.js (v.8 и выше)
Данные библиотеки необходимо установить глобально:
- TypeScript
- TSLint
- Gulp
npm install typescript tslint ts-node gulp-cli -g
Форк проектов
Сделать форки следующих проектов:
Первый проект - это репозиторий с PnP JS, второй - отдельный проект, помогающий изолировать промежуточные изменения и тесты, которые не должны быть частью репозитория PnP JS, но при этом важны для сохранения и локальной отладки. Так же, проект отладки интергирует в себя дополнительные библиотеки, позволяющие авторизоваться с различными средами SharePoint и не только его облачной версией.
Клон форков
Клоны репозиториев-форков должны располагаться в одной родительской директории.
git clone https://github.com/[namespace]/PnP-JS-Core
git clone https://github.com/[namespace]/PnP-JS-Core-Debug
[namespace]
соответствует названию вашей учетной записи в GitHub или наименованию компании.
Разделение исходных кодов позволяет более гибко управлять локальными сценариями и изменениями в код библиотеки. Отладочный проект и исходники PnP JS настроены таким образом, что для проверки изменений в библиотеки отсутствует необходимость отдельного запуска и обновления сборки. Изменения в проекте библиотеки сразу отображаются в отладочном проекте, включая обновление IntelliSense.
Установка зависимостей
Восстановить зависимости в обоих проектах:
npm install
VS Code
Visual Studio Code наилучшим образом справляется с задачей редактирования проектов.
С помощью опции рабочих областей (Workspaces) можно открыть одновременно несколько проектов. Это особенно удобно, когда приходится одновременно вносить изменения как в библиотеку, так и отладочный сценарий.
Использование Upstream для проекта PnP JS
Необходимо добавить ссылку на оригинальный репозиторий PnP JS в виде Git Upstream (единоразовая операция). В папке PnP JS
:
git remote add upstream https://github.com/SharePoint/PnP-JS-Core
После этого возможно синхронизировать изменения из основного репизитория:
git fetch upstream dev
Использование "feature"-бранчей
Для исправлений определенных ошибок или добавления конкретной функциональности лучше всего использовать так называемые "feature"-бранчи, в рамках которых вносятся изменения, касаемые соответствующей правки или функциональности.
Перед создаением бранча убедитесь, что:
- "Feature"-бранч содержит последнее состояние бранча
dev
репозитория PnP JS. - Локальный бранч синхронизирован с
upstream
.
git checkout dev
git fetch upstream dev
git checkout -b [name_of_your_new_branch]
В dev
бранч лучше не вносить никаких изменений, чтобы можно было смело выполнять принудительную жесткую синхронизацию git reset --hard upstream/dev
. При этом, любые локальные коммиты теряются, но дальнейший checkout из такого бранча гарантированно исключен от личших коммитов и содержит только изменения, планируемые к мерджу. Наименование "Feature"-бранча лучше префиксировать dev-
и номером issue, если Pull Request будет содержать правку определенного тикета.
Подключение к SharePoint
Перед первой отладкой необходимо настроить подключение к среде SharePoint:
Запуск npm задачи
Перейти к папке отладочного проекта и запустить команду в консоли:
npm run init
При запуске задачи init
активируется диалог подключение в SharePoint:
Подробнее о поддерживаемых сценариях аутентификации можно ознакомиться здесь.
Настроечные файлы
Параметры подключения сохраняется в конфигурационные файлы, которые исключаются из git репозитория. Файл подключения по умолчанию находится по поти ./config/private.json
. Пароли и хешируются таким образом, что подлежат расшифровке толкьо на той рабочей станции, где были созданы.
Пример конфигурационного файла:
{
"siteUrl": "https://contoso.sharepoint.com/sites/dev-a",
"strategy": "UserCredentials",
"username": "andrew.koltyakov@contoso.onmicrosoft.com",
"password": "bcccd4e6025...ZH+ZY5X2A=="
}
Внесение изменений
Теперь можно вносить изменения в библиотеку и запускать отладку с точками останова и моментальными результатами на основе API SharePoint. Рекомендую к ознакомлению станицу wiki из основного репозитория Getting Started: Contribute.
Запуск отладки
Для создания отладочного сценария необходимо создать .ts
файл в папке PnP-JS-Core-Debug/runners
.
Код отладочного сценария нужно обернуть в следующую конструкцию:
import { Web } from './../../PnP-JS-Core/src/pnp';
import { initEnvironment as init } from './../utils/pnpnode';
import './../utils/setup';
init().then(async settings => {
const web = new Web(settings.siteUrl);
// код отладочных сценариев
}).catch(console.log);
Установите точку останова в коде библиотеки или сценария. Откройте .ts
файл сценария который инициирует вашу логику и запустите дебаггер.
После этого вы можете использовать все стандартные возможности средств отладки VS Code.
Пользуясь случаем, не могу не напомнить, что у проекта есть канал в Gitter, где можно задать вопросы касаемо использования PnP JS.
Опубликовано: 14.05.2018
Автор: Андрей Кольтяков