Как включить / выключить режим разработки ReactJS?
начал использовать ReactJS функция проверки опоры, который, как говорят документы, работает только в "режиме разработки" по соображениям производительности.
React, похоже, проверяет свойства конкретного компонента, который я аннотировал, но я не помню, чтобы явно включал "режим разработки".
Я попытался найти способ запуска / переключения режима разработки, но не повезло.
5 ответов:
другой ответ предполагает, что вы используете внешние готовые файлы из react, и хотя правильно, что это не так, как большинство людей собираются или должны потреблять реагировать как пакет. Более того, на данный момент большинство библиотек и пакетов React и полагается на то же Соглашение для переключения помощников dev time во время производства. Просто используя minified react, вы также оставите все эти потенциальные оптимизации на столе.
в конечном итоге магия сводится к тому, чтобы реагировать на встраивание ссылок на
process.env.NODE_ENVпо всей кодовой базе; они действуют как функции переключения.if (process.env.NODE_ENV !== "production") // do propType checksвыше приведен наиболее распространенный шаблон,и другие библиотеки следуют ему. Поэтому, чтобы "отключить" эти проверки, нам нужно переключить
NODE_ENVдо"production"правильный способ отключить "dev mode" - это ваш выбор в комплекте.
webpack
использовать
DefinePluginв вашем webpack конфигурации, как Итак:new webpack.DefinePlugin({ "process.env": { NODE_ENV: JSON.stringify("production") } })Browserify
использовать Envify преобразование и запустить browserify шаг сборки с
NODE_ENV=production("set NODE_ENV=production"в Windows)результат
это создаст выходные пакеты, которые имеют все экземпляры
process.env.NODE_ENVзаменено строковым литералом:"production"бонус
при минимизации преобразованного кода Вы можете воспользоваться "мертвым устранением кода". АКД-это когда английское сокращение Cups умный достаточно, чтобы понять, что:
"production" !== "production"и всегда false и поэтому просто удалит любой код в блоке if, сохраняя байты.
Да, это не очень хорошо документировано, но на ReactJS страница скачать Он говорит о разработке и режимах производства:
мы предоставляем две версии React: несжатую версию для разработки и уменьшенную версию для производства. Версия разработки включает дополнительные предупреждения о распространенных ошибках, в то время как производственная версия включает дополнительную оптимизацию производительности и удаляет все сообщения об ошибках.
в основном, в unminified версия реагируешь "развитие" режиме, и уменьшенная версия реагируешь "рабочем режиме".
чтобы быть в режиме "производство", просто включите уменьшенную версию
react-0.9.0.min.js
я разместил это в другом месте, но, честно говоря, здесь было бы лучше.
предполагая, что вы устанавливаете 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.реагировать-дом, возвращение, реагировать, я полагаю, вести себя аналогично. Redux отображает предупреждающее сообщение. Я считаю, что react-dom тоже.
таким образом, вам явно рекомендуется использовать производственную версию от
/dist.однако, если вы уменьшите
/distверсии, UglifyJsPlugin webpack будет жаловаться.
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 может исключать только куски webpack, а не отдельный файл.
я использую как разработку, так и производство
/distверсий себя.
- Webpack имеет меньше работы, чтобы сделать и заканчивает немного раньше. (YRMV)
- реагировать документы говорят
/dist/react.min.jsоптимизирован для производства. Я не читал никаких доказательств, что'process.env': { NODE_ENV: JSON.stringify(IS_PRODUCTION ? 'production' : 'development') }плюс уродовать делает, как хорошо выполняет свою работу как '/дист/реагировать.минута.js'. Я не читал никаких доказательств, что вы получаете тот же результирующий код.- я получаю 1 предупреждающее сообщение от uglify, а не 3 от реагируют экосистемы/возвращение.
вы можете иметь webpack использовать
/distверсии:resolve: { alias: { 'react$': path.join(__dirname, 'node_modules', 'react','dist', (IS_PRODUCTION ? 'react.min.js' : 'react.js')), 'react-dom$': path.join(__dirname, 'node_modules', 'react-dom','dist', (IS_PRODUCTION ? 'react-dom.min.js' : 'react-dom.js')), 'redux$': path.join(__dirname, 'node_modules', 'redux','dist', (IS_PRODUCTION ? 'redux.min.js' : 'redux.js')), 'react-redux$': path.join(__dirname, 'node_modules', 'react-redux','dist', (IS_PRODUCTION ? 'react-redux.min.js' : 'react-redux.js')) } }
для сборки на основе webpack я использовал для настройки отдельного webpack.конфиг.js для DEV и PROD. Для Prod разрешите псевдоним, как показано ниже
alias: { 'react$': path.join(__dirname, 'node_modules', 'react','dist','react.min.js'), 'react-dom$': path.join(__dirname, 'node_modules', 'react-dom','dist','react-dom.min.js') }вы можете найти рабочий из здесь
Если вы работаете с чем-то вроде этого ReactJS.NET / Webpack tutorial, вы не можете использовать процесс.env для включения/выключения режима разработки React, насколько я могу судить. Этот пример ссылается на react.js напрямую (см. .cshtml), поэтому вам просто нужно выбрать .минута.JS или не сжатый вариант, изменив URL-адрес.
Я не уверен, почему это так, потому что образца webpack.конфиг.JS имеет комментарий, который, кажется, подразумевает
externals: { react: 'React' }будет делать работа, но затем идет вперед и включает реагировать непосредственно на странице.
Comments