angular / angular-cn

Chinese localization of angular.io
MIT License
756 stars 426 forks source link

直接定位到文档页面时JS文件地址错误 #377

Closed hcfw007 closed 5 years ago

hcfw007 commented 5 years ago

注意:新版本文档位于aio分支下,master分支下是老版本的文档。

对于错别字或明显的语法错误,建议直接发 PR(在content目录下相应的文件上直接编辑,保存时就会自动变成PR)。

出错的URL: https://angular.cn/guide/file-structure (其实是除首页外任一页面。。。)

错误的内容(请拷贝进来一份精确的出错文本,以便我定位): 当通过URL直接访问此地址,或清除缓存后访问时,所有JS文件均报404错误,但如果从angular.cn导航至此页面则不会有此错误。 比较后发现两次请求的JS文件地址并不相同,以main.js为例,第一次访问时请求的是main.350869ca3d826a51bb62.js,而通过首页导航过来的js地址为main.8fe4b11b8a029aa3981b.js。而且导航过一次之后再直接访问,地址也变成main.8fe4b11b8a029aa3981b.js了,真是黑科技。。。

直接在地址栏访问404的js文件出现Resource Not Found页面(顺便一提,此页面未汉化),因此应该不是被墙了或者防火墙之类的原因。查看英文文档页面并没有这种情况发生。

建议的修改方式(可选): 完全想不到原因,如果大佬知道请指教...

英雄留名(会出现在鸣谢清单中,默认使用你的github id):

EchoChan314 commented 5 years ago

问题复现。两个月前就出现这种情况了,当时也没去注意。

asnowwolf commented 5 years ago

谢谢反馈,我也在隐身模式下重现了此问题,这两天我查一下。

asnowwolf commented 5 years ago

看来还是个比较复杂的问题,我先回滚到了上一个正确的版本,主要是 revert 了一些文字细修,影响不大,等后面再慢慢查。

asnowwolf commented 5 years ago

解决了,请验证。

问题的根源在于我自行实现的 prerender 功能。文档站使用的是 GitHub pages,因此无法运行 SSR 服务器,而 Prerender 是 SSR 的一个静态版,也就是说我提前把 SSR 的结果保存成相应名字的 HTML 文件,这样当浏览器请求这个地址时,不再是 try_files 逻辑,而是能直接拿到这个预先渲染好的结果。

但是,由于文档站无法直接支持 Universal,因此我采用了另一种方式来进行 SSR:用 yarn start 把文档站跑起来,然后使用一个名叫 Prerender 的第三方库进行预先渲染,但是我这里出了一个 bug:我构建使用的是 yarn build,而 Prerender 时使用的是 yarn start,它们所使用的构建参数不一样,因此所生成的文件名中的 cache-busting hash 也不一样。所以,当访问 yarn start 生成的页面时,它所引用的文件在 yarn build 的结果中不存在,就出现了问题中所说的现象。

我在 https://github.com/angular/angular-cn/commit/54c67e629446c1fcb9ce41eacaf5c3c6710d466b#diff-9daaa6de808d2b6d7f76feb6d49041cdL15 这个提交中把 yarn start 改成了使用 http-server-spa 直接启动 yarn build 的结果(即 dist 目录),然后对其进行 prerender,就可以保证两者的一致性了。

另外,我在 https://github.com/angular/angular-cn/commit/54c67e629446c1fcb9ce41eacaf5c3c6710d466bhttps://github.com/angular/angular-cn/commit/a4fc5f8e37262ef4f4a029a3391621db151656f7 这两个提交中,把 Prerender 库换成了 puppeteer,可以更加轻量地进行预先渲染。

asnowwolf commented 5 years ago

请 @hcfw007 @czmecho 两位到 https://preview.angular.live 验证一下,以便关闭 issue。多谢!

hcfw007 commented 5 years ago

我这里验证没有发现问题,因此关闭。