Как собрать рабочую версию React без минификации?

Задний план

Я более или менее слежу за официальное руководство по настройке локальной среды разработки с помощью реакции, и, похоже, он использует create-react-app, что очень много настраивает.

Теперь, если я запускаю npm run build, я получаю уменьшенную версию всего в папке build. Однако если я запускаю npm start, версия, которую обслуживает NodeJS, похоже, не претерпевает никаких изменений. Но я не вижу эти файлы.

Вопрос

Так что либо:

  • Могу ли я где-нибудь получить доступ к файлам, созданным npm start? Поскольку они кажутся неизмененными. (build никогда не изменяется там)
  • Или можно как-то запустить npm run build, чтобы он делал "разработочную" сборку с неминимизированными файлами?

Пытается

Моя цель просто чтобы получить доступ к неминимизированной версии реагирующих скриптов.

Что касается последнего вопроса, я пробовал некоторые параметры и переменные среды, предложенные в этом вопросе, но, как видите, не получилось:

$ NODE_ENV=dev npm run build --dev --configuration=dev

> [email protected] build [...]
> react-scripts build

Creating an optimized production build...
[...]

Система

Мой package.json имеет сценарии по умолчанию:

  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },

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

КСТАТИ, как то вроде очень тяжело, у меня стоит спросил create-react-app разработчиков, может ли это быть реализовано по умолчанию в их скриптах.

rugk 14.03.2019 16:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
37
1
37 500
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Чтобы изменить конфигурацию веб-пакета и создать скрипты, вам нужно либо извлечь из приложения create-react-app (я бы не рекомендовал этот шаг, так как он нарушает будущую совместимость), либо вы можете использовать такие инструменты, как rewire, чтобы переопределить некоторые настройки.

Взгляните на это https://github.com/timarney/react-app-rewired

я лично пользовался только перепрошивкой

npm i rewire --save-dev

Вот пример конфигурации, которую я создал для одного из своих проектов в прошлом, и он работал очень хорошо!

  1. Создайте файл build.js
  2. Измените свой package.json, чтобы он запускал build.js

build.js

const rewire = require('rewire');
const defaults = rewire('react-scripts/scripts/build.js');
const config = defaults.__get__('config');

// Consolidate chunk files instead
config.optimization.splitChunks = {
  cacheGroups: {
    default: false,
  },
};
// Move runtime into bundle instead of separate file
config.optimization.runtimeChunk = false;

// JS
config.output.filename = '[name].js';
// CSS. "5" is MiniCssPlugin
config.plugins[5].options.filename = '[name].css';
config.plugins[5].options.publicPath = '../';

Затем в моем package.json я изменил ссылки на скрипт npm следующим образом. (сборка узла, которая будет запускать скрипт build.js)

пакет.json

"scripts": {
    "start": "react-scripts start",
    "build": "node build && gulp",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },

Поэтому, если вы действительно хотите выйти из приложения create-react-app, все, что вам нужно сделать, это запустить

npm run-script eject

Затем вы получите новую папку со всеми конфигами, используемыми create-react-app.

Но, как я уже говорил, нет никаких причин, почему бы не использовать rewire и просто переопределить конфигурацию вместо извлечения

если поможет не забудь отметить как ответ Здоровья и удачи

Благодаря этой информации я вышел на тропу войны. Я перешла на react-app-rewired. Выполнил шаги с 1-3 по config-overrides.js и использовал операторы распространения для изменения конфигурации веб-пакета по умолчанию.

fionbio 23.07.2019 13:08

Я получил это, используя приведенный выше скрипт плюс: config.optimization.minimize = false;

Peter W 24.10.2020 04:59

В моем случае минификатор был с индексом 4.. вместо того, чтобы использовать config.plugsin[5], вам лучше всего использовать что-то вроде: const minifier = config.plugins.find((plugin) => plugin.constructor.name === "MiniCssExtractPlugin");, чтобы избежать ошибок при изменении сценария сборки приложения create react.

uɥƃnɐʌuop 16.01.2021 00:03

^ Это возвращает ноль, когда я это делаю - вы уверены, что правильно поняли имя, @uɥƃnɐʌuop? const minifier = config.plugins.find((plugin) => plugin.constructor.name === "MiniCssExtractPlugin");

dylanh724 28.03.2021 10:06

