uni-app编译成小程序打包后.ss(css文件)过大的问题

uni-app编译成小程序打包后.ss(css文件)过大的问题

操作步骤:

  1. 首先 pnpm i 安装依赖
  2. pnpm dev:mp-alipay
  3. buildtest:mp-alipay

预期结果:

希望另外页面不在引入公用css文件只引用一次
可不可以参照https://www.mpxjs.cn/guide/basic/css.html#%E5%85%AC%E5%85%B1%E6%A0%B7%E5%BC%8F%E5%A4%8D%E7%94%A8 这种方式复用css?

实际结果:

bug描述:

在app.vue里面定义公共scss文件, 然后别的页面有引用app.vue的scss变量 就会导致 页面全部引入 ,导致打包后出来的代码体积很大
代码见附件

图片

Image 1
Image 2
Image 3

6 回复

遇到同样的问题,
组件的.wxss 文件, 把所有的公用样式都包含进去了

老哥你是怎么解决的

同问,这编译操作不是跟"小程序"背道而驰吗

吐了,公共样式app.vue里面引的,编译出来每个wxss的大小几百k

在 uni-app 中,编译成小程序时,生成的 .wxss 文件(对应小程序的样式文件)可能会变得过大,这会影响小程序的加载速度和性能。以下是一些优化 .wxss 文件大小的建议:

1. 减少冗余样式

  • 检查并删除未使用的样式:使用工具(如 PurgeCSS)来检测和删除未使用的 CSS 规则。
  • 避免重复样式:确保没有重复的样式定义,合并相同的样式规则。

2. 使用 CSS 预处理器

  • Sass/Less:使用 CSS 预处理器(如 Sass 或 Less)来编写模块化的样式,减少重复代码。
  • 变量和混合:利用变量和混合(Mixins)来减少重复的样式代码。

3. 压缩 CSS 文件

  • 使用压缩工具:在打包时使用 CSS 压缩工具(如 cssnano)来压缩 .wxss 文件,去除空格、注释等不必要的字符。
  • uni-app 配置:在 vue.config.js 中配置 cssextractminimize 选项,确保 CSS 文件被压缩。

4. 按需加载样式

  • 动态加载样式:根据页面或组件的需要,动态加载样式文件,而不是将所有样式打包到一个文件中。
  • 分包加载:将样式文件按需分包加载,减少主包的体积。

5. 使用小程序原生样式

  • 内联样式:对于简单的样式,可以直接使用小程序的 style 属性内联样式,减少 .wxss 文件的体积。
  • 小程序原生组件:尽量使用小程序的原生组件,减少自定义样式的使用。

6. 优化图片资源

  • 压缩图片:确保图片资源经过压缩,减少图片文件的大小。
  • 使用 Base64:对于小图标,可以使用 Base64 编码嵌入到 CSS 中,减少 HTTP 请求。

7. 使用小程序的分包机制

  • 分包加载:将不同页面的样式文件分包加载,减少主包的体积。
  • 独立分包:对于不常用的页面,可以使用独立分包,减少主包的加载时间。

8. 使用 uni-app 的优化配置

  • optimization 配置:在 vue.config.js 中配置 optimization 选项,优化打包结果。
  • splitChunks 配置:使用 splitChunks 将公共样式提取到单独的文件中,减少重复。

9. 使用小程序的自定义组件

  • 自定义组件:将样式封装到自定义组件中,减少全局样式的使用。

10. 使用小程序的原生样式优化工具

  • 小程序开发者工具:使用小程序开发者工具中的“代码分析”功能,检测并优化样式文件。

示例配置(vue.config.js

module.exports = {
  css: {
    extract: true, // 提取 CSS 到单独的文件
    sourceMap: false, // 关闭 source map
    loaderOptions: {
      css: {
        // 配置 css-loader
      },
      postcss: {
        // 配置 postcss-loader
        plugins: [
          require('cssnano')({
            preset: 'default', // 使用默认的压缩配置
          }),
        ],
      },
    },
  },
  optimization: {
    splitChunks: {
      cacheGroups: {
        styles: {
          name: 'styles',
          test: /\.(css|wxss)$/,
          chunks: 'all',
          enforce: true,
        },
      },
    },
  },
};
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!