Как создать компоненты React, которые будут использоваться приложением HTML?

У меня есть проект React, созданный с npx create-react-app, где я реализовал несколько компонентов React. На самом деле я не рассматриваю этот проект как «приложение React», поскольку это просто личная библиотека компонентов, которые я использую в другом проекте, веб-приложение HTML, созданное с использованием серверных технологий. Моя цель - постепенно заменять части этого приложения компонентами React. Я не думаю, что это станет единым приложением React, мой план состоит в том, чтобы просто заменить те части, которые, по моему мнению, имеют смысл разрабатывать с помощью React.

У меня нет проблем с реализацией этих компонентов - я использую Storybook для организации независимых модулей. Но я борюсь с процессом сборки.

Если я запускаю npm run build, я создаю одно приложение на основе исходного кода приложения React, загруженного create-react-app, от которого я по существу отказался в пользу установки Storybook. Если я добавлю файлы, созданные npm run build моим проектом, я не смогу заставить React правильно отображать мои компоненты.

Мне удалось заставить работать процесс сборки вручную:

  • В моем проекте HTML я добавляю https://unpkg.com/react@16/umd/react.production.min.js и https://unpkg.com/react-dom@16/umd/react-dom.production.min.js
  • Для каждого из моих исходных файлов компонентов React я запускаю npx babel --presets react-app/prod src/MyComponent.js -o build/mycomponent.js
  • Затем я объединяю все npx babel выходы в один components.js файл, настраивая некоторые повторяющиеся функции, которые появляются в верхней части всех файлов, и подавляя операторы import и export.
  • Я загружаю файл component.js в свой HTML-проект и могу создавать свои компоненты, используя простой JS:
ReactDOM.render(
    React.createElement(MyComponent, {param: value}, null),
    document.getElementById('myComponent')
);

Есть ли лучший процесс для сборки моих компонентов в один JS-файл, который я мог бы использовать в своем HTML-приложении?


person Douglas    schedule 28.11.2019    source источник


Ответы (1)


Как вы и ожидали, проект должен быть многоразовым модулем / библиотекой пользовательского интерфейса (скажем, имя my-ui) для других проектов. Я делал то же самое раньше и просто представил здесь свой подход. Сначала экспортируйте компоненты как обычно. Во-вторых, создайте index.js. В-третьих, импортируйте и экспортируйте те компоненты, которые вы экспортировали. В-четвертых, если вы знакомы с webpack, используйте index.js в качестве записи в webpack.config.js, чтобы объединить весь проект в один файл. Вы можете опубликовать этот пакет или просто использовать его локально. Затем в других проектах, import my-ui, вы можете использовать любой компонент, экспортированный из этого модуля.

person Wenbo    schedule 28.11.2019