Почему многие функции util.is * устарели в node.js v4.0.0?

Как было выпущено node v4.0.0. В этой версии node устарели многие функции, такие как util.isArray, util.isRegEx, util. isDate, util.isBoolean и многие другие.

Я хочу знать, почему это произошло с node?

Есть ли встроенная поддержка этих вещей в ES6?

Или node предоставляет лучшее решение вместо этих вещей?

Ответы

Ответ 1

Решение об отказе от функций util.is*() было изначально сделано в техническом руководящем комитете Node.js в апреле 2015 года. Ну, на тот момент он все еще был io.js, но тот же комитет теперь является Node.js TSC, а база кода, о которой они говорили, стала Node.js 4.0.0.

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

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

(К сожалению, в минутах есть недостающий контекст. Посмотрим, смогу ли я выкопать еще какой-то контекст из других источников и, если найду что-нибудь полезное, я обновлю этот ответ.)

ОБНОВЛЕНИЕ: Судя по некоторым протоколам TSC за период с февраля и обсуждение в тянуть запрос с того же месяца, похоже, что аргументация такова:

Эй, выглядит как util.isObject() возвращает false для функции. Это неверно. Функция - это объект. Он должен вернуться true. Но внесение такого изменения потенциально разрушает огромные части экосистемы Node. Подумайте обо всех этих модулях на npm, которые могут зависеть от этого поведения. Чтобы не подвергать риску разрушение экосистемы удивительными способами, нам нужно как-то получить массу людей, чтобы пересмотреть свой код. И разрушающее изменение было бы полностью назад несовместимым. Все для функции удобства, которая даже не относится к основному ядру и легко предоставляется модулями userland. (См., Например, core-util-is.) Вместо того, чтобы вводить изменение разбиения и основной удар, чтобы исправить util.isObject(), допустим что должно было быть сделано в первую очередь и даже не иметь его в ядре.

Я думаю, что, возможно, также было ощущение, что в функциях util.is*() есть вероятность появления других угловых случаев.

Философия проекта в целом состоит в том, чтобы иметь минимальное ядро. При прочих равных условиях, если что-то может быть предоставлено модулями userland без особых проблем, оно должно жить в модулях userland, а не в ядре.

Хорошо, что я рисую много умозаключений из некоторых битов текста, но я думаю, что более или менее то, что с устаревшим.

Ответ 2

Не эксперт node.js, но эти функции (если они делают то, что говорит название) можно легко заменить на

[] instanceof Array; // true
/* or */ Array.isArray([]); // true

(/(?:)/g) instanceof RegExp; // true

new Date() instanceof Date; // true

new Boolean(true) instanceof Boolean; // true
/* or */ typeof false == 'boolean';
/* or even */ var bool1 = true, bool2 = false;
!!bool1 === bool1; // true
!!bool2 === bool2; // true

В соответствии с журнал изменений:

Функции util.is*() устарели, начиная с предупреждений о предостережениях в документации для этой версии, пользователям рекомендуется искать более надежные альтернативы в реестре npm.

Они связывают этот запрос на перенос, содержащий некоторые аргументы, которые приводят к этот диалог, указав:

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

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

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