惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
D
DataBreaches.Net
F
Fortinet All Blogs
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
M
MIT News - Artificial intelligence
美团技术团队
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Cloudflare Blog
有赞技术团队
有赞技术团队
L
LangChain Blog
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
S
SegmentFault 最新的问题
V
Visual Studio Blog
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
B
Blog
I
InfoQ

愆伏

vue feedback 指令开发 NPM 撤回已发布的版本 昆虫有趋光性吗 数组转成字符串(css 属性) 关于grid布局的一些思考 阿里云和腾讯云网站字体族对比 Vue组件抛事件和Function prop的差别 Vue 事件参数传递 Vue Data里面下划线命名无效并报错 使用sublime中的正则处理数据格式 通过nodejs创建目录与文件 macOS 下npm run dev 无法局域网访问 mac 下使用ssh访问非22端口的gitlab 世界是平的,在科学上网之后 使用sublime text3和Markdown来写博客 如果非要给一个标题,那就是2014年非工作总结 不专业呢,就别捣乱 对知乎大号怒撤事件的一点看法 拒绝SB思维 嘀嘀与快的的商业博弈 关于收藏夹功能的思考 你居然都不用微信 一个英语培训机构的外呼电话 智商是硬伤就无解了 扁鹊三兄弟 竖子不足与谋 美丽说、蘑菇街今天一定开了好几个小时的会 个人独立博客会死掉吗? iPad作画 google reader即将关闭,谁来候补?
通过webpack对css压缩后所引起的重名问题
tortorse · 2018-05-16 · via 愆伏

起因

我们维护了两个组件库,一套用于PC,另一套用于Mobile。有一个使用方同时引入了这两个库,这时候突然发现了一个诡异的现象:

一个tag组件凭空旋转起来,事实上没有给这个tag添加任何动画效果

发现

直接从页面表现来看,很难发现问题所在。我们进行了以下步骤进行排查

  1. 通过chrome的animate面板,看执行的是什么动画。发现其动画名为a
  2. 通过vue控制台/源码,发现其使用了vuetransition组件,并且其transition使用了PC组件库提供的fade动画。

分析

为什么fade动画会变成了旋转?我们在编译的css文件中寻找tanslate@keyframes关键词,发现

1
2
3
@keyframes a {
translate:rotate(1turn)
}
1
2
3
4
5
6
7
8
@keyframes a {
0% {
opacity:0;
}
100% {
opacity:1;
}
}

有2个名为a的动画,那么问题就清楚了,是两个动画冲突了。但是怎么会都叫a的呢。我们不太可能这么随意的起名。源码中也没有找到名为a的动画。那么有一种可能,就是在打包的时候被改名了。

找到Vue本身提供的webpack.prod.conf.js,发现里面是这样的:

1
2
3
4
5
new OptimizeCSSPlugin({
cssProcessorOptions: config.build.productionSourceMap
? { safe: true, map: { inline: false } }
: { safe: true }
})

而我们用来发布包的webpack.pack.conf.js里面是这样的:

1
new OptimizeCSSPlugin()

说明pack脚本是按照最大压缩方式进行压缩的,会对css进行改名,如果两个库都采用同样的方式进行压缩,自然会产生命名冲突。vue官方的配置很明显考虑到了这一点,所以直接采用了避免冲突的「安全」模式。

解决

css压缩模式换为safe并重新打包,问题解决。