jQuery 插件网站发生了什么?

发布于

大约一周前,我们的插件库不再托管数百个 jQuery 插件和数千个笔记本电脑电池广告,而是显示了一条关于垃圾邮件的非常糟糕的消息,并暗示了某个“新提交流程”。这一切发生得很突然,我们向所有受到影响的人表示歉意。请允许我花几分钟时间解释发生了什么,我们将走向何方,以及它将如何影响您。如果您时间紧迫,这里有 简短版本

背景故事

A White Elephant 虽然您所知道的 并且喜欢的 的插件网站在最初建立时是一个有价值的工具,但它逐渐成为项目的一个 无用之物。当像 GitHubnpm 这样的强大分发工具开始流行时,我们却陷入了过时的 CMS 导向模式中,这让插件的开发人员和使用者都很沮丧。许多人转向其他来源查找和验证插件。此外,该网站的最初实现者和维护者已经从 jQuery 项目的积极参与中退出。虽然团队面临着关于可用性和功能不足的持续投诉,但该网站本身却遭遇了大量(多种形式的)垃圾邮件。有常见的关键字丰富的 SEO 垃圾邮件,但还有一些更隐蔽的东西:第三方通过抓取关联现金来批量发布没有文档的、没有演示的插件,并链接到付费下载网站。虽然这并没有明确禁止,但它导致了用户糟糕且混乱的体验,并让网站感觉并非一切正常。

精心制定的计划…

意识到所有这些问题,团队开始起草完全改造的要求。我们知道我们想要摆脱接受上传、提供下载以及在我们的服务器上普遍立法插件“发布”流程的业务。由于我们的官方项目已经存在于 GitHub 上,我们知道我们想要利用他们已经为分发、版本控制和促进开放的协作开发而创建的许多工具。另一个要求是创建一个标准模式,让作者清楚地界定依赖项,例如插件支持的 jQuery 版本,以及它正常运行所需的插件和 CSS 资源。我们还想引入一些质量控制,既有被动机制,例如要求 GitHub 和分发清单文件,也有主动机制,例如用户评级。最后,我们想要一个全新的开始;在提交要求更加严格的情况下,不可能批量导入所有旧插件。我们在准备规范方面取得了很大进展,但由于资源不足以及其他许多项目,我们从未能够深入实施阶段。毕竟,旧网站“有效!”

…经常出错

Throwing the baby out with the bathwater

随着垃圾邮件的泛滥越来越严重,jQuery Core 错误跟踪器上出现了多份报告,我至少想要采取一些措施来清除一些垃圾邮件和糟糕的体验。利用新获得的对网站管理工具的访问权限,我与 Drupal Views 批量操作模块 合作,开始识别和删除垃圾邮件发送者及其帖子。一两天内,网站上近 90% 的所谓“内容”都消失了。在接下来的几天里,我继续监控情况,并删除了收到的垃圾邮件。不幸的是,我可能网撒得太广,把一些很好的东西也一起扔掉了。更不幸的是,在开始这个过程之前我没有备份数据库。此时此刻,您可能已经明白故事的走向。在那周晚些时候,当我在尝试删除四个垃圾邮件项目时,当我看到操作结果报告剩余的 10%——数据库中剩余的每个插件——都被清除了时,我完全惊呆了。剩下的只是一年前的备份。当然,我意识到这是一个糟糕的结果,我对此负全部责任。如果这能有所帮助,我很乐意接受任何嘲笑我行为不负责任、不专业或愚蠢的仇恨邮件和推文。

在此时此刻,我们有两个选择。

  • 继续拖延:从旧备份中恢复,即使如此也仍然会丢失大量数据,并让作者经历重新上传插件的痛苦过程,即使该网站原本就要完全弃用。
  • 利用这个明显的错误作为契机,抛开过去,最终实现我们一直讨论的网站。

我们选择了后者。

细枝末节

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

  • 一个有效的 package.json 文件
    我们借鉴了 CommonJS npm 的做法,创建了一个模式来指定 jQuery 插件的依赖项、交付和其他元数据。虽然该格式与其他项目基本相同,但我们不得不进行一些微调以适应一些插件特定的细节。
  • 至少有一个版本化的发布
    这意味着使用有效的语义版本号 (semver) 字符串为您的发布点 添加标签

