web-dev-qa-db-fra.com

Comment dois-je marquer une méthode comme "obsolète" dans JS?

Je refactorise un fichier JS assez volumineux qui contient de nombreuses méthodes non liées en quelque chose qui regroupera les méthodes en fonction de leur utilisation, et renommer certaines d'entre elles au besoin (pour éviter les noms trompeurs).

Cependant, la plupart des pages Web qui utilisent réellement ce code sont réparties sur différentes branches de code, m'empêchant de faire une simple recherche et remplacement. Je pourrais le faire dans toutes les différentes branches, mais cela nécessite de faire la maintenance dans plus de 30 branches en même temps, ou probablement d'oublier d'effectuer le changement de nom une fois le changement fusionné dans les autres branches (par moi-même ou d'autres membres de l'équipe).

Si c'était C #, je pourrais simplement marquer la méthode avec [Obsolète] et cela marquerait les changements nécessaires selon les besoins, donc je cherche quelque chose d'un peu équivalent. Je fournirai toujours des fonctionnalités avec l'ancienne interface pendant un certain temps en redirigeant simplement les appels vers les nouvelles méthodes, mais j'aimerais "forcer" les gens à passer à la nouvelle interface pendant qu'ils travaillent sur les pages pour d'autres raisons.

Y a-t-il une autre façon de faire quelque chose de similaire, en plus d'ajouter un debugger; une déclaration et un commentaire détaillé sur chaque méthode afin qu'elle se casse lors du développement mais pas en production?

47
JBG

Il y a deux ou trois choses que vous pouvez faire pendant une période de transition.

  1. Ajouter le @deprecatedJSDoc drapeau.
  2. Ajoutez un message d'avertissement de console qui indique que la fonction est obsolète.

Un échantillon:

/**
 * @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();
}
63
Jordão

Voici ce que nous avons trouvé pour Visual Studio 2013: http://msdn.Microsoft.com/en-us/library/vstudio/dn387587.aspx

Il n'a pas encore été testé car nous n'avons pas effectué le changement, mais il semble prometteur.

En attendant, j'insère un indicateur au chargement de la page en fonction du contexte tel que:

<%
#if DEBUG
    Response.Write("<script type=\"text/javascript\"> Flags.Debug = true; </script>");
#endif
%>

puis j'appelle une méthode qui génère une erreur si l'indicateur est vrai, ou redirige vers le nouvel appel s'il est en configuration de version.

1
JBG