@ dylanh724, нет, я не могу быть уверен, что это обычно, я просто знаю, что это сработало, когда я оставил комментарий. Вероятно, это зависит от конфигурации или могло измениться с тех пор. Я помню, что выходил из каждого конструктора плагинов, чтобы получить MiniCssExtractPlugin

uɥƃnɐʌuop 28.03.2021 19:25

следует отметить: Реакция-приложение-перемонтировано теперь "легко поддерживается" сообществом.

Rohim Chou 20.05.2021 05:06

Почему вы не видите исходные файлы? Вот что я бы попробовал:

  1. Запустите свое реагирующее приложение с помощью npm run start
  2. Откройте в браузере http://localhost:3000
  3. Откройте Инструменты разработчика и проверка созданных фрагментированных пакетов сервером webpack-dev.. В Chrome на Mac вы можете сделать следующее: cmd+option+j откроет инструменты разработчика. Затем щелкните вкладку источники: на этой вкладке вы увидите see пакеты, созданные конфигурацией сборки реакции. Теперь вывод этих пакетов может быть не очень красивым, но все это есть.

Кроме того, все параметры конфигурации сборки вашего приложения содержатся в вашем файле webpack.config.js, даже если вы используете create-react-app. Так как этот конфигурация просто инкапсулирована в модуль узла react-scripts. Так что, возможно, вы могли бы попробовать отредактировать этот файл напрямую, без извлечения: <base_path>/node_modules/react-scripts/config/webpack.config.js. Хотя вам нужно быть осторожным, чтобы не нарушить существующий параметр конфигурации. Вы, вероятно, хотите возиться с настройками source-map для производственных сборок. По крайней мере, таким образом, если вы испортите этот файл, вы всегда можете просто удалить и переустановить react-scripts и вернуться к своей первоначальной конфигурации. Это также позволит вам поиграть со своими настройками в «полубезопасной» изолированной среде. Помните, что create-react-app не творит чудес, а просто делает полезные значения по умолчанию для вашей конфигурации сборки.

Наконец, как указал @xzesstence, вы можете попробовать модуль Реакция-приложение-перемонтировано.

Надеюсь, это поможет!

Хотя все, что вы предлагаете, вероятно, технически возможно, это кажется большим обходным путем, который может сломаться, когда я обновлю модули npm или около того. И это действительно не использование инструментов (npm и т. д.) так, как они разработаны/предназначены. Экспорт через браузер также уродлив, как я, например. хочу, чтобы все файлы были в каталоге, но в браузере я могу, насколько я знаю, открывать только отдельные файлы и, возможно, вручную копировать/вставлять их, но нет... это никогда не вписывается в рабочий процесс разработчика. (тем более, что мне нужно делать это часто!)

rugk 14.03.2019 16:27

тогда вам следует попробовать перемонтировать, и это не обходной путь, и он ничего не ломает. Вы буквально просто добавляете build.js, подобный тому, который я опубликовал, а затем изменяете конфигурацию по мере необходимости.. вы можете обновлять зависимости без каких-либо ограничений и вы никогда не потеряете свою конфигурацию. сначала я думал так же, как и вы, почему это так сложно, но это действительно просто, и есть логические причины, по которым они добавили конфигурации по умолчанию в качестве зависимостей. в целом это отличное решение, которое я действительно могу порекомендовать. я использовал его несколько раз в огромной производственной среде, просто попробуйте и посмотрите, что вы получите

xzesstence 14.03.2019 17:23

Не уверен, что согласен, но я также думаю, что это личное предпочтение каждого разработчика. Нет экспорта в браузер, который вы просто используете с помощью инструментов разработчика, как они должны были использоваться для первого варианта. В этом суть инструментов разработчика, поскольку они являются частью повседневной работы каждого разработчика интерфейса, а инструменты разработчика представляют собой фантастический набор инструментов. Второй вариант — изменить конфигурацию сборки в файле webpack.config.js, чтобы получить рекомендуемые файлы каталога сборки. Хотя вы наверняка можете сломать модуль, его просто установить, чтобы он не вернулся к нормальному состоянию.

Nathan 14.03.2019 17:32

