Colby Miller
Таким образом, вы хотите внести свой вклад в сообщество с открытым исходным кодом? Это потрясающе! Помогая расти реакцию натуральной молодой экосистемы натуральной.
Когда я решил принять эту задачу не так давно, я заметил, что там не было много материалов вокруг публикации реагировать родные компоненты в НПМ. Поэтому я надеюсь, что этот пост поможет сделать процесс гораздо проще для других.
Прежде чем мы начнем, обязательно зарегистрируйтесь для учетной записи в NPM. Вы можете сделать это здесь Отказ
Начальная настройка
Во-первых, давайте создадим папку, где будет жить наш реагирующий компонент.
mkdir&& cd # For example mkdir my-component && cd my-component
Оказавшись внутри папки, нам нужно инициализировать новый пакет NPM, набрав NPM init Отказ Это создаст package.json Файл, который будет иметь некоторые важные метаданные о реактивный компонент.
Серия вопросов будет отображаться такими как имя пакета, версия, описание, ключевые слова и т. Д.
Важно: .. Когда просили Точка входа Обязательно введите index.js и нажмите Enter. Это будет файл, который экспортирует ваш основной компонент.
{
"name": "react-native-progress-steps",
"version": "1.0.0",
"description": "A simple and fully customizable React Native component that implements a progress stepper UI.",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/colbymillerdev/react-native-progress-steps.git"
},
"keywords": [
"react-native",
"react-component",
"react-native-component",
"react",
"react native",
"mobile",
"ios",
"android",
"ui",
"stepper",
"progress",
"progress-steps"
],
"author": "Colby Miller",
"license": "MIT",
"bugs": {
"url": "https://github.com/colbymillerdev/react-native-progress-steps/issues"
},
"homepage": "https://github.com/colbymillerdev/react-native-progress-steps#readme"
}Структура проекта
Следующим шагом является настройка структуры папки для вашего реагирования нативный компонент. Это действительно зависит от вас, но я поделюсь простым примером моего ниже:
Вы заметите некоторые файлы, которые мы еще не создали. Мы будем решаться в ближайшее время.
Давайте создадим index.js файл. Это будет самый важный файл для правильной экспортировки/импорта вашего компонента. Перейдите к папке корневого проекта и введите Нажмите index.js Отказ
Есть несколько разных способов идти о контенте внутри этого файла.
- Непосредственно написание компонентного класса внутри
index.jsФайл и экспортировать его там. - Создание отдельного компонента JavaScript файл и экспортировка его в
index.jsОтказ - Наконец, создавая многие компонентные и контейнерные файлы JavaScript и экспортируя все необходимые в
index.jsфайл. Это подход, который я следовал и видно в примере ниже.
import ProgressSteps from './src/ProgressSteps/ProgressSteps';
import ProgressStep from './src/ProgressSteps/ProgressStep';
export { ProgressSteps, ProgressStep };Независимо от того, какой подход принимается, что экспортируется в этот файл, это то, что потребляющее приложение в конечном итоге импортирует и представляет. Это важная часть, чтобы помнить.
import { ProgressSteps, ProgressStep } from 'react-native-progress-steps';Зависимости
Мы должны определить, какие зависимости должны быть установлены для нашего реагирования на родной компонент для правильной работы.
Существует три различных типа зависимостей:
- Peerdependonds: Эти зависимости требуются для бега компонента; Однако они, как ожидается, уже будут установлены в приложении. Пример этого –
реагировать - роднойсам. Тем не менее, в случае реакции натурального нет необходимости добавлятьреагировать - роднойкак одноранговая зависимость. - Зависимости: Они также необходимы для запуска компонента, но вы не можете предположить, что потребляющее приложение установлено. Некоторые примеры будут
лоташиопоры. - Devdependonds: Это более просты. Все они являются пакетами, необходимыми для разработки оригинального компонента реагирования. Примеры этого будут ваш линт, тестовые рамки и Babel.
Установка зависимости Вавила
Наш следующий шаг – подключить наш компонент до Бабела. Мы можем просто сделать это, установив следующую зависимость Dev:
npm install metro-react-native-babel-preset --save-dev
После завершения установки нам нужно создать .babelrc Файл и добавьте следующее к нему:
{
"presets": ["module:metro-react-native-babel-preset"]
}Создание .gitignore и .npmignore
Один из заключительных шагов – создать стандарт .gitignore и .npmignore файлы как лучшая практика. Это также избежит никаких проблем при публикации NPM.
# Logs *.log npm-debug.log # Runtime data tmp build dist # Dependency directory node_modules
# Logs *.log npm-debug.log # Dependency directory node_modules # Runtime data tmp # Examples (If applicable to your project) examples
Тестирование
Обычно это относительно просты для ссылки и установки нашего пакета локально на приложения, без необходимости сначала публиковать в NPM.
Это будет сделано с помощью NPM ссылка Команда внутри наших пакетов корневого каталога. Затем, навигации по приложению и набрав NPM Link Тогда NPM I NSTALL.
Однако на момент написания этой статьи реагируют на родных и NPM ссылка Команда не работает красиво вместе.
Есть два решения, которые я нашел до сих пор, что решит этот вопрос:
1. Установка пакета в приложении с использованием локального пути
Для этого перейдите к приложению и напрямую установите пакет там, используя путь каталога.
npm i# For example npm i ../my-component
После внесения любых изменений в вашем пакете вам придется пересмотреть приложение и переназначить. Это не идеальное решение, но это то, что работает.
2. Создание папки примеров и используя пакет NPM
NPM Pack Команда – отличный способ быстрого пакета вашего оригинального нового компонента и готов к тестированию. Это создает .tgz Файл, который затем может быть установлен в уже существующее приложение.
Давайте создадим /Примеры Папка внутри нашего корневого каталога пакета NPM. Эта папка будет по существу, будет собственным собственным реактивным приложением, которое работает и отображает ваши примеры.
Это можно сделать, создавая реагировать нативный проект, используя Реагистративные примеры инициативы Отказ
После этого закончится, запустите NPM Pack Команда для генерации файла, который будет иметь конвенцию именования, аналогичную Package-name-0.0.0.tgz Отказ
Тогда иди в /Примеры Папка и установка вашего компонента, работает NPM I ../package-name-0.0.0.tgz или пряжа добавить ../package-name-0.0.0.tgz в терминале. Не забудьте заменить Название пакета и 0,0.0 соответственно.
Создайте файл или файлы JavaScript, которые отобразится ваш компонент. Для этого примера мы назовем это Icree.js Отказ Важно отметить, что вы должны импортировать компонент, который вы только что установили с помощью пряжи или NPM в этом файле.
Как только файл создан, откройте App.js и импортировать/экспортировать пример файла. Все равно, что экспортируется в этот файл, это то, что будет отображаться при запуске проекта на симуляторе или устройстве.
import ExampleOne from './ExampleOne' export default ExampleOne;
Наконец, мы можем запустить приложение, используя React - родной Run-iOS или React - родной Run-Android Отказ Теперь мы сможем увидеть наш компонент и правильно проверить его.
После внесения любых изменений в свой код пакетов NPM не забудьте запустить NPM Pack команда, потом иди в /Примеры Папка к Установка NPM или пряжа Добавить .tgz файл.
Публикация на НПМ
Наконец, мы готовы поделиться нашим реагированным родным компонентом с удивительным сообществом с открытым исходным кодом!
Издательство очень быстро и легко. Просто войдите в свою учетную запись NPM от терминала, используя NPM Вход Тогда опубликуйте, используя NPM публиковать Отказ
Одна вещь, которую нужно помнить, NPM требует, чтобы мы увеличивали версию в package.json каждый раз перед публикацией.
Заключение
Мы покрывали тонну материала в этом посте. Если вы столкнулись с любыми проблемами, не стесняйтесь бросить мне вопрос в комментариях ниже. Спасибо за следующее, я не могу дождаться, чтобы увидеть, что вы строите!
Взносы, запросы на вылов и рекомендации всегда приветствуются для Реагистративно-прогресс-шаги . Дайте это попробуйте в следующем проекте и дайте мне знать, что вы думаете!
Оригинал: “https://www.freecodecamp.org/news/how-to-publish-a-react-native-component-to-npm-its-easier-than-you-think-51f6ae1ef850/”