【问题标题】:Should JavaScript libraries use the deprecated annotation?JavaScript 库是否应该使用已弃用的注解?
【发布时间】:2023-03-24 16:30:02
【问题描述】:

显然,何时弃用和何时删除取决于开发人员,但我想知道如何警告开发人员 JavaScript 函数已被弃用?

一些流行的语言(JavaC#Python)以某种形式支持语言级别的弃用。

不过,对于 JavaScript,我找不到任何标准方法可以让开发人员指出某个函数已被弃用(在代码中)。我能做的最好的就是遵循(大量)发行说明。

例如,对 jQuery 1.8 的完整源代码进行 grepping 显示最小的内联 cmets:

# curl http://code.jquery.com/jquery-1.8.0.js | grep -i depre
// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
// Some plugins are using, but it's undocumented/deprecated and will be removed.
// Deprecated
// Limit scope pollution from any deprecated API
// Deprecated, use jQuery.browser.webkit instead

W3C 和 MDN 似乎没有标准方法或提供有关如何处理此问题的建议。

我发现最好的是 JSDoc 的 @deprecated 标签。

有人知道 JavaScript 是否 有我忽略的弃用注释吗?有没有更好或更常见的方法来做到这一点?

【问题讨论】:

  • console.log('This function is deprecated.');
  • @FlorianMargaine 很有趣,你能创建这个作为答案吗?您知道使用这种方法的任何库吗?
  • 是的,jQuery Migrate(用于 1.8 -> 1.9 升级)就是这样做的。
  • 已弃用 = str => {if(!cmap[str]) {cmap[str]=true; console.warn(str)}} // 第一次使用特定消息调用时给出警告

标签: javascript deprecated deprecation-warning


【解决方案1】:

使用deprecate()函数

除了 JSDoc 的 @deprecated 标签之外,您还可以使用流行的 util-deprecate 包:

import deprecate from "util-deprecate";

/**
 * @deprecated Use bar() instead
 */
const foo = deprecate(function () {

}, "foo() is deprecated, use bar() instead");

用户看到:

foo();
// foo() is deprecated, use bar() instead
foo();
foo();

这不是真正的标准,但它基于 Node.js util.deprecate() 函数。

您可能需要像 Webpack、Browserify、Rollup 等捆绑器来为浏览器捆绑 npm 包。

【讨论】:

    【解决方案2】:

    基本上没有方法来弃用方法/函数。由开发人员来处理已弃用的成员。

    我认为唯一可以做的就是尽最大努力记录已弃用的函数/方法,并在源代码文档中使用@deprecated 标签。

    然后,一些编译器(如果我没记错的话,Google Closure Compiler 会这样做)和高级 IDE,可以使用此标记来验证已编译的源代码并在使用某些已弃用的函数时发出警告。

    【讨论】:

      【解决方案3】:
      console.log('This function is deprecated.');
      

      这就是 jQuery Migrate(用于 1.8 -> 1.9 升级)帮助人们升级代码的方式。

      来自他们的wiki

      为了让开发人员在迁移旧 jQuery 代码时识别和修复兼容性问题,插件的开发(未压缩)版本在调用其任何功能时都会生成控制台警告消息。对于每条独特的消息,消息仅在控制台上出现一次。

      【讨论】:

      • 这是一种非常有趣的方式来弃用功能并提供向后兼容性(如果我没看错的话)。所以他们基本上将弃用视为插件。
      • 这行得通,我已经用过了。但是,您需要小心使用 Internet Explorer。我知道在 IE8 中console.log('foo') 会在开发人员工具未打开时引发异常。见stackoverflow.com/questions/690251/…
      • console.warn('deprecated') 会更好吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2013-04-07
      • 2015-09-20
      • 1970-01-01
      相关资源
      最近更新 更多