先占个坑,因为这类问题我也正在研究中,还没有最终的结论。如果关心的人多的话,稍后我会把最新的研究成果在这里分享
就目前的实践经验来说有以下几点体悟
1、vue下的组件冲突最常见的是css样式冲突,但不只如此,如果你引入了两个不同源的组件/组件库,如果他们的组件名称正好有相同的命名可能会存在难以解决的冲突。即后引入的组件将被丢弃
2、css样式冲突在自我管理的代码下可以比较好的解决,毕竟单文件组件中的样式可以设置为组件空间私有(即vue会为这个组件私有的Css类加上特定的前缀来避免与其它全局css干扰)。但是,你引用的第三方组件会引发一些问题。比如很多组件为了样式替换方便,在你使用前需要让你直接引入.css文件,这个是全局的,容易产生冲突。另一个方向,对第三方组件中个别样式的个性化设置,组件往往提供的解决方案是在属性中告诉它使用哪个css类名,组件会贴心的把类名加到特定子dom上去——你肯定能发现,这个css类应该是全局的而不能限制作用域。更槽一点的第三方组件,你就只能通过浏览器调试去对固定类名进行覆盖改写——结果就是更难规避名称冲突。在引用量比较大的时候你就会碰到这种问题——就象癌症一样,你不一定会撞上,但如果撞上就变得很麻烦和棘手
3、组件名称冲突。组件名称冲突是非常容易解决的,因为你可以把引用的组件作为局部组件,在components中声明为其它你喜欢的名称。但是我目前也碰到了难搞的案例。有两个很好的家伙,一个是vuetify,一个是一种非常NB的日历+日期选择组件——V-Calendar,两者都是非常棒(棒到将来必然要经常同时使用),但它们使用了相同的组件名称“VDatePicker”。结果以我制作“vue资源精选”网站并引用过上百个第三方组件/组件库的经验,我还真没能把V-Calendar中的VDatePicker组件单独提取出来作为局部组件。大家都知道一个插件在install中是可以有自己的逻辑的,它可能做了一些事情,导致import单独的组件出来并不能使用。我还尝试了一些vue文档中没写,但看到其它组件源码中写了并有用的vue.use的调用方案,例如Vue.component('aaa', bbb),也同样没有成功。(怎么说我也算经验丰富,所以我还在研究探索中,并不准备放弃)