jQuery 插件网站发生了什么?

发布于 作者

大约一周前,我们的插件库不再托管数百个 jQuery 插件和数千个笔记本电脑电池的广告,而是显示了一条关于垃圾邮件和“新提交流程”的非常糟糕的信息。这件事发生得非常突然,我们对给每个人带来的不便表示歉意。请允许我花几分钟解释一下发生了什么,我们要去哪里,以及这对您的影响。如果您时间紧迫,请看简短版本

背景故事

一只白象 虽然您所知道的和喜欢的插件网站在最初建立时是一个有价值的工具,但它逐渐变成了项目的白象。当像GitHubnpm这样的强大分发工具出现后,我们却被困在了一个陈旧的、以 CMS 为中心的范式中,这使开发人员和插件使用者都感到沮丧。许多人转向其他来源寻找和审查插件。此外,网站最初的实现者和维护者已经不再积极参与 jQuery 项目。尽管团队面临着关于可用性和功能缺乏的持续抱怨,但网站本身却遭到了各种(多种形式的)垃圾邮件的攻击。有标准的、关键词丰富的 SEO 垃圾邮件,但也有一些更阴险的东西:由第三方发布缺乏文档、没有演示的插件,这些插件链接到付费下载网站,他们是为了获得联盟佣金。虽然这并没有明确禁止,但它导致了用户体验糟糕且混乱,并给网站带来了所有事情都不正常的感觉。

最周密的计划……

意识到所有这些问题,团队开始制定全面改革的要求。我们知道我们想要退出接受上传、提供下载和在自己的服务器上对插件“发布”流程进行监管的业务。由于我们的官方项目已经在 GitHub 上,我们知道我们想要利用他们已经为分发、版本控制和促进开放、协作开发而创建的许多工具。另一个要求是为作者创建一个标准架构,以清晰地描述依赖关系,例如插件支持的 jQuery 版本以及它要正常运行所需的其他插件和 CSS 资产。我们还想引入一些质量控制,包括被动机制,如要求 GitHub 和分发清单文件,以及主动机制,如用户评分。最后,我们想要一个干净的开始;随着提交要求变得更加严格,不可能大量导入所有旧插件。我们在准备规范方面取得了很大进展,但由于缺乏资源和其他项目的阻碍,我们从未能够深入到实施阶段。毕竟,旧的网站“可以工作”!

……往往会出错

Throwing the baby out with the bathwater

随着垃圾邮件数量的激增,jQuery 核心错误跟踪器上出现了多份报告,我想至少采取一些措施来清理垃圾邮件,让我们摆脱尴尬。凭借对网站管理工具的新权限,我和Drupal Views 批量操作模块合作,着手识别和删除垃圾邮件发送者及其帖子。一两天内,网站上近 90% 的所谓“内容”消失了。在接下来的几天里,我继续监控情况,并删除了新出现的垃圾邮件。不幸的是,我的网撒得可能太广,把一些很好的东西也一并扔掉了。更不幸的是,在开始这个过程之前我没有备份数据库。在这一点上,你可能已经猜到故事要往哪里发展了。在本周晚些时候,当我试图删除四条垃圾邮件时,当操作结果显示剩下的 10%——数据库中剩下的每个插件——都被清除了,我感到完全震惊。剩下的只有一年前的备份。当然,我意识到这是一个可怕的结果,我对此负全部责任。如果这对您有帮助,我非常乐意收到仇恨邮件和批评我的推文,指责我不负责任、不专业或愚蠢。

在这一点上,我们剩下两个选择。

  • 继续拖延:从旧备份中恢复,反正也会丢失很多数据,让作者经历重新上传插件的繁琐过程,尽管网站本来就计划完全弃用。
  • 利用这个明显的错误作为契机,彻底放弃过去,最终实现我们一直讨论的网站。

我们选择了后者。

具体细节

在过去几天里,我们开始将计划付诸行动,构建了一个由 GitHub 支持的基础设施。在新网站上列出插件有两个要求
Success Kid is helping out as well

  • 一个有效的package.json 文件
    我们参考了 CommonJS npm,创建了一个架构,用于指定 jQuery 插件的依赖项、交付和其他元数据。虽然格式与其他项目非常相似,但我们不得不进行一些小的调整,以解决一些特定于插件的细节。
  • 至少有一个版本化的发布
    这意味着使用有效的语义版本号 (semver) 字符串对您的发布点进行标记

