Некоторые коснулись использования факта, что производство всегда будет минимизировано, а развитие не будет минимизировано.Вот конкретное решение, которое использует это:
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.6/react.js"></script>
<script>
const reactInfo = {
version: React.version,
development: (String((new React.Children.map()).constructor).length > 100)
};
console.log(reactInfo);
</script>
<div id="content"></div>
Я проверял это на дюжине версий реакции от v14 до v16.Из здесь вы можете видеть, что этот код не затрагивался с момента его первого написания, за исключением одного небольшого изменения год назад (что не повлияло бы на этот ответ, потому что слишком мало символов, хотя яВ любом случае, мы тестировали версии до 11 месяцев назад, и здесь есть приличный разрыв).
Примечание
Dev - 200 символов, Prod - 70, поэтому для персонажа Dev: Prod соотношение 3: 1соотношение.Я выбрал 100, потому что добавление 90 символов кода добавит 30 строк в prod, поэтому 100 - лучшее место с предоставленной информацией (технически ~ 105 или что-то в этом роде).Добавление 90 символов или удаление 100 символов крайне маловероятно для такой простой функции (функции, которая была изменена только один раз в 5 лет при редактировании 20 символов), поэтому я думаю, что она должна быть стабильной.
Для получения дополнительной информациистабильность или, по крайней мере, знание, если оно сломается, вы можете проверить, находится ли оно в пределах 25 символов от 70 и 200, и выдать ошибку, если это не так.Это должно отразить любые большие изменения (я бы дал 100% уверенность в том, что он никогда не скроет ошибку), но вы можете получить ложные срабатывания.Какой из них вы хотите, зависит от вашего варианта использования.
РЕДАКТИРОВАТЬ:
Если посмотреть на минимизацию, это регулярное выражение, которое выведет, если функция была минимизирована, так что вы можете безопасно использовать этот,Кроме того, произойдет сбой, если React.Children.map
не является функцией (почти наверняка никогда не произойдет), которую вы можете либо поймать, либо не поймать в зависимости от того, насколько строго вы хотите обработать маловероятное событие ошибки (или просто проигнорируйте его, потому чтотипа, зачем им это когда-нибудь менять).Сигнатура функции сохраняется, даже если она преуменьшена до [native code]
, так что это скорее перспективный imo.Я бы пошел с первым для простоты, хотя.
const reactInfo = {
version: React.version,
development: !/function\s?\w?\(\w(,\w)*\)/.test(String((new React.Children.map()).constructor).split("{")[0])
};