Я использую NativeScript уже пару месяцев, и пока это мой опыт.

В основном я затрону эти области:

  1. Почему я выбрал NativeScript вместо других JS Frameworks (React Native)
  2. Моя первоначальная установка
  3. Плагины
  4. Структура папок
  5. Использование значков шрифтов

1. Почему я предпочел NativeScript другим JS-фреймворкам (React Native)

Недавно меня наняли в качестве Front-End разработчика программного обеспечения в Kamkalima для создания мобильного приложения для их платформы.

Мы с руководством должны были принять решение о выборе между двумя основными кросс-платформенными фреймворками. React Native и NativeScript.

И React Native, и NativeScript — это фреймворки Javascript, цель которых — облегчить процесс написания единой кодовой базы для создания наиболее часто используемых мобильных платформ. Android и iOS.

Изложив плюсы и минусы обоих фреймворков, мы решили использовать NativeScript-Vue.

«NativeScript-Vue — это плагин NativeScript, который позволяет использовать Vue.js для создания мобильного приложения». Команда NativeScript

Было много причин выбрать NativeScript-Vue вместо React Native. В основном потому, что мы используем Vue.js для веб-версии нашей платформы.

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

2. Моя первоначальная установка

Когда я начал изучать NativeScript, я сначала искал ресурсы, на которые можно положиться, чтобы понять основы и найти поддержку.

Я не нашел много. Сообщество намного меньше, чем у React Native. В основном я полагался на официальную документацию, которая довольно хороша.

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

Повозившись со всеми встроенными компонентами, я решил перенести разработку на свою локальную машину.

Я установил NativeScript локально с помощью следующей команды: npm install -g nativescript.

Я начал с команды «предварительный просмотр» tns preview --bundle. Это работало достаточно, пока я не заметил, что некоторые функции могут не работать с командой предварительного просмотра, например vue-devtools.

Пришлось переключиться на настройку эмулятора. Я установил эмулятор Genymotion, так как он требует гораздо меньше ресурсов, чем эмулятор Android Studio, плюс он намного быстрее в использовании. А для сборки iOS установил эмулятор iOS через Xcode (разрабатываю на маке).

3. Плагины

Я искал компоненты и плагины, чтобы найти вдохновение для вариантов использования, которые я могу реализовать. Я нашел много на NativeScript Marketplace, а также на его замечательном веб-сайте.

Я начал пробовать множество плагинов, чтобы понять, как все работает. Пробовал аудиоплеер, функционал камеры, биометрическую аутентификацию и т.д.

Я старался в основном полагаться на официальный API, доступный в NativeScript. Но когда я не смог найти его, я реализовал его на своей стороне (например, карусель, группа переключателей и т. д.).

4. Структура папок

Я искал лучшие практики для структурирования папок в приложении NativeScript, но ничего не нашел. Поэтому руководство и я решили, что мы собираемся структурировать приложение следующим образом.

Я кратко расскажу о каталогах сверху вниз.

  1. assets: каталог, в котором находятся все основные изображения и значки.

2. компоненты: все компоненты расположены в этом каталоге, чтобы их можно было легко найти. Стоит отметить, что каждый компонент разделен на 5 файлов:

  • componentName.html: все визуальное представление компонента.
  • componentName.js: вся логическая часть компонента.
  • componentName.scss: стили компонента.
  • componentName.vue: импортирует все вышеперечисленные файлы в синтаксисе Vue.Js, как показано ниже.

<template src="./componentName.html”/>

<script src="./componentName.js"/>

<style src="./componentName.scss lang="scss" scoped/>

  • index.js: импортирует componentName.vue и экспортирует его, чтобы упростить импорт всего компонента (без указания расширения).

3. шрифты: содержит все шрифты и значки шрифтов, которые используются в приложении.

4. layouts: содержит все макеты, которые повторяются в приложении (например, Drawer, TabView и т. д.).

5. mixins: функции, которые используются в приложении (например, функции маршрутизатора, функции ящика и т. д.).

6. маршруты: содержит все маршруты для приложения (например: homePage: HomeComponent). Это делает маршрутизацию в приложении намного проще и нагляднее.

7. store: это каталог, в котором хранятся все магазины приложения. Он разделен на модули для нескольких магазинов. Одним из хранилищ может быть хранилище ящиков, где сохраняется состояние ящика для легкого доступа через приложение.

8. views: этот каталог содержит все представления, которые есть в приложении. Файлы каждого представления разделяются так же, как и компоненты (.html, .js и т. д.).

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

5. Использование значков шрифтов

Я много боролся, пытаясь найти способ использовать наши пользовательские значки шрифтов в приложении. Пробовал плагин nativescript-fonticon безуспешно.

После пары исследовательских сессий. У меня получилось 😁. Я решил это, поместив файлы моих пользовательских значков шрифтов «True Type Font» (.ttf) в каталог «fonts» (если он еще не существует, создайте каталог в основной папке приложения). Добавьте инициализацию класса css в app.css (или app.scss, если вы используете Sass, как я) для глобального доступа. И в компонентах вашего приложения всякий раз, когда вы хотите использовать значок шрифта, используйте следующий синтаксис:

<Label :text="'\ue933'" class="icon-class-name" color='blue' fontSize="24" />

Здесь мы вызываем метку с текстом, который использует JS. Мы вставляем шестнадцатеричный код значка, который вы хотите использовать, с префиксом «\u», чтобы экранировать символы.

Я считаю, что работа с NativeScript действительно плавная и интуитивно понятная. Наличие Javascript в качестве основного языка значительно упрощает мою работу, поскольку у меня уже есть хороший опыт работы с Javascript.