我们将提交和维护流程简化为一个一次性步骤:在您的插件的 GitHub 仓库中添加一个post-receive 钩子。假设您的插件符合指南,将在插件网站上创建一个页面来展示您的使用和下载信息。我们将跟踪您推送的新版本。

在此期间

我们认识到,旧网站仍然是许多人,尤其是 jQuery 新手的常用资源,他们仅仅重视一个中央浏览位置的存在,尽管它存在缺陷。虽然许多经验丰富的用户已经转向其他网站,或者依赖于与受信任的作者的关系和口碑,但这需要时间才能形成。在我们能够推出新系统之前,我们很乐意为您推荐几个其他目录和人员,他们可以帮助解决问题

如果您在搜索这些目录或任何其他目录时被重定向回当前的 plugins.jquery.com 网站,通常快速搜索作者姓名和插件名称将找到它托管的另一个网站。此外,DailyJS 刚刚做了一个有用的替代方案综述,它更详细地介绍了这些替代方案。

插件作者的下一步

如果您是插件开发人员,想要确保您的插件在第一天(甚至更早)就能投入使用,您需要确保您的插件已上传到 GitHub,然后开始创建您的package.json 文件,并确保您的版本已正确标记。如果您还不熟悉 Git 和 GitHub,那么现在可能是您开始学习和入门的最佳时机。如果您更喜欢其他 SCM 系统,您可以查看如何从 svnhg 或其他项目托管网站(如 bitbucketgitorious)建立到 git 的镜像。如果您没有将您的插件开发为开源软件,或者您根本没有使用任何源代码控制,我们目前无法为您提供服务。

我如何帮忙?

虽然网站仍在开发中,但您现在可以在 github.com/jquery/plugins.jquery.com/ 跟踪进度,甚至设置您自己的本地开发环境。我们仍在努力建立一个公共的暂存环境。

虽然网站基本上是“由”GitHub 提供支持,但显然还有许多活动部件。网站实际上将从 WordPress 内部提供服务,WordPress 使用 node.js 工具填充索引插件的内容。仍然有很多问题需要解决,所以如果这个堆栈听起来像是您想要参与的,请加入我们,前往 仓库。我们将使用 GitHub 问题来处理所有功能请求、错误和讨论。

虽然我们已经认真考虑了 package.json 架构,但它仍然是一个活文档,如果您对它为什么是现在的样子有任何疑问或意见,请访问 此问题

勘误

在理想情况下,这件事当然不会完全像现在这样发生。可悲的是,它发生了。我们希望您能接受我们对这种转变可能会给您带来更多工作、让您做一些您没有预料到的额外工作,或者只是让您感到不快的方式的道歉。如果您能原谅我们、忍受我们,甚至伸出援手,我们相信我们能够提供社区应得的现代、有用的插件网站。

TL;DR

说了这么多,以下是要点。

  • 我们一直在计划很长时间要替换最初的、充斥着垃圾邮件的插件网站
  • 在删除垃圾邮件的过程中,所有插件都被删除了,我们没有最新的备份
  • 我们没有继续浪费时间来维持旧网站,而是决定断然决裂,并全力开发新网站。
  • 新网站由 GitHub 和一个插件包清单提供支持
  • 旧网站上的插件永远不会自动导入到新网站中。
  • 仓库位于 github.com/jquery/plugins.jquery.com
  • 我们非常抱歉,但也非常兴奋!

