看过很多 vue 项目的代码, 发现很多人喜欢把样式写在组件了, 其原因大部分是为了方便, 好维护, 也很多人喜欢滥用scoped属性, 官方的 vue-hackernews-2.0 的实例也是这么做的, 但是个人却不太喜欢这么做, 原因有以下几点:

1. 构建速度会变慢

写在组件的 style 里的样式会先经过vue-loader再走less-loader或者css-loader, 无形中增加了编译时间

2. 在用了 scope 属性后, 生成的 js 文件和 css 文件都会正常臃肿一些

scope 属性, 其实就是在经过vue-loader编译的时候, 组件模版的对应元素和 css 样式添加一个随机的属性, 这样会造成在代码中添加大量类似data-v-33053b70这样的代码上去, 无形中使打包后的文件变大, 组件越多, 越明显

3. scope 属性, 对当前组件不存在的元素不起作用

原因同上条, 这种情况在用了组件库的情况下, 但是需要修改组件库组件样式时, 会经常遇到

4. 在用了 scope 属性后, css 解析效率会变低

css 中, 属性选择器的效率是最低的, 特别是直接用元素选择器的情况下

个人的解决方法:

样式统一管理, 绝对不将样式写的到处都是

如上面截图中, style.less 文件是入口文件, 负责引入其他各个子样式文件, 最后由 App.vue 根组件引入, home 文件夹下所有以下划线开头的文件为各个组件的样式,
如一些 less 配置, 可以放在 _base.less 文件里, 布局样式可以放在 _layout.less 文件里, 其他的一个路由组件一个文件, 再配合现在编辑的分屏功能, 也是一样可以很快定位到相关文件, 甚至一些编辑器, 可以直接从模版中跳到对应的样式文件

其实上面都是废话, 个人就是单纯不想把样式写在组件里而已, 如果你觉得这个方法不错, 可以借鉴改进, 如果你还是觉得写在组件里好, 也可以继续写在组件里

发表评论
Eliaztray
编译慢的话影响没那么大,我觉得重要的还是文件的臃肿,如果在组件中不用scoped的话应该抽取出来是一样的大小.少了postcss处理过的data-v-xxx节点. 然后至于不在不存在的元素生效(一般是v-html渲染字符串模板时),可以使用 deep选择器. (.a >>> .b),不过兼容在ios上是不兼容的.