Олег Марков
Зачем нужны React Scripts и как использовать
Введение
React стал одним из самых популярных инструментов для создания современных веб-приложений. Однако, когда вы впервые знакомитесь с этим фреймворком, многие процессы по запуску и сборке приложения могут показаться сложными. Именно здесь на помощь приходят React Scripts — набор инструментов, который поддерживает и автоматизирует все этапы жизненного цикла проекта на React. React Scripts входят в состав Create React App (CRA) и позволяют быстро запускать, тестировать и публиковать приложения без необходимости заниматься сложной ручной конфигурацией.
В этой статье я подробно расскажу, зачем нужны React Scripts, какие основные функции они предоставляют, как ими пользоваться на практике и как вы можете расширять возможности своего проекта, не усложняя себе жизнь настройками сборщика. Смотрите, я приведу примеры кода, расскажу о процессах, которые происходят "под капотом", и объясню, какие задачи решают React Scripts в повседневной разработке.
Что такое React Scripts
React Scripts — это набор готовых сценариев (скриптов) и зависимостей, предоставляемых пакетом react-scripts, которые автоматизируют типовые задачи внутри приложения на React. Если вы создаете проект с помощью Create React App (CRA), то этот пакет будет установлен автоматически.
React Scripts позволяют запускать четыре основных команды:
start
— запуск приложения в режиме разработки.build
— сборка приложения для продакшена.test
— запуск тестов.eject
— извлечение всей конфигурации проекта для дальнейшей модификации.
React Scripts — это набор скриптов и инструментов, предоставляемых Create React App, которые упрощают разработку React-приложений. Они автоматизируют множество задач, таких как сборка, запуск и тестирование приложения, позволяя разработчикам сосредоточиться на написании кода. Если вы хотите детальнее разобраться в том, как работают React Scripts и как их использовать для упрощения разработки — приходите на наш большой курс Основы React, React Router и Redux Toolkit. На курсе 177 уроков и 17 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Как работают React Scripts внутри CRA
Когда вы выполняете, например, npm start
, на самом деле вызывается скрипт, определенный в react-scripts
, а не что-то, что лежит в директории вашего проекта. Это обеспечивает стандарт одинакового качества для всех проектов, созданных с помощью CRA, а также скрывает сложные детали настроек сборщика (Webpack, Babel, ESLint и пр.).
Зачем нужны React Scripts
Давайте разберёмся на простых примерах. Допустим, вы хотите создать приложение на React. Если бы у вас не было React Scripts, вам бы пришлось вручную конфигурировать:
- Webpack для сборки модулей,
- Babel для компиляции современного JavaScript,
- настройку CSS и поддержки разных форматов файлов (изображений, шрифтов),
- Cypress или Jest для тестирования,
- DevServer для локального запуска,
- горячую перезагрузку (hot reloading),
- поддержку .env файлов для переменных окружения,
- и многое другое.
React Scripts берут все эти задачи на себя и предоставляют вам простые команды, не требуя глубоких знаний о внутренних механизмах работы инструментов сборки. Это значит, что вы тратите меньше времени на рутину и больше времени на написание приложения.
Установка и создание приложения с помощью React Scripts
Если вы создаете новый проект на React, просто используйте одну команду (установите Node.js, если еще не сделали этого):
npx create-react-app my-app
# Или с помощью Yarn
yarn create react-app my-app
После чего в директории вашего приложения окажется node_modules/react-scripts
. Вам не нужно устанавливать этот пакет вручную — он уже присутствует и прописан как зависимость.
Структура проекта будет выглядеть примерно так:
my-app/
node_modules/
public/
src/
package.json
README.md
В файле package.json
можно увидеть:
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
}
Смотрите, здесь основные команды запускаются через react-scripts
.
Основные команды React Scripts
Запуск приложения в режиме разработки
npm start
# или
yarn start
Выполнение этой команды:
- Запускает development-сервер (обычно доступен на http://localhost:3000),
- Осуществляет hot reloading (автоматическое обновление страницы при изменении кода),
- Выводит лог ошибок прямо в браузере и в консоли,
- Использует расширенную проверку типов и линтинг,
- Позволяет работать с .env файлами для настройки переменных окружения (например, API URL).
Очень удобно то, что все эти функции работают буквально "из коробки" без какой-либо дополнительной настройки.
Сборка приложения для продакшена
npm run build
# или
yarn build
Эта команда выполняет:
- Минификацию и оптимизацию кода,
- Компиляцию современного JavaScript и JSX в максимально кроссбраузерный формат,
- Генерацию папки
build
с итоговыми HTML, CSS, JS-файлами, - Выводит информацию о размерах итоговых бандлов.
Пример вывода после сборки:
File sizes after gzip:
75.1 KB build/static/js/main.xxxxx.js
1.62 KB build/static/css/main.xxxxx.css
Теперь вы можете загрузить содержимое папки build на любой статический сервер.
Запуск тестов
npm test
# или
yarn test
Здесь используется встроенный инструмент тестирования Jest. Он:
- Автоматически запускает тесты из файлов, заканчивающихся на
.test.js
или.spec.js
, - Поддерживает тестирование компонентов с библиотекой React Testing Library,
- Выводит удобные логи и информацию о покрытии (coverage),
- Позволяет запускать тесты в интерактивном режиме.
Стандартный тест в src/App.test.js
выглядит так:
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
// Проверяем, что на странице есть ссылка
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
Как видите, всё уже готово к запуску тестов.
Извлечение конфигурации (Eject)
npm run eject
# или
yarn eject
ВАЖНО: Эта команда необратима. После выполнения весь сетап сборки (Webpack, Babel, ESLint и др.) копируется в ваш проект. Теперь вы полностью контролируете конфигурацию, но не сможете обновлять react-scripts по-старому.
Когда стоит применять eject:
- Вам необходим детальный контроль над настройками сборщика (Webpack, Babel).
- Нужно добавить специальные лоадеры или плагины.
- Требуется интеграция с нестандартными инструментами (например, SSR, TypeScript-модификации).
Обычным пользователям eject обычно не требуется, особенно если проект не выходит за рамки стандартной сборки.
Работа с переменными окружения
React Scripts поддерживает настройку переменных окружения с помощью файлов .env
. Например:
.env
REACT_APP_API_URL=https://api.example.com
В коде приложения:
// Теперь вы видите, как обращаться к переменной окружения
const apiUrl = process.env.REACT_APP_API_URL;
Все переменные, начинающиеся с REACT_APP_
, автоматически доступны внутри кода приложения. Это отличный способ разделять конфигурацию для разработки и продакшена.
Расширение возможностей: настройка через дополнительные плагины и инструменты
В большинстве случаев стандартных настроек React Scripts хватает. Но если вы хотите подключить что-то специфическое (Sass, PWA, alias-модули, декораторы, кастомные лоадеры), посмотрите в сторону решений типа react-app-rewired, customize-cra или других альтернатив.
Они позволяют изменять конфигурацию "под капотом", не используя eject, а значит — вы продолжаете получать обновления react-scripts и не усложняете поддержку проекта.
Пример настройки alias без eject:
Установите нужные пакеты:
bash npm install react-app-rewired customize-cra
В файле
config-overrides.js
: ```js const { override, addWebpackAlias } = require('customize-cra'); const path = require('path');
module.exports = override( addWebpackAlias({ 'src/components') }) ); ```
- Исправьте скрипты package.json:
json "scripts": { "start": "react-app-rewired start", "build": "react-app-rewired build", "test": "react-app-rewired test", "eject": "react-scripts eject" }
Такой подход позволит более гибко управлять настройками, если потребуется что-то нестандартное.
Типичные сценарии использования React Scripts
Быстрый старт проекта
Вы хотите сосредоточиться на логике приложения, а не на низкоуровневых настройках сборки. React Scripts позволяет сразу начать писать код, а не тратить часы на изучение Webpack.
Поддержка командой
В больших и средних командах стандартизация процесса сборки особенно важна. React Scripts позволяет избежать конфликтов в настройках, облегчает онбординг новых участников и минимизирует баги, связанные с ручной конфигурацией.
Быстрое тестирование и деплой
React Scripts позволяет легко запускать тесты и собирать приложение для продакшена, не задумываясь, правильно ли настроена оптимизация, минификация, деление кода на чанки, загрузка ассетов и т.д.
Распространённые подводные камни в использовании React Scripts
- Не все плагины из экосистемы Webpack могут быть интегрированы без eject.
- Некоторые специфические требования к сборке (например, SSR, monorepo) могут потребовать ручной конфигурации сборщика.
- Версии зависимостей внутри CRA обновляются не сразу — иногда новые фичи Webpack/Babel становятся доступны только после очередного релиза create-react-app.
Рассчитывайте на "золотую середину": если вам не нужны экстремальные кастомизации, React Scripts — лучший выбор. Для обычных приложений его функционала хватает с запасом.
Как обновлять версию React Scripts
Когда выходит новая версия Create React App или React Scripts, вы можете обновить пакет в своем проекте. Обычно достаточно изменить версию пакета в package.json
и выполнить:
npm install
# или
yarn install
Следите за официальным changelog, чтобы узнать, какие изменения были внесены.
В заключение
React Scripts — это незаметный, но очень важный помощник в повседневной разработке на React. Он избавляет вас от необходимости заниматься сложной ручной конфигурацией инструментов сборки, линтинга, тестирования и деплоя. Благодаря React Scripts вы можете сосредоточиться на разработке своего приложения и быстро запускать новые проекты без лишней головной боли.
Используя стандартные команды (start
, build
, test
, eject
), вы легко управляете всеми важными процессами жизненного цикла вашего приложения, не углубляясь в тонкости настройки. При этом всегда сохраняется возможность донастроить сборку, если в проекте возникнут особые требования.
React Scripts — идеальный вариант для большинства новых и средних по размеру проектов, а также отличный старт для новичков и команд, которым важна скорость и простота поддержки кода.
React Scripts упрощают разработку, но для создания сложных приложений требуется умение управлять данными и организовывать навигацию. На курсе Основы React, React Router и Redux Toolkit вы получите комплексные знания. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в основы React уже сегодня.
Частозадаваемые технические вопросы по теме React Scripts
Какие лимиты и ограничения накладывают React Scripts?
React Scripts не позволяет изменять базовую конфигурацию Webpack, Babel или ESLint без eject, что ограничивает интеграцию некоторых нестандартных плагинов или лоадеров. Если нужно глубокое вмешательство, рассмотрите использование react-app-rewired либо eject.
Можно ли использовать TypeScript в проекте с React Scripts?
Да, просто добавьте флаг --template typescript
при создании приложения:bash
npx create-react-app my-app --template typescript
CRA автоматически добавит поддержку TypeScript и необходимые конфигурационные файлы.
Как менять порт, путь к публичной папке или другие параметры?
Используйте переменные окружения в файле .env
:
- Для порта:
PORT=4000
- Для публичного URL:
PUBLIC_URL=https://my-domain.com
Перечитайте официальную документацию по переменным окружения для других опций.
Почему приложение не видит новые переменные из .env после их добавления?
React Scripts читает .env
только при запуске. Остановите сервер разработки (Ctrl+C), затем снова запустите команду npm start
, чтобы новые переменные вступили в силу.
Что делать, если хочу организовать модульные пути для импортов (alias) без eject?
Используйте пакет craco или react-app-rewired, чтобы изменять конфигурацию Webpack без eject. Подключите нужный плагин, настройте путь, и обновите скрипты запуска в package.json
. Это позволяет вводить alias без потери поддержки от React Scripts.
Постройте личный план изучения React до уровня Middle — бесплатно!
React — часть карты развития Frontend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по React
Лучшие курсы по теме

React и Redux Toolkit
Антон Ларичев
TypeScript с нуля
Антон Ларичев