Rollup 缩小类名

Dan*_*l T 5 rollupjs svelte-3 rollup-plugin-postcss

是否有任何 rollup.js 插件允许混淆/破坏 CSS 类名?除了 webpack 之外,我什么也没找到: https: //github.com/sndyuk/mangle-css-class-webpack-plugin

小智 7

这可以通过rollup-plugin-postcss来实现。根据自述文件,该modules属性的配置选项将传递到postcss-modules。使用该generateScopedName属性,您可以设置类名称的格式:

generateScopedName: "[hash:base64:8]",
Run Code Online (Sandbox Code Playgroud)

postcss-modules 自述文件中有更多示例,包括如何动态生成名称。请注意,您有责任确保名称足够唯一,不会发生冲突。

完整的汇总配置如下所示:

import postcss from "rollup-plugin-postcss";
... // other imports

export default {
  ... // rest of config
  plugins: [
    ... // other plugins
    postcss({
      ...
      modules: {
        generateScopedName: "[hash:base64:8]",
      },
      autoModules: true,
    }),
    ...
  ],
};
Run Code Online (Sandbox Code Playgroud)

然后是这样的:

.parent {
  display: grid;
  grid-template-rows: auto 1fr auto;
}
/* styles.module.css */
Run Code Online (Sandbox Code Playgroud)
import STYLES from './styles.module.css';

...

// Use the style however
<div className={STYLES.parent}> 
  ...
</div>
Run Code Online (Sandbox Code Playgroud)

最终看起来像:

import STYLES from './styles.module.css';

...

// Use the style however
<div className={STYLES.parent}> 
  ...
</div>
Run Code Online (Sandbox Code Playgroud)
.xSgFDOB2 {
  display: grid;
  grid-template-rows: auto 1fr auto;
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“autoModules: true”假定您的样式文件的命名类似于“something.module.scss”。如果样式文件名中没有“.module.”,例如“my-component.scss”,则生成的ScopedName静默失败,类名不会被截断,并且“undefined”会插入到编译后的 JavaScript 中。要解决此问题,请将 autoModules 设置为 false。https://github.com/egoist/rollup-plugin-postcss/issues/296#issuecomment-774040297 (3认同)