在内网/本机部署自己的 MDN 静态站

1,048 阅读4分钟

前言

最近笔者换了份工作,需要在内网进行开发,没法连接外网查资料。

为了提高开发效率,就需要在内网准备一系列开发所需要的文档。

作为一个前端,其中一个很重要的网站就是 MDN 了。可是网上并没有相关的资料,指导我如何获得离线版。只查到可以订阅 MDN PLUS 可以离线缓存,但是这个收费的东西显然无法满足我的要求。

于是花费了好几个晚上,尝试了几种方案,终于成功地找到了一个比较满意的方案(方案三)。

方案一:爬整站

我最先想到的是爬整站,用了这个库 node-site-downloader

爬了很久才爬到 CSS。而且后面尝试就爬不动了,爬虫本来也是比较敏感的操作,不知道是不是 ip 被限流了。

而且,爬下来的质量也不是很好。不能很好地融合整个网站。

方案二:github 下载 MDN 源码运行 yarn start

MDN 很贴心地开源了所有的内容,地址如下:

github.com/mdn/content

按照它的 README.md 的说明,先运行 yarn 安装所需要的依赖包

然后,运行 yarn start 命令,就可以启动一个服务:http://localhost:5042 (默认端口 5042)。

似乎可以了。但是有几个问题:

  • 现在是没有中文版地
  • 它目前是动态编译,访问时才编译,速度比较地慢
  • 我不想在内网服务器上部署这么一大个服务,毕竟依赖包、yarn 什么的内网处理起来都很麻烦

我又接着研究了好久,目前找到了第三种方案:

方案三:加入中文包、build、再融合内置的静态资源

省略中间的各种试错,直接说方法:

第一步:整合中文

各种语言包在这个仓库里:

github.com/mdn/transla…

进入到 tree/main/files 这个文件夹下面,吧 zh-cn 这个文件夹,拷贝到 content 项目的 files 文件夹下。

第二步:content 项目中 build

运行 yarn build 得到一个 build 文件夹。

其实这里面就是我们所需要的内容了,但是直接进去打开各种 html,发现它写死了 script 和 style 等静态资源的路径。

我并没有发现任何命令可以为这个 build 文件夹的 html 们提供所需要的静态资源。

不过,别着急,接着往下看:

第三步:整合 build 和静态资源文件夹

我们随便查找一个 html 里的静态资源文件名,发现它在这个位置:

content 项目中:node_modules/@mdn/yari/client/build

我们把这个 build 复制出来,可以给他改个名字叫 mdn,避免和我们上面那个 build 文件夹弄混淆了。

可以看到其实里面有 index.html 文件,它就是我们这个文档的入口 html。

也有一个文件夹叫 en-us,我们之前 yarn build 出来的文件夹下正好也有一个文件夹叫 en-us,他们应该是平级的。

所以我们把 build 里面的几个文件夹,拷贝到我们的 mdn 文件夹中。

第四步:配置静态资源服务器

把这个 mdn 文件夹可以入导入内网。好家伙,两个多 G!

然后用 nginx 或者 http-server 提供静态服务,注意要设置:

  • mdn 这个文件夹是这个服务的根路径,不要加任何前缀
  • 注意是否开启了自动解析路径下的 index.html

使用注意事项

接下来,断开网络,打开我的静态服务: http://localhost:8080 (访问路径根据你具体设置而定)。

熟悉的页面出现!值得注意的点:

  • 根目录最开始是英文的,你可以进入一个详情页,然后切换到中文。之后 MDN 会将你的这个偏好储存在 cookies 里,你后面跳转和打开的就是中文的页面了。
  • 虽然只是一个静态站点,但是右上角的全局搜索功能是可以正常使用的哦

接下来,让我们静静地学习本机/内网超快网速的 MDN 文档吧!