Friday, August 23, 2019

Дилемма с библиотеками react-native

Типичная проблема


В одном мобильном приложении используется компонент confirmation-code-input, в котором есть ошибки.

На данный момент компонент предоставляет только метод onFulfill, который вызывается только в том случае, если пользователь ввел код полностью.  Нет возможности узнать промежуточное состояние ввода и это привело к ошибке.

Так как такая проблема возникла не только в моем проекте, другие программисты придумали решение и даже создали pull request с решением в исходный репозиторий. Предложили даже несколько вариантов решения:
  1. Get Code text on every update of Field
  2. onChangeCode callback and defaultCode props added. Readme updated.
  3. feature: getCurrentCode called when change focus and return code

Варианты решения


Первый вариант


Самый простой и самый долгий. Необходимо дождаться, пока библиотека будет обновлена. Можно связаться с разработчиком Это хорошо подходит для бессрочных проектов, но нам не подходит. 

Что бы ускорить разработку, я создал issue, в котором попросил выбрать уже одно из предложенных решений.

Второй вариант


Изменить код библиотеки в папке node_modules. В данном случае необходимо внести изменения в код библиотеки компонента уже посте установки.

После обновления библиотек изменения библиотек будут изменены. Также необходимо где-то хранить изменения кода библиотеки и инструкцию, как эти изменения внести в код. 

Этот вариант приведет к тому, что необходимо будет постоянно тратить время на рутинные действия. Поэтому он не подходит.

Третий вариант


Необходимо сделать fork исходников в свой аккаунт github, внести изменения и подключить свою библиотеку в файл package.json

Этот вариант подходит. В будущем придется самостоятельно обновлять fork и заниматься поддержкой исходников библиотеки. Этот вариант приемлем, но хочется поискать еще проще.

Четвертый вариант


Это самый быстрый способ! Подключить исходники того программиста, который уже внес изменения и направил pull request. 

Пример таких изменений и как подключать библиотеку можно посмотреть тут

Проблемы могут возникнуть тогда, когда программист удалит свои исходники или внесет некоторые изменения. Поэтому этот вариант оставляет определенные риски.

Пятый вариант 


Понимание как правильно поступить пришло чуть позже. Необходимо сделать fork исходников того программиста, который для себя уже решил эту задачу. Так и будет сделано.


Реализация


Сделать fork. Пример:

Обновить инструкцию:




Удалить текущую библиотеку:

npm uninstall react-native-confirmation-code-input

Установить библиотеку из своего репозитория:

npm install git+https://github.com/vadimcpp/react-native-confirmation-code-input.git

Изменения в файле package.json будут выглядеть так:



Проверить папку с библиотеками. Зайти в папку node_modules и убедиться что была установлена именно ваша библиотека:



Далее внести исправления в главный проект, которые уже не важны для данного поста.