我们已经将提交和维护过程简化为一个单一的、一次性的步骤:在您的插件的 GitHub 存储库中添加 post-receive hook。假设您的插件符合指南,将在插件网站上创建一个页面,以显示您的使用和下载信息。当您推送新版本时,我们将对其进行跟踪。

过渡期

我们认识到旧网站仍然是许多人,尤其是 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 Issues 来处理所有功能请求、错误和讨论。

虽然我们在设计 package.json 模式方面投入了大量精力,但它仍然是一个活生生的文档,如果您对它的设计有任何疑问或意见,请前往 此问题

勘误表

在一个理想的世界里,这件事肯定不会像现在这样发生。不幸的是,它确实发生了。我们希望您能接受我们对这种转变可能给您带来的麻烦、额外工作或仅仅是负面情绪的道歉。如果您能够原谅我们,请耐心等待,甚至可以伸出援手,我们相信我们将能够提供社区应得的现代化、有用的插件网站。

TL;DR

说了这么多,重点是:

  • 我们一直在计划更换最初的、充斥着垃圾邮件的插件网站,已经很长时间了。
  • 在删除垃圾邮件的过程中,所有插件都被删除了,我们没有最近的备份。
  • 我们没有再浪费时间让旧网站继续运行,而是决定彻底改变,并开始加快新网站的开发速度。
  • 新网站由 GitHub 和 插件的包清单 提供支持。
  • 旧网站的插件永远不会自动导入到新网站。
  • 代码库位于 github.com/jquery/plugins.jquery.com
  • 我们深感抱歉,但也非常兴奋!

