Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: [postcss-merge-rules] Why the code in the example cannot be compressed #1598

Open
QiuShuiBai opened this issue Apr 19, 2024 · 4 comments

Comments

@QiuShuiBai
Copy link

Describe the bug

bug demo

Why didn't cssnano merge the class name "a" ?

write

.a { width: 100px; }
.b { width: 10px; }
.a { height: 200px; }

output

.a{width:100px}.b{width:10px}.a{height:200px}

But when I replace the writing order, cssnano can successfully merge

wtite

.a { width: 100px; }
.a { height: 200px; }
.b { width: 10px; }

output

.a{height:200px;width:100px}.b{width:10px}

Expected behaviour

expect to see

.a{height:200px;width:100px}.b{width:10px}

Steps to reproduce

use cssnano playground

bug demo

Version

6.1.2

Preset

default

Environment

System:
    OS: macOS 12.0.1
    CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
    Memory: 26.08 MB / 16.00 GB
    Shell: 5.8 - /bin/zsh

Package details

@didi/mpx-cube-ui@1.0.24 /Users/didi/zc-self/mpx-cube-ui
├─┬ @didi/vue-cli-plugin-mpx-theme@1.0.2
│ └─┬ postcss-css-variables@0.17.0
│   └── postcss@6.0.23
├─┬ @mpxjs/miniprogram-simulate@1.4.17
│ └── postcss@7.0.39
├─┬ @mpxjs/webpack-plugin@2.7.53
│ ├─┬ cssnano@5.1.15
│ │ ├─┬ cssnano-preset-default@5.2.14
│ │ │ ├─┬ css-declaration-sorter@6.4.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ cssnano-utils@3.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-calc@8.2.4
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-colormin@5.3.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-convert-values@5.1.3
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-discard-comments@5.1.2
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-discard-duplicates@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-discard-empty@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-discard-overridden@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-merge-longhand@5.1.7
│ │ │ │ ├── postcss@8.4.38 deduped
│ │ │ │ └─┬ stylehacks@5.1.1
│ │ │ │   └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-merge-rules@5.1.4
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-minify-font-values@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-minify-gradients@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-minify-params@5.1.4
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-minify-selectors@5.2.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-charset@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-display-values@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-positions@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-repeat-style@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-string@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-timing-functions@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-unicode@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-url@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-whitespace@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-ordered-values@5.1.3
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-reduce-initial@5.1.2
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-reduce-transforms@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-svgo@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-unique-selectors@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ └── postcss@8.4.38 deduped
│ │ └── postcss@8.4.38 deduped
│ ├─┬ icss-utils@2.1.0
│ │ └── postcss@6.0.23
│ ├─┬ postcss-load-config@3.1.4
│ │ └── postcss@8.4.38 deduped
│ ├─┬ postcss-modules-extract-imports@3.0.0
│ │ └── postcss@8.4.38 deduped
│ ├─┬ postcss-modules-local-by-default@4.0.0
│ │ ├─┬ icss-utils@5.1.0
│ │ │ └── postcss@8.4.38 deduped
│ │ └── postcss@8.4.38 deduped
│ ├─┬ postcss-modules-scope@3.0.0
│ │ └── postcss@8.4.38 deduped
│ ├─┬ postcss-modules-values@4.0.0
│ │ └── postcss@8.4.38 deduped
│ └── postcss@8.4.38 deduped
├─┬ @vue/cli-service@5.0.8
│ ├─┬ @vue/component-compiler-utils@3.3.0
│ │ └── postcss@7.0.39
│ ├─┬ autoprefixer@10.4.13
│ │ └── postcss@8.4.38 deduped
│ ├─┬ css-loader@6.7.1
│ │ └── postcss@8.4.38 deduped
│ ├─┬ css-minimizer-webpack-plugin@3.4.1
│ │ ├─┬ cssnano@5.1.15
│ │ │ ├─┬ cssnano-preset-default@5.2.14
│ │ │ │ ├─┬ css-declaration-sorter@6.4.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ cssnano-utils@3.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-calc@8.2.4
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-colormin@5.3.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-convert-values@5.1.3
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-discard-comments@5.1.2
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-discard-duplicates@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-discard-empty@5.1.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-discard-overridden@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-merge-longhand@5.1.7
│ │ │ │ │ ├── postcss@8.4.38 deduped
│ │ │ │ │ └─┬ stylehacks@5.1.1
│ │ │ │ │   └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-merge-rules@5.1.4
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-minify-font-values@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-minify-gradients@5.1.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-minify-params@5.1.4
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-minify-selectors@5.2.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-normalize-charset@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-normalize-display-values@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-normalize-positions@5.1.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-normalize-repeat-style@5.1.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-normalize-string@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-normalize-timing-functions@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-normalize-unicode@5.1.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-normalize-url@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-normalize-whitespace@5.1.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-ordered-values@5.1.3
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-reduce-initial@5.1.2
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-reduce-transforms@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-svgo@5.1.0
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ ├─┬ postcss-unique-selectors@5.1.1
│ │ │ │ │ └── postcss@8.4.38 deduped
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ └── postcss@8.4.38 deduped
│ │ └── postcss@8.4.38 deduped
│ ├─┬ cssnano@5.1.15
│ │ ├─┬ cssnano-preset-default@5.2.14
│ │ │ ├─┬ css-declaration-sorter@6.4.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ cssnano-utils@3.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-calc@8.2.4
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-colormin@5.3.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-convert-values@5.1.3
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-discard-comments@5.1.2
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-discard-duplicates@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-discard-empty@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-discard-overridden@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-merge-longhand@5.1.7
│ │ │ │ ├── postcss@8.4.38 deduped
│ │ │ │ └─┬ stylehacks@5.1.1
│ │ │ │   └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-merge-rules@5.1.4
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-minify-font-values@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-minify-gradients@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-minify-params@5.1.4
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-minify-selectors@5.2.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-charset@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-display-values@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-positions@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-repeat-style@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-string@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-timing-functions@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-unicode@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-url@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-normalize-whitespace@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-ordered-values@5.1.3
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-reduce-initial@5.1.2
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-reduce-transforms@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-svgo@5.1.0
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ ├─┬ postcss-unique-selectors@5.1.1
│ │ │ │ └── postcss@8.4.38 deduped
│ │ │ └── postcss@8.4.38 deduped
│ │ └── postcss@8.4.38 deduped
│ ├─┬ postcss-loader@6.2.1
│ │ └── postcss@8.4.38 deduped
│ └── postcss@8.4.38 deduped
├─┬ css-loader@0.28.11
│ ├─┬ cssnano@3.10.0
│ │ ├─┬ autoprefixer@6.7.7
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-calc@5.3.1
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-colormin@2.2.2
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-convert-values@2.6.1
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-discard-comments@2.0.4
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-discard-duplicates@2.1.0
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-discard-empty@2.1.0
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-discard-overridden@0.1.1
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-discard-unused@2.2.3
│ │ │ └── postcss@5.2.18
│ │ ├─┬ postcss-filter-plugins@2.0.3
│ │ │ └── postcss@5.2.18
│ │ ├─┬ postcss-merge-idents@2.1.7
│ │ │ └── postcss@5.2.18
│ │ ├─┬ postcss-merge-longhand@2.0.2
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-merge-rules@2.1.2
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-minify-font-values@1.0.5
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-minify-gradients@1.0.5
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-minify-params@1.2.2
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-minify-selectors@2.1.1
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-normalize-charset@1.1.1
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-normalize-url@3.0.8
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-ordered-values@2.2.3
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-reduce-idents@2.4.0
│ │ │ └── postcss@5.2.18
│ │ ├─┬ postcss-reduce-initial@1.0.1
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-reduce-transforms@1.0.4
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-svgo@2.1.6
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-unique-selectors@2.0.2
│ │ │ └── postcss@5.2.18 deduped
│ │ ├─┬ postcss-zindex@2.2.0
│ │ │ └── postcss@5.2.18
│ │ └── postcss@5.2.18 deduped
│ ├─┬ icss-utils@2.1.0
│ │ └── postcss@6.0.23
│ ├─┬ postcss-modules-extract-imports@1.2.1
│ │ └── postcss@6.0.23
│ ├─┬ postcss-modules-local-by-default@1.2.0
│ │ └── postcss@6.0.23
│ ├─┬ postcss-modules-scope@1.1.0
│ │ └── postcss@6.0.23
│ ├─┬ postcss-modules-values@1.3.0
│ │ └── postcss@6.0.23
│ └── postcss@5.2.18
├─┬ cssnano@6.1.2
│ ├─┬ cssnano-preset-default@6.1.2
│ │ ├─┬ css-declaration-sorter@7.2.0
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ cssnano-utils@4.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-calc@9.0.1
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-colormin@6.1.0
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-convert-values@6.1.0
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-discard-comments@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-discard-duplicates@6.0.3
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-discard-empty@6.0.3
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-discard-overridden@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-merge-longhand@6.0.5
│ │ │ ├── postcss@8.4.38 deduped
│ │ │ └─┬ stylehacks@6.1.1
│ │ │   └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-merge-rules@6.1.1
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-minify-font-values@6.1.0
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-minify-gradients@6.0.3
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-minify-params@6.1.0
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-minify-selectors@6.0.4
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-normalize-charset@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-normalize-display-values@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-normalize-positions@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-normalize-repeat-style@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-normalize-string@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-normalize-timing-functions@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-normalize-unicode@6.1.0
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-normalize-url@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-normalize-whitespace@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-ordered-values@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-reduce-initial@6.1.0
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-reduce-transforms@6.0.2
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-svgo@6.0.3
│ │ │ └── postcss@8.4.38 deduped
│ │ ├─┬ postcss-unique-selectors@6.0.4
│ │ │ └── postcss@8.4.38 deduped
│ │ └── postcss@8.4.38 deduped
│ └── postcss@8.4.38 deduped
├── postcss@8.4.38
├─┬ vue-cli-plugin-cube-docs@1.0.0 -> ./vue-cli-plugin-cube-docs
│ └─┬ vuepress@1.9.10
│   └─┬ @vuepress/core@1.9.10
│     ├─┬ autoprefixer@9.8.8
│     │ └── postcss@7.0.39
│     ├─┬ css-loader@2.1.1
│     │ ├─┬ icss-utils@4.1.1
│     │ │ └── postcss@7.0.39 deduped
│     │ ├─┬ postcss-modules-extract-imports@2.0.0
│     │ │ └── postcss@7.0.39 deduped
│     │ ├─┬ postcss-modules-local-by-default@2.0.6
│     │ │ └── postcss@7.0.39 deduped
│     │ ├─┬ postcss-modules-scope@2.2.0
│     │ │ └── postcss@7.0.39 deduped
│     │ ├─┬ postcss-modules-values@2.0.0
│     │ │ └── postcss@7.0.39 deduped
│     │ └── postcss@7.0.39 deduped
│     ├─┬ optimize-css-assets-webpack-plugin@5.0.8
│     │ └─┬ cssnano@4.1.11
│     │   ├─┬ cssnano-preset-default@4.0.8
│     │   │ ├─┬ css-declaration-sorter@4.0.1
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ cssnano-util-raw-cache@4.0.1
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-calc@7.0.5
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-colormin@4.0.3
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-convert-values@4.0.1
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-discard-comments@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-discard-duplicates@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-discard-empty@4.0.1
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-discard-overridden@4.0.1
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-merge-longhand@4.0.11
│     │   │ │ ├── postcss@7.0.39 deduped
│     │   │ │ └─┬ stylehacks@4.0.3
│     │   │ │   └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-merge-rules@4.0.3
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-minify-font-values@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-minify-gradients@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-minify-params@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-minify-selectors@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-normalize-charset@4.0.1
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-normalize-display-values@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-normalize-positions@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-normalize-repeat-style@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-normalize-string@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-normalize-timing-functions@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-normalize-unicode@4.0.1
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-normalize-url@4.0.1
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-normalize-whitespace@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-ordered-values@4.1.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-reduce-initial@4.0.3
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-reduce-transforms@4.0.2
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-svgo@4.0.3
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ ├─┬ postcss-unique-selectors@4.0.1
│     │   │ │ └── postcss@7.0.39 deduped
│     │   │ └── postcss@7.0.39 deduped
│     │   └── postcss@7.0.39 deduped
│     ├─┬ postcss-loader@3.0.0
│     │ └── postcss@7.0.39 deduped
│     ├─┬ postcss-safe-parser@4.0.2
│     │ └── postcss@7.0.39 deduped
│     ├─┬ vue-loader@15.11.1
│     │ └─┬ @vue/component-compiler-utils@3.3.0
│     │   └── postcss@7.0.39 deduped
│     └─┬ vue@2.7.15
│       └─┬ @vue/compiler-sfc@2.7.15
│         └── postcss@8.4.31
├─┬ vue@2.7.13
│ └─┬ @vue/compiler-sfc@2.7.13
│   └── postcss@8.4.38 deduped
└─┬ vuepress@1.9.7
  └─┬ @vuepress/core@1.9.7
    ├─┬ autoprefixer@9.8.8
    │ └── postcss@7.0.39
    ├─┬ css-loader@2.1.1
    │ ├─┬ icss-utils@4.1.1
    │ │ └── postcss@7.0.39 deduped
    │ ├─┬ postcss-modules-extract-imports@2.0.0
    │ │ └── postcss@7.0.39 deduped
    │ ├─┬ postcss-modules-local-by-default@2.0.6
    │ │ └── postcss@7.0.39 deduped
    │ ├─┬ postcss-modules-scope@2.2.0
    │ │ └── postcss@7.0.39 deduped
    │ ├─┬ postcss-modules-values@2.0.0
    │ │ └── postcss@7.0.39 deduped
    │ └── postcss@7.0.39 deduped
    ├─┬ optimize-css-assets-webpack-plugin@5.0.8
    │ └─┬ cssnano@4.1.11
    │   ├─┬ cssnano-preset-default@4.0.8
    │   │ ├─┬ css-declaration-sorter@4.0.1
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ cssnano-util-raw-cache@4.0.1
    │   │ │ └── postcss@7.0.39
    │   │ ├─┬ postcss-calc@7.0.5
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-colormin@4.0.3
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-convert-values@4.0.1
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-discard-comments@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-discard-duplicates@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-discard-empty@4.0.1
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-discard-overridden@4.0.1
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-merge-longhand@4.0.11
    │   │ │ ├── postcss@7.0.39 deduped
    │   │ │ └─┬ stylehacks@4.0.3
    │   │ │   └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-merge-rules@4.0.3
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-minify-font-values@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-minify-gradients@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-minify-params@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-minify-selectors@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-normalize-charset@4.0.1
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-normalize-display-values@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-normalize-positions@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-normalize-repeat-style@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-normalize-string@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-normalize-timing-functions@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-normalize-unicode@4.0.1
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-normalize-url@4.0.1
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-normalize-whitespace@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-ordered-values@4.1.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-reduce-initial@4.0.3
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-reduce-transforms@4.0.2
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-svgo@4.0.3
    │   │ │ └── postcss@7.0.39 deduped
    │   │ ├─┬ postcss-unique-selectors@4.0.1
    │   │ │ └── postcss@7.0.39 deduped
    │   │ └── postcss@7.0.39 deduped
    │   └── postcss@7.0.39
    ├─┬ postcss-loader@3.0.0
    │ └── postcss@7.0.39 deduped
    └─┬ postcss-safe-parser@4.0.2
      └── postcss@7.0.39

Additional context

No response

@ludofischer
Copy link
Collaborator

cssnano does not reorder rules. In general, reordering CSS rules could lead to a different result. I don't know how complex the code to determine whether reordering is safe would be.

@btea
Copy link
Contributor

btea commented Apr 20, 2024

For situations where automatic judgment is difficult, an option can be provided to the user. For example, canMerge, whose type is string | string[] | () => string[], allows users to determine which selector contents can be merged without any side effects. 🤔

@ludofischer
Copy link
Collaborator

For situations where automatic judgment is difficult, an option can be provided to the user. For example, canMerge, whose type is string | string[] | () => string[], allows users to determine which selector contents can be merged without any side effects. 🤔

What's an example where this custom rule would be useful? If the CSS is written by hand, it would be difficult to be sure it always respects the same structure. If it is generated, why write redundant rules to a file if the programmer already knows how they can be deduplicated.

@btea
Copy link
Contributor

btea commented Apr 20, 2024

It makes sense. 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants