Начал использовать функцию проверки свойств ReactJS , которая, как сказано в документации, работает только в «режиме разработки» по соображениям производительности.
React, похоже, проверяет свойства конкретного компонента, который я аннотировал, но я не помню, чтобы явно включал «режим разработки».
Я попытался найти, как запустить / переключить режим разработки, но безуспешно.
process.env
для пользователей webpack: stackoverflow.com/questions/37311972/…Ответы:
Другой ответ предполагает, что вы используете внешние предварительно созданные файлы из react, и хотя это правильно, большинство людей собираются или должны использовать React как пакет не так. Более того, на данный момент почти все библиотеки и пакеты React также полагаются на одно и то же соглашение об отключении помощников времени разработки во время производства. Простое использование минимизированной реакции оставит все эти потенциальные оптимизации на столе.
В конечном итоге все волшебство сводится к тому, что React встраивает ссылки на
process.env.NODE_ENV
всю кодовую базу; они действуют как переключатель функций.Вышеупомянутый шаблон является наиболее распространенным, и другие библиотеки также следуют ему. Итак, чтобы «отключить» эти проверки, нам нужно переключиться
NODE_ENV
на"production"
Правильный способ отключить "режим разработчика" - через выбранный вами сборщик.
WebPack
Используйте
DefinePlugin
в своей конфигурации веб-пакета так:Browserify
Используйте преобразование Envify и запустите этап сборки просмотра с помощью
NODE_ENV=production
("set NODE_ENV=production"
в Windows)результат
Это приведет к созданию выходных пакетов, в которых все экземпляры
process.env.NODE_ENV
заменены строковым литералом:"production"
бонус
При минимизации преобразованного кода вы можете воспользоваться «Исключением мертвого кода». АКД это когда Minifier умна достаточно , чтобы понять , что:
"production" !== "production"
это всегда ложь , и так будет просто удалить какой - либо код в блоке , если вы экономить байты.источник
'"production"'
т.е. двойные кавычки, stringify сделает это за васJSON.stringify(process.env.NODE_ENV)
чтобы его можно было переключать черезNODE_ENV=production webpack ...
командную строку. Добавлен бонус явного кода =)DefinePlugin
использование можно заменить наnew webpack.EnvironmentPlugin(['NODE_ENV'])
Да, это не очень хорошо документировано, но на странице загрузки ReactJS говорится о режимах разработки и производства:
По сути, унифицированная версия React - это режим «разработки», а минимизированная версия React - это «производственный» режим.
Чтобы перейти в рабочий режим, просто включите уменьшенную версию
react-0.9.0.min.js
источник
npm
напрямую из пакета реакции, используйте что-то вроде envify, чтобы настроитьNODE_ENV = 'production'
выполнение тех же проверок. @EdwardMSmith Дайте мне знать, где вы хотели бы видеть эту информацию, и я могу добавить ее (или вы можете просто отправить PR)!NODE_ENV
должен присутствовать наверху.Я разместил это в другом месте, но, честно говоря, здесь было бы лучше.
Предполагая, что вы устанавливаете React 15.0.1 с помощью npm
import react from 'react'
илиreact = require('react')
запускаете./mode_modules/react/lib/React.js
исходный код React.В документации React предлагается использовать
./mode_modules/react/dist/react.js
для разработки иreact.min.js
для производства.Если вы минимизировали
/lib/React.js
или/dist/react.js
производите, React отобразит предупреждающее сообщение о том, что вы минимизировали непроизводственный код:Warning: It looks like you're using a minified copy of the development build of React. When deploying React apps to production, make sure to use the production build which skips development warnings and is faster. See fb.me/react-minification for more details.
react-dom, redux, react-redux ведут себя аналогично. Redux отображает предупреждающее сообщение. Я считаю, что react-dom тоже.
Поэтому вам явно рекомендуется использовать производственную версию от
/dist
.Однако, если вы
/dist
уменьшите версии, UglifyJsPlugin веб-пакета будет жаловаться.WARNING in ../~/react/dist/react.js Critical dependencies: 4:478-485 This seems to be a pre-built javascript file. Though this is possible, it's not recommended. Try to require the original source to get better results. @ ../~/react/dist/react.js 4:478-4851
Вы не можете избежать этого сообщения, потому что UglifyJsPlugin может исключать только фрагменты веб-пакета, а не отдельные файлы.
Я сам использую как рабочую, так и рабочую
/dist
версию./dist/react.min.js
он оптимизирован для производства. Я не читал никаких доказательств того, что'process.env': { NODE_ENV: JSON.stringify(IS_PRODUCTION ? 'production' : 'development') }
плюс uglify работает так же хорошо, как / dist / react.min.js. Я не читал доказательств того, что вы получаете тот же результирующий код.Вы можете использовать webpack
/dist
версии с:источник
Для сборки на основе webpack я использовал отдельный webpack.config.js для DEV и PROD. Для Prod разрешите псевдоним, как показано ниже
Вы можете найти рабочий отсюда
источник
Если вы работаете с чем-то вроде этого учебника ReactJS.NET / Webpack , вы не можете использовать process.env для включения / выключения режима разработки React, насколько я могу судить. Этот образец напрямую ссылается на response.js (см. Index.cshtml ), поэтому вам просто нужно выбрать .min.js или неминифицированный вариант, изменив URL-адрес.
Я не уверен, почему это так, потому что в примере webpack.config.js есть комментарий, который, кажется, подразумевает, что
externals: { react: 'React' }
он выполнит свою работу, но затем идет дальше и включает реакцию непосредственно на страницу.источник
Для только WebPack пользователей v4:
Указание
mode: production
иmode: development
в вашей конфигурации Webpack определитprocess.env.NODE_ENV
по умолчанию использование DefinePlugin. Дополнительный код не требуется!webpack.prod.js (взято из документации)
А в нашем JS:
Документы Webpack: https://webpack.js.org/guides/production/#specify-the-mode
источник
Я использую процесс сборки вручную, который выполняется через Webpack, поэтому для меня это был двухэтапный процесс:
Установите переменную окружения из package.json с помощью пакета cross-env:
"scripts": { "build-dev": "cross-env NODE_ENV=development webpack --config webpack.config.js", "build-prod": "cross-env NODE_ENV=production webpack --config webpack.config.js" }
Измените файл webpack.config.js, чтобы использовать переменную среды (которая передается в React, чтобы определить, находимся ли мы в режиме разработки или производства), и отключите сворачивание созданного пакета, если мы находимся в режиме разработки, чтобы мы могли видеть фактические названия наших компонентов. Для этого нам нужно использовать свойство оптимизации webpack в нашем файле webpack.config.js :
optimization: { nodeEnv: process.env.NODE_ENV, minimize: process.env.NODE_ENV === 'production' }
webpack v4.41.5, React v16.9.19, cross-env v7.0.0, узел v10.16.14
источник