关于“jQuery 插件网站发生了什么?”的 156 个想法

  1. Raymond Camden 说:

    感谢您坦诚的解释。我知道承认这一点很难。我认为新网站的计划听起来很棒。再次感谢您!

  2. Adam J. Sontag 说:

    对于那些想要它的人来说,如果我们能够实现 Ender 支持,而不是不得不重新发明 CLI 轮子,那将是件好事。

  3. Rodney Rehm 说:

    我已经在旧的插件页面上放置了几个插件,并且实际上也搜索过一些相同的内容——我只能祝贺您(以及我们)。从我目前读到的内容来看,我已经爱上了即将推出的插件系统。(是的,可能 Ender 兼容是一个好主意?!)

    这个“我不小心……数据库”的另一个好副作用是:所有那些没有维护的插件都消失了。终于。我宁愿读垃圾邮件也不愿筛选那些作者已经忘记的旧代码。

    所以,是的,谢谢您!

  4. Dave DeSandro 说:

    这听起来是一项非常伟大且雄心勃勃的工作,我必须赞扬 Sontag 先生和团队的其他成员,感谢他们承担了这项工作。把它直接整合到 GitHub 中是一个很棒的举动,做得好。一旦发布,我会很高兴添加我的插件。

  5. “更不幸的是,在我开始这个过程之前,我没有备份数据库。”

    坦率地说,这种错误是不应该容忍的。我并不是在说配置 Drupal 系统出错之类的事情;我是在说在执行批量操作之前,甚至没有备份重要系统,这是一种完全的疏忽。虽然从某种怪诞的角度来说,这是一个相当有趣的故事,但它也相当令人难过和可悲。他应该承担责任,从项目中退出。

  6. 作为最近目睹了垃圾邮件活动和脚本小子活动再次增加的人,我完全同意。情况变得如此糟糕,以至于我(和许多其他人一样)不得不收紧安全性,以至于真实的人很难通过检查。

    而且情况还在变得更糟。与此同时,机器人继续采用发布非广告(但垃圾信息)条目来混淆垃圾邮件拦截器的策略。更复杂的 SEO 黑客开始出现,他们会发布看起来正常的信息,但会将他们想要推送到 ICQ ID、图像 URL 和签名中的真实链接隐藏起来,他们知道这些链接将在每个新发布的资料下显示,并绕过安全检查,因为签名、用户资料和即时通讯 ID 没有被垃圾邮件过滤器检查。

    更不用说那些玩垃圾邮件过滤器的孩子,他们把绕过这些过滤器当作一种游戏。不幸的是,这些孩子玩游戏的时间远比开发者清理他们造成的混乱的时间要多。

    所以:综合起来,每天要处理大约 150 个垃圾邮件帖子甚至更多,最终你会别无选择,要么将检查收紧到超出你通常认为公平(或理智)的水平,要么彻底关闭网站。只是为了从与垃圾邮件的斗争中夺回宝贵的开发时间。

    创建新内容可以让机器人远离一段时间。我多次重命名、更改和更新脚本——但最终徒劳无功。故事的悲哀之处在于:它们还会回来。因为这里有利可图。不幸的是,机器人比真正的开发者更容易将他们的垃圾邮件重新发布到网上。

    作为一个小小的有趣插曲:本周最新(手工制作)的垃圾邮件是一个公司在为大规模发布垃圾邮件软件做广告。故事中最有趣的部分是:至少他们的软件从未通过垃圾邮件检查。因此,我确实推荐他们的产品给任何垃圾邮件发送者。
    干杯!

  7. Tim Branyen 说:

    没错,dfl,任何时候出现一个会导致代码库向后兼容性崩溃的错误,那个编码人员都应该退出。

    错误会发生,幸运的是,这个项目并不荒谬到无法容忍的地步。

  8. Eddie Monge 说:

    维护所有 jQuery 属性是一项艰巨的工作。有很多服务器,需要投入很多精力。很多*无偿*的努力,而大多数人却从未表示感谢。虽然我们采取了措施确保这类事情通常不会发生,但有时事情会发生。我个人感谢亚当为我们所做的一切努力。

  9. Dan Heberden 说:

    不过我应该指出,作为基础设施负责人,这是我的责任——所以如果有人应该为没有备份负责,那就是我。

  10. 多么美妙的*咳咳*“意外”!我数不清有多少次,我遇到过混乱的情况,我都很想“不小心”把它抹去……做得好!;-)

  11. 知道我不是唯一犯错的人真好。这让我对最近去印度旅行(没有签证)感觉好多了。

  12. 说“我们已经将仓库下线,因为有垃圾邮件”有点奇怪,事实上它被意外删除了……

    一个像这样知名的网站,处理大量用户生成的内容,至少一年没有备份数据库,这令人震惊。

    旧系统很糟糕,而且充斥着垃圾邮件,天知道还有什么问题……但相当一部分插件维护者将链接指向这里,作为他们代码贡献的主要来源,这些代码是完全正常的,没有受到你提到的问题的任何影响。
    因此,我发现以试图淡化重大管理失误为目的,指责旧仓库的缺点,有点不太妥当。

    无论如何——感谢你解释突然而极端的“垃圾邮件保护”……现在我可以停止挠头了。

  13. VanillaSkins 说:

    所有这些都让我很伤心,插件是我每天的必备。:(

    也许这里的回复者应该注意一下,不要再给博客发送垃圾邮件了 ffs。

    不确定 GitHub 与旧系统相比如何,但祝好。

  14. > 我认为 Ender.js 更适合于客户端库,并且与 package.json 兼容! http://ender.no.de/

    如果你使用 package.json 来管理这些插件,那么没有理由不推广 Ender。

    与其编写你自己的 package.json 说明,不如直接说它必须与 Ender 兼容。

  15. Jake McGraw 说:

    不要再提旧事了,但 5 年的插件在一瞬间消失,不好。简直糟糕透顶。你能将旧备份提供给后人吗?我相信新的 GitHub 会很棒,但你不能把一个可怕的错误简单地归结为一次机会。

  16. Jose Torres 说:

    我理解为什么你想使用 GitHub 作为 VCS 和分发系统。但是,即使你最近在 Drupal 上遇到了糟糕的体验,切换到 WordPress 似乎也是前进了一步,后退了两步。

  17. 哦,等等,左侧栏的链接最终还是可以工作的,只是它们首先显示一个重定向页面。

  18. jQuery 团队:好主意:联系 archive.org 团队,从他们那里获取丢失的“备份”: http://web.archive.org/web/20110717030551/http://plugins.jquery.com/

    我不认为应该责怪某一个人,因为整个项目都没有每天或每周自动备份的网站!!!!

    jQuery 团队是否使用没有每天备份和至少一周的备份存档的托管服务?说真的?这对你的托管服务商来说也是个糟糕的广告!

    筹集资金、捐款,并用这些资金支付或要求托管服务商赞助你进行备份托管。

    这是一个严重的问题,应该由负责的 jQuery 委员会处理和回答。这是一个关于对一个认真管理的项目信任的问题。

    ——牢骚结束——

    好吧,发生了,不能责怪一个无偿的志愿者,但嘿,jQuery 团队:从中吸取教训,现在你能否确认你们所有的网站都进行了每天备份,并每周进行存档(包括 SaS 托管的第三方网站内容)?

  19. 这可能是最好的结果。所有未维护的插件都消失了,垃圾邮件也消失了,为什么要抱怨?

    此外,GitHub 将作为一项额外的过滤器,用于过滤那些不应该编写插件的人(设置 git 比上传垃圾 zip 文件要困难得多)。

    这对你们来说是个好消息!

  20. 哦,亚当……只有少数人能做到这一点,而且只有更少的人会以这样的方式去做:’)

  21. 拜托。
    不要把你的网站迁移到 GitHub
    之前的网站帮助我找到了很多有用的插件。
    该网站很棒,比 GitHub 好得多。
    在 Google 上找到 jQuery 插件比在 GitHub 上容易。
    如果你从一个空数据库开始。
    不到三个月,你就会拥有超过 1,000 个插件,并且会删除所有没有更新的插件。

    仔细考虑一下……

  22. 太糟糕了……GitHub 对那些真正懂技术的人来说很好,但我不知道如何再下载插件了 :((((((((((((((((((((((((

  23. 伙计们,伙计们!等等……他只是说,一个新的插件网站正在开发中,源代码可以在 GitHub 上获得。新的网站将很快上线。并不是说你们必须在 GitHub 或其他地方寻找插件。

  24. …真是个糟糕的时刻,对吧?插件数据库,你完蛋了!旧的插件网站早就停止了实用性——我不后悔看到它消失。将它与 GitHub 连接起来更有意义,因为它将确保轻松跟踪更新,并且插件网站上的所有功能都将易于下载和使用。感谢你的辛勤工作!

  25. 你们会为没有使用 Git(Hub) 的用户提供相同的体验和支持吗?

    我已经在 BitBucket 上拥有付费帐户,并且实际上更喜欢 Mercurial 而不是 Git,因为它拥有更优越的工作流、客户端和操作系统/IDE 集成(至少在 Windows 上是如此)。所以我相信你明白我不会创建 GitHub 帐户(付费)并且体验很差。

    我真的很想看到一些报告网站作为对开发者公平的解决方案,让开发者选择最适合他们特定需求和偏好的提供商。将我们推向一家过度宣传的公司(至少对我来说)行不通。

  26. 你的个人网站被黑了吗,Adam?我通过一个抽奖网站被重定向,然后收到恶意软件警告。或者,那是另一个在波士顿编程的 Adam J. Sontag 吗?

  27. 在你的打包格式中,你可能想将链接到预览图像设为必填项。

    根据我在先前网站上的经验,在浏览插件时没有任何视觉反馈,这使得搜索更加困难。

    (当然,我明白许多插件无法通过静态图像充分解释其行为。)

  28. Joss Crowcroft 说:

    非常好,也很坦诚。这正是人们应该处理错误的方式!而且,这朵云有一层非常大的银色衬里。

  29. 我认为这可能是因祸得福。我从未使用过旧的插件网站。我经常遇到垃圾邮件和许多过时且未维护的插件(包括我自己写的)。我希望这个新的 GitHub 系统能运作良好。

  30. 我认为,如果下一个 jQuery 插件网站真正达到与 NodeJS 的 NPM 仓库搜索相同的实用性水平,那将非常棒。它是即时的、简洁的、有趣的。

  31. JustinKramp 说:

    “我说,我们起飞,从轨道上用核武器攻击这个网站。这是唯一确保万无一失的方法。”

    感谢你的坦诚,我自己也犯过类似的错误。这是你只会犯一次的错误。我会呼应这里许多人的观点,同意彻底炸毁整个网站并不是看起来那么灾难性的事件。一个新的开始,再加上一个有计划的方法,将对所有人都有益。

    Archive.org 以前救过我,现在可能也会有所帮助。我认为,即使只是为了帮助 jQuery 新手,恢复旧的、破损的网站也是明智之举。

  32. 狗血的事儿总是会发生的,哥们儿;)
    我们都会犯错。但你可以尝试从各种开发者那里获取一些最新的源代码。我可以想象,他们可能有一些源代码的副本^^