模板为什么是复制过去的,而不是安装上去的

对这个产品最常见的质疑:为什么不做成一条命令就能更新的 npm 包。答案比「这样更简单」要长一些。

用 Outrender 搭站,第一步是复制一个文件夹。不是安装依赖,也不是让某个生成器从仓库里拉当前版本 —— 就是一次普通的 rsync。从那一刻起,这个副本过自己的日子,和模板之间没有任何连接。

在工程师看来,这像是往回退了十五年。下面说说,为什么对一个营销型网站来说,这是往旁边挪了一步,而不是往回退。

依赖买到的是什么

一次更新同时到达所有项目。这是实打实的好处,而且在项目还活着的时候是划算的:每周都会打开、有测试覆盖、出问题一小时内就有人发现。

营销型网站不是这样的。它搭好、交付,然后半年没人打开。它没有测试,将来也不会有 —— 这里的验收是看出来的。而且也没有人处在能发现问题的位置上:一次小版本更新把某个板块挪了三百像素,客户不看自己的网站,就算看了,也要一周后才写信过来。

线上网站上的一次自动升级,是一次没人读过、也没人发现的改动。

副本买到的是什么

在有人动它之前,网站不会变。就这一条性质,其余几乎所有事情都是从这里长出来的。

一处修复从一个项目走到另一个项目,中间要经过一个把两边都看过的人。同一个模板出来的两个网站会分岔,而这是设计如此:一个有四种语言和一个博客,另一个只有一页和一个表单,共同的祖先对它们的用处是「起点」,不是「主人」。

买家拿到的是文件,不是访问权。不需要续订阅,网站才继续构建得起来;也不需要请示谁,才能重写某个板块。

代价是什么

修复不会自己扩散。在模板里发现一个缺陷,就得手工把它带进每一个有这个缺陷的网站。这是工作量,产品也不假装不是:它专门提供了一个模式 —— 体检 —— 它会读出网站是从哪个版本搭的,把比那个版本新的每一条更新日志都走一遍,逐条应用,逐条汇报。

那个模式手册的第一行就是它的第一条规矩:绝不要把模板覆盖到一个线上网站上。复制不是升级,是加了几个步骤的删除。

所以要选的不是「更新」还是「不更新」。要选的是:一次凌晨三点自己发生的更新,和一次有人执行、有人负责的更新。

02继续读

博客里的更多内容

两篇,不会更多。 更长的一条会把文章结尾变成第二个目录页,而读者已经选过一次了。