javascript - 为什么 HTML 属性在 DOM 中设置不同?
问题描述
经过几个小时的挖掘,我们决定提出一个关于 SO 的问题,希望其他人可以帮助解决以下问题。
- 对于我们的一个 Web 应用程序,我们使用了Onsen UI js 框架及其React 支持库
- 当我们尝试在我们的开发环境中渲染应用程序时,一切似乎都可以正常工作,但是当我们在我们的暂存环境中尝试它时,一些组件的行为会有所不同
到目前为止我们发现:似乎在我们的暂存环境中,一些 HTML 属性在 DOM 中的设置不同:
|----------------|---------------|--------------| | HTML attribute | DEV ENV | STAGING ENV | |----------------|---------------|--------------| | fixed-content | fixed-content | fixedcontent | |----------------|---------------|--------------| | active-index | active-index | index | |----------------|---------------|--------------|
因此,Onsen 框架无法找到 HTML 元素上的属性并且行为不同,无论:
- 我们使用相同的浏览器(使用 Chrome、Edge、Firefox 检查)
- 我们在两个环境中加载了相同的 JS 代码
envs之间有什么区别:
- JS 文件本地存储在我们的开发机器和 S3 上,用于我们的暂存环境。
- 我们在暂存环境中使用加密连接
- Accept-Encoding 标头
gzip, deflate
在本地和gzip, deflate, br
暂存 - 也许还有其他要寻找的东西?
有人知道这里到底发生了什么吗?
解决方案
我们实际上发现了问题并且解决方案非常简单,尽管我们花了几个小时才找到它。
在我们的暂存/生产环境中,我们使用 babel 插件transform-react-remove-prop-types
来剥离 React 属性类型。
不幸的是,Onsen UI React 支持库依赖于其组件定义的 prop 类型,因此当它们被剥离时,库开始表现不同。
我们做了什么:
- 我们将 babel 插件更新为版本
0.3.3
,以便能够使用该ignoreFilenames
选项 我们跳过了保存 Onsen UI React 库代码的文件
if (cli.production) { config.babel.plugins.push([ 'transform-react-remove-prop-types', { ignoreFilenames: ['projectleader'] } ]); }
推荐阅读
- php - 如何根据 laravel 复选框值更新数据库
- arduino - 可以用 Node-red 和 Arduino 草图一起控制 Arduino 吗?
- python - Python 如何为列表中的每个项目创建集合?
- windows - 设置 Windows 资源管理器的视图默认布局
- c# - .NET 异步/等待,是否收集了变量垃圾?
- ssl-certificate - 免费和付费 SSL 证书握手之间的技术区别是什么?
- mysql - mysql sum(column) 从动态表中仅获取一行的值
- mysql - cast 属性用于外键查询而不是原生类型
- javascript - react-native 应用程序中的 Amazon Lex 应查询 SQL 数据库并回答用户问题
- git - 有没有办法更改 github 上已提交内容的电子邮件 ID?