关于“jQuery 插件网站发生了什么?”的 156 条评论

  1. 坦率地承认错误,并承担责任,这很好。如果我们世界上的一些“领导者”能遵循这条箴言就好了。

  2. 你对从“老化的 CMS 导向范式”迁移到 WORDPRESS 感到兴奋吗?

    这说不通。这看起来完全是一个幼稚的错误和解决方案。

  3. Matteo Bicochi 说:

    幸运的是,这种情况会发生!
    这不是一个错误,而是一个机会。
    迫不及待地想看到新网站。
    在新网站上工作顺利。

  4. Brandon McCaig 说:

    同意。旧系统很糟糕。我完全理解不想备份它。任何值得保留的代码都应该已经在开发人员的机器上通过 VCS 进行跟踪(即,没有实际的好的插件代码会丢失),而且实际上没有其他任何有价值的数据。:P 我期待着看到新系统的实现。

  5. 我之前使用插件的过程基本上是:老板说“我们可以使用 X(链接到作者网站)”=>下载 X。我认为没有任何下载是通过 plugins.jquery.com 进行的,即使我只有几次访问过该网站。

    尽管如此,大量删除却没有备份(或者,显然,没有预览)? 哎哟。

  6. Jena West - Enigmas 说:

    我也很难找到插件。但我认为随着人们提出缺陷投诉,你们会做得更好。

  7. 如何包含可选文件或依赖项的列表,例如 easing 插件?我只是猜测“文件”应该是必需的,或者我们应该只包含所有内容?

  8. 我相信我们都犯过这种错误,不需要“退位”!

    我同意 archive.org 的想法,作为临时解决方案,可以调查一下。就这个而言,我相信谷歌在他们的服务器上也有所有内容(甚至可能还有 MSN)。

  9. 感谢上帝,这就是我想说的。旧的插件网站在我(诚实地)谦卑的意见中,并不是特别好用。我期待着新网站,而且我认为 GitHub 集成会很棒。

  10. 我非常希望你们不要走 npm 的路线(或者使用它的代码作为你们的包管理器),因为它漏洞百出,而且他们的提交过程比你们以前的过程还要糟糕。

  11. 对于那些主张 jQuery 插件与 Ender.js 包之间兼容的人

    比较 提议的 package.json 规范 与 Ender 的 package.json 规范,你会发现它们几乎是等效的。当然,这并不奇怪,因为它们都只是在使用 NPMpackage.json 规范 的子集,而 package.json 规范 又基于(但不完全相同) CommonJSpackage.json 规范.

    因此,如果你花时间添加一个“ender”关键字并使用 NPM 发布你的 jQuery 插件,它应该会出现在 Ender 中。这应该很简单,对吧?问题是它仍然会依赖于 jQuery,这使得整个操作毫无意义。有几种不同的方法可以解决这个问题。

    最简单的方法是使用 CommonJS 的哈希组依赖项语法,不幸的是,它没有被移植到 NPM 中。它提供了根据功能指定备用依赖项的能力,如下所示

    “dependencies”: {
    “selector_engine”: {
    “qwery”: “3.0.0”,
    “jquery”: “1.6.0”
    },
    “dom_utility”: {
    “bonzo”: “0.7.0”,
    “jquery”: “1.6.0”
    }
    }

    请注意,组的顺序很重要,较早的条目具有更高的优先级。在上面的例子中,如果 Ender 包 QweryBonzo 丢失,你将回退到依赖于 jQuery。

    另一种方法不需要对 NPM 进行任何修改,那就是利用 fork。由于所有 jQuery 插件都将迁移到 GitHub,因此对给定插件进行 fork 并将 jQuery 依赖项替换为其他东西将变得非常简单。

    我个人更喜欢第一种方法,因为标准的广泛采用往往会让网络变得更好。也就是说,第二种方法也很好。无论哪种方式,迁移到 GitHub 都只会对 Ender 和整个 JS 生态系统有所帮助。

  12. jQuery Rocks 说:

    旧的插件部分不怎么样......现在我明白了,当你意外地删除/清空一个主要网站上的整个数据库,并且没有最近的备份时,你不得不道歉(在你咒骂和惊慌了一会儿之后);但说真的,我认为这是最好的结果。许多插件都过时了,而且已经不再维护,因此我用 Google 搜索 jQuery 插件的效果更好。
    正如评论中其他人(或者可能几个人)提到的,大多数严肃的插件开发者都会将他们的代码保存在本地或在线的某种源代码管理中。
    作为一个轻度使用插件部分的用户,我个人的优先事项是让 jQuery UI 团队发布 jQuery UI 1.9......这个项目进展缓慢。不过,我假设这是一个不同的团队,对于整个 jQuery 社区来说,替换插件网站绝对是优先事项(尤其是现在根本没有网站,除了上面提到的存档网站)。

  13. Jon Mifsud 说:

    很高兴听到新系统的消息;我的插件已经在 GitHub 上了,所以没有主要的工作点;我只是想知道回调系统什么时候开始工作,这样我就可以使用新的 json 文件发布我的更新。另外,在文件中,它说文件列表,这是否必须包括存储库中捆绑的任何示例代码?

  14. Subfader 说:

    没有备份就进行批量清理 => 史诗级失败。

    听起来好像根本就没有备份。

    阴谋!

  15. Abner 说:

    虽然jQuery插件网站的停运完全是管理层的失败,因为旧网站本来可以很容易地保留下来,直到新网站可用,但我很尊重这种坦诚的解释。

  16. River 说:

    只要“由”GitHub提供支持不意味着GitHub成为必须,这听起来就很不错。如果GitHub只是版本控制和错误跟踪的可选方案就好了。

  17. Nicolás López Zerpa 说:

    $(“#plugins”).remove();

    感谢你的坦诚,Adam,祝新插件网站一切顺利。

  18. 请发布一个你们一年前插件的只读存档。里面有很多内容可以用作新插件的模板。

  19. Saeed Neamati 说:

    干得好,伙计们。我支持你们,不用担心会造成不便,因为我认为,只要人们知道未来会更好,他们就会包容一切。我也很高兴你们使用GitHub。我将在那里关注你们。

  20. 编写代码就像写诗一样,每次你都会想出一些新东西。迫不及待地想看看新东西……。

  21. 感谢你们的更新,但最重要的是感谢你们所有人,维护者、编码人员和忠实用户,感谢你们所做的一切。我从这个网站和插件中获益良多,它们对我的工作网站非常有用。期待一个没有垃圾邮件的网站。

  22. 插件页面的一大优点是它提供了一种“注册”插件名称的方式,以避免命名空间冲突。

    在我们等待新网站上线期间,我们如何注册插件名称呢?

  23. 我很高兴我不是唯一犯这种错误的人。

    这里有这么多优秀的编码人员,我们会帮助将仓库填充上新的插件。
    我已经收集了我在过去一个月中下载的所有插件。

    祝大家新年快乐
    Sven

  24. Niklas 说:

    @Paul

    “GitHub对那些真正懂技术的人来说很棒,但我不知道该怎么下载插件了 :((((((((((((((((((((((((”

    如果你不是技术人员,就不应该开发JavaScript。

    @团队

    在进行一些非标准操作之前创建备份的唯一原因是,你不希望在发生意外时一直回滚到上次的每日备份……:/ 无论如何,现在你已经知道该怎么做,也知道不该怎么做。

  25. Adam,每个称职的开发者至少都忘记过一次where子句,然后把整个表都删除了,而不是一两条记录。好吧,也许在没有最近备份的生产数据库上没有那么频繁……但我们都经历过那种“糟糕”的时刻……

    jQuery插件网站很久以前就不是下载最佳插件的地方了——已经超过一年了。

    我期待着新网站!

  26. 虽然这令人遗憾,但我非常感谢那些为我们工作的人——没有得到报酬。

    这实际上提醒我今天要备份我的开发笔记本电脑!

  27. Albert 说:

    还有其他地方可以获取插件吗?我特别想要jFlick插件。有人有吗?如果有人能把插件发布到某个地方或发给我,我将不胜感激。

    非常感谢!

  28. Santosh Subba 说:

    我是 web 开发新手,但我已经意识到,没有 jQuery,web 开发将无法想象(至少我无法想象)。
    非常感谢你们,你们太棒了!!!

  29. Garvin 说:

    这听起来像一个很典型的错误,我认为你对现状和修复计划的坦诚解释已经为你赢得了一些信任。期待看到它将变成什么样子!

  30. Sirius 说:

    我们是工程师,朋友。我不在乎人们怎么说,但删除数据而不备份绝不是犯罪。请放轻松。感谢你付出的所有努力。:)
    干杯!

  31. 这是文章的另一个开头

    “嗨! 我叫亚当·桑塔格。我负责删除plugins.jquery.com上的所有旧插件。以下是为什么这是一个好主意:”

    :D :D

  32. Jean-Philippe Lambert 说:

    我想我应该感谢你发现了这个错误,我认为插件库的全部或大部分被清空是一件好事,这将为更好的新插件腾出空间。

  33. 对于那些在评论中责怪Drupal的人:请了解一下情况。问题与Drupal无关,是人为错误。在评论之前请阅读文章。

  34. 这是一个很棒的网站,我为发生这样的事情感到非常抱歉。话虽如此,没有数据库备份是非常非常愚蠢的(我希望这种情况永远不会发生在我身上,报应是残酷的)。无论如何,已经发生的事情就发生了。祝你好运,我期待着新网站的发布。

  35. “对于那些在评论中责怪Drupal的人:请了解一下情况。问题与Drupal无关,是人为错误。在评论之前请阅读文章。”
    - 说得好