Как следует пометить метод как "устаревший" в JS?
Я рефакторинг довольно большого JS файла, который содержит много несвязанных методов, во что-то, что будет объединять методы вместе в соответствии с их использованием и переименовывать некоторые из них по мере необходимости (чтобы предотвратить ввод в заблуждение имен).
Однако большинство веб-страниц, которые на самом деле используют этот код, распространяются по разным ветвям кода, что мешает мне выполнить простую замену find & Я мог бы сделать это во всех разных отраслях, но это требует одновременного обслуживания в 30 ветких или, возможно, забывает выполнить переименование, как только изменение будет объединено в других ветких (мной или другими членами команды).
Если это был С#, я мог бы просто пометить метод с помощью [Obsolete], и при необходимости он будет отмечать необходимые изменения, поэтому я ищу что-то несколько эквивалентное. Я по-прежнему буду поддерживать функциональность старого интерфейса на некоторое время, просто перенаправляя вызовы на новые методы, но я бы хотел "заставить" людей переключиться на новый интерфейс, поскольку они работают на страницах по другим причинам.
Есть ли другой способ сделать что-то подобное, помимо добавления debugger;
выражение и подробный комментарий к каждому методу, чтобы он ломался при разработке, но не в производстве?
Ответы
Ответ 1
Есть несколько вещей, которые вы можете сделать в переходный период.
- Добавьте флаг
@deprecated
JSDoc.
- Добавить предупреждающее сообщение консоли, указывающее, что функция устарела.
Образец:
/**
* @deprecated Since version 1.0. Will be deleted in version 3.0. Use bar instead.
*/
function foo() {
console.warn("Calling deprecated function!"); // TODO: make this cross-browser
bar();
}
Ответ 2
Вот что мы нашли для Visual Studio 2013: http://msdn.microsoft.com/en-us/library/vstudio/dn387587.aspx
Он еще не тестировался, поскольку мы не сделали переключатель, но он выглядит многообещающим.
Тем временем я вставляю флаг при загрузке страницы в зависимости от контекста, например:
<%
#if DEBUG
Response.Write("<script type=\"text/javascript\"> Flags.Debug = true; </script>");
#endif
%>
а затем я вызываю метод, который выдает ошибку, если флаг имеет значение true или перенаправляется на новый вызов, если он находится в конфигурации выпуска.
Ответ 3
Нет, метод меток маркировки не устарел в Javascript или большинстве языков. Вместо этого вы должны просто изменить свою библиотеку.
Предоставить новую версию с переименованными методами и удалить старые методы, другие приложения должны продолжать использовать старую версию библиотеки, пока вы не портируете их по очереди в новую версию.