<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Csso on 毛毛星 Felix Mao - AI 创作者、前端工程师与独立开发者</title><link>https://maoxunxing.com/zh-cn/tags/csso/</link><description>Recent content in Csso on 毛毛星 Felix Mao - AI 创作者、前端工程师与独立开发者</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 30 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://maoxunxing.com/zh-cn/tags/csso/index.xml" rel="self" type="application/rss+xml"/><item><title>csso 报错 "Selector can't has classes from different scopes" 怎么修</title><link>https://maoxunxing.com/zh-cn/csso-selector-scopes-error/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><guid>https://maoxunxing.com/zh-cn/csso-selector-scopes-error/</guid><description>&lt;p>webpack 打包时，CSS 压缩阶段挂了：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>Selector can&lt;span style="color:#f6f8fa;background-color:#82071e">&amp;#39;&lt;/span>t has classes from different scopes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="真正原因">真正原因&lt;/h2>
&lt;p>这个报错来自 &lt;a href="https://github.com/css/csso">csso&lt;/a>（CSS 压缩工具）。它只会在一种情况下出现：&lt;strong>构建时给 csso 传了带 &lt;code>scopes&lt;/code> 的 usage 数据&lt;/strong>——一般是通过 &lt;code>css-minimizer-webpack-plugin&lt;/code>（用 csso 做 minifier）或 &lt;code>csso-webpack-plugin&lt;/code> 传进去的。&lt;/p>
&lt;p>scopes 是 csso 为 CSS Modules 这类&amp;quot;作用域隔离&amp;quot;方案准备的优化手段：你告诉 csso 哪些类名属于同一个 scope（即它们永远不会出现在同一份 markup 上），csso 就能更大胆地合并 ruleset。根据 &lt;a href="https://github.com/css/csso#scopes">csso 官方文档&lt;/a>，这个异常只在两种情况下抛出：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>同一个类名被写进了多个 scope；&lt;/strong>&lt;/li>
&lt;li>&lt;strong>一个选择器里混用了来自不同 scope 的类。&lt;/strong>&lt;/li>
&lt;/ol>
&lt;p>没写进任何 scope 的类名默认属于 default scope，不会报错。&lt;/p>
&lt;h2 id="怎么修">怎么修&lt;/h2>
&lt;p>先找到构建配置里给 csso 传 &lt;code>usage&lt;/code> / &lt;code>scopes&lt;/code> 的地方，例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">// webpack.config.js
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#57606a">&lt;/span>&lt;span style="color:#cf222e">new&lt;/span> &lt;span style="color:#1f2328">CssMinimizerPlugin&lt;/span>&lt;span style="color:#1f2328">({&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">minify&lt;/span>&lt;span style="color:#0550ae">:&lt;/span> &lt;span style="color:#1f2328">CssMinimizerPlugin&lt;/span>&lt;span style="color:#1f2328">.&lt;/span>&lt;span style="color:#1f2328">cssoMinify&lt;/span>&lt;span style="color:#1f2328">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">minimizerOptions&lt;/span>&lt;span style="color:#0550ae">:&lt;/span> &lt;span style="color:#1f2328">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">usage&lt;/span>&lt;span style="color:#0550ae">:&lt;/span> &lt;span style="color:#1f2328">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">scopes&lt;/span>&lt;span style="color:#0550ae">:&lt;/span> &lt;span style="color:#1f2328">[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;header-title&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#0a3069">&amp;#34;header-nav&amp;#34;&lt;/span>&lt;span style="color:#1f2328">],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">[&lt;/span>&lt;span style="color:#0a3069">&amp;#34;card-title&amp;#34;&lt;/span>&lt;span style="color:#1f2328">,&lt;/span> &lt;span style="color:#0a3069">&amp;#34;card-body&amp;#34;&lt;/span>&lt;span style="color:#1f2328">],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">},&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#1f2328">},&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#1f2328">})&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后对着上面两种情况排查：&lt;/p></description></item></channel></rss>