Это также зависит от того, как вы хотите использовать приложение create-react-app, поскольку оно предназначено для предоставления хороших значений по умолчанию, которые подходят для большинства случаев использования, но не для индивидуальных настроек. В create-react-app нет никакой магии, он просто предоставляет полезную структуру проекта и хорошие значения по умолчанию для конфигурации сборки. Это как бы запутывает детали этого, что хорошо/плохо, но если бы вы не использовали приложение create-react-app, вам пришлось бы настроить эти детали. Что касается варианта с библиотекой, я понимаю вашу точку зрения и не возражаю против нее, поскольку лично мне нравится иметь детальный контроль, и я бы предоставил свои собственные конфигурации сборки.

Nathan 14.03.2019 17:36

Но использование библиотеки добавляет дополнительный уровень сложности для обучения новых членов команды, поэтому вам нужно сопоставить это с наличием только рабочей конфигурации. Но, в конце концов, это личное предпочтение, и нет неправильных вариантов, пока все работает :)

Nathan 14.03.2019 17:37

Мне нужен был незапутанный код приложения React — в основном из любопытства, у меня был исходный код — при этом я должен был переписать его на Angular (создав гораздо более удобное в сопровождении приложение, 5% размера и 1% зависимостей).

Я никогда не использовал React, но обнаружил, изменив файл

<base_path>/node_modules/react-scripts/config/webpack.config.prod.js

и заменив большой элемент конфигурации оптимизации в module.exports следующим...

module.exports = {...

    optimization: {
            minimize: false,
            splitChunks: {
                chunks: 'all',
                name: true
            },
            runtimeChunk: true
        },

npm запустить сборку создал незапутанный, читаемый код, который работал, как и ожидалось, без каких-либо других модификаций. Использовал Gitbash только с командами установка нпм, npm запустить сборку и запуск нпм — просто подумал, что кому-то это может пригодиться.

Я не рекомендую это, потому что код, который вы хотите, все еще завернут в беспорядок eval webpack. Легче выбрать полезные фрагменты из исходного кода или просто перестроить приложение. В лучшем случае я увидел, что такое реакция кластера и веб-пакет.

Я использую VS2019, и вышеописанное не сработало для меня. Файла webpack.config.prod.js нет, только webpack.config.js. Я нашел ключ «оптимизация» в webpack.config.js и заменил его указанным выше, но он по-прежнему публиковал уменьшенный вывод. Спасибо в любом случае!

user481779 15.10.2020 17:59

Использование этого до сих пор работает для меня. Возможно, спрячьте файл конфигурации, и, если он будет создан, будет более одной конфигурации. Кроме того, я строю только с помощью команд gitbash npm.

KellyCode 16.10.2020 14:29

спасибо, что раскопал это! абсурдно, что библиотека не позволит вам просто переопределить это

Kaiser Shahid 03.01.2022 23:34

Я знаю, что слишком поздно отвечать на этот вопрос, но попробуйте npm i -D cra-build-watch.

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

Хотя перемонтаж помогает в создании сборки, не минимизируя ее, тем не менее, он проходит весь процесс сборки снова и снова.

Файлы хранятся в памяти процесса сервера и не записываются на диск, если только вы не извлечете сценарии (или если возможно использовать такой инструмент, как «rewire») и не измените их для записи на диск с помощью параметра writeToDisk, как описано в документы Webpack DevServer.

Однако вы можете получить фактический список файлов/ссылки, перейдя к конечной точке webpack-dev-server под сервером.

Например, если вы используете URL-адрес по умолчанию на локальном хосте: 3000, используйте следующий URL-адрес, чтобы увидеть все файлы на сервере:

http://localhost:3000/webpack-dev-server

Но что вам действительно нужно, так это только index.html (который, как правило, представляет собой просто заглушку, которая загружает файлы JS) и 3 следующих файла JS, которые кажутся согласованными во всех частях create-react-app вместе с их соответствующим источником. файлы карты.

  1. main.chunk.js
  2. пакет.js
  3. поставщики ~ main.chunk.js

Вы можете просто щелкнуть правой кнопкой мыши ссылки на странице и сохранить их, или вы можете перейти по прямой ссылке или получить их на вкладке «Источники» Chrome Dev Tools.

Обратите внимание, что обычно для изменений кода обновляется только файл main.chunk.js, поэтому для среднего изменения кода вы можете просто получить обновленные файлы main.chunk.js и main.chunk.js.map.

Другие вопросы по теме