前言
最近笔者换了份工作,需要在内网进行开发,没法连接外网查资料。
为了提高开发效率,就需要在内网准备一系列开发所需要的文档。
作为一个前端,其中一个很重要的网站就是 MDN 了。可是网上并没有相关的资料,指导我如何获得离线版。只查到可以订阅 MDN PLUS 可以离线缓存,但是这个收费的东西显然无法满足我的要求。
于是花费了好几个晚上,尝试了几种方案,终于成功地找到了一个比较满意的方案(方案三)。
方案一:爬整站
我最先想到的是爬整站,用了这个库 node-site-downloader
。
爬了很久才爬到 CSS。而且后面尝试就爬不动了,爬虫本来也是比较敏感的操作,不知道是不是 ip 被限流了。
而且,爬下来的质量也不是很好。不能很好地融合整个网站。
方案二:github 下载 MDN 源码运行 yarn start
MDN 很贴心地开源了所有的内容,地址如下:
按照它的 README.md 的说明,先运行 yarn
安装所需要的依赖包
然后,运行 yarn start
命令,就可以启动一个服务:http://localhost:5042 (默认端口 5042)。
似乎可以了。但是有几个问题:
- 现在是没有中文版地
- 它目前是动态编译,访问时才编译,速度比较地慢
- 我不想在内网服务器上部署这么一大个服务,毕竟依赖包、yarn 什么的内网处理起来都很麻烦
我又接着研究了好久,目前找到了第三种方案:
方案三:加入中文包、build、再融合内置的静态资源
省略中间的各种试错,直接说方法:
第一步:整合中文
各种语言包在这个仓库里:
进入到 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 文档吧!