Vue中import 引入样式文件污染问题

一般情况下,我们引入外部样式文件的方法都采用以下这种:

<style scoped lang="less">
@import './style.less';
</style>

在做公司项目的时候,全部都是按照这种方式引入的。今天运维找到我,说生产上发现某模块样式部分错乱,检查之后发现样式文件指向另一个模块,这就奇怪了,通常开发都会加scoped,不会去引入其他模块的样式,再看一眼,发现引入的是一个全局样式,也就是说本模块的样式被全局样式覆盖了。查阅了一番资料,再此做下总结:

多个组件公用一套样式的时候,通常我们会将其抽取出来,以这种方式引入,

<style scoped lang="less">
@import './style.less';
</style>

这样的引入方式就会造成全局污染,即使你写了scoped。因为:
@import并不是直接将目标文件的代码引入到使用的文件中来,而是发起了一个新的请求,获得相应资源,这个时候并没有加私有限制scoped,因此这种方式引入的文件将作用于全局。
解决办法:

<style src="./style.less"  scoped></style>

以style标签进行引入,并添加scoped,这样就不会产生样式污染。

Logo

前往低代码交流专区

更多推荐