需求场景:
现在大部分M站的页面布局都是通过 flexible 的方案解决,flexible.js 里面提供了 px2rem 的函数方法,有些页面需要 js 中动态转换 px 为 rem 给元素设置样式,这时候就有两种方案:
- 自己写一个函数方法,
- 使用 flexible 提供的 px2rem;
本着图省事的方案,采用直接找 flexible 的方法。但是竟然在 window 下没找到。
问题排查过程:
-
第一步,在 index.ejs 中找到了 flexible 的初始化代码,并且把 flexible 挂在了 window.lib 下,
-
第二步,但是页面初始化完成之后,打印 winlow.lib,得到的却是以下结果:
-
第三步,思考,应该是 window.lib 被某一步复写了。找到了罪魁祸首:public/lib/debug/lib.js 中,var lib, 直接把 lib 挂在到了 window,lib 被复写!
-
window.lib 被调用的地方:最后会被 webpack 以 script src 的方式引入到页面中
解决方案:
- 修改 public/lib/debug/lib.js(开发环境)和 public/lib/min/lib.b545ebd6b.js (生产环境)的 var 为 let;亲测可行,风险小(但是不保证无风险);
- 修改 flexible 初始化挂载的时候不挂载在 window.lib,修改为 window.H5fit,如下图示:(应该无风险,但是不保证)
- flexible 初始化挂载的时候再增加一个window对象的赋值,无风险(冗余代码,让新人摸不着头脑):
结论:
个人建议第二种,并且希望在后续的模板规划中规避这个问题。