webpack/vue-cli中如何实现css的treeshaking

大家都知道在项目中有JS的treeshaking,那么CSS可不可以也实现treeshaking呢,当然可以,其实就是删除项目里面未使用的CSS内容,和JS的树摇类似,想象一下,对项目的生产构建优化是有多大的帮助哈。今天在项目优化的时候,发现网上大多数都是webpack项目去使用purgecss-webpack-plugin,下面我将总结一下webpack及vue-cli项目两种不同的配置方式!

一、weback中实现css的treeshaking:

1.安装插件purgecss-webpack-plugin:
npm i purgecss-webpack-plugin

npm install  glob (用来辅助文件读取)
2.修改webpack.config.js配置文件:
const PurgecssPlugin = require('purgecss-webpack-plugin');
const glob = require('glob-all');
const path = require('path');

module.exports = {
  // ...其他配置
  plugins: [
    new PurgecssPlugin({
      paths: glob.sync([
        path.join(__dirname, './src/*.html'),
        path.join(__dirname, './src/**/*.vue'),
        // 更多匹配规则可以根据实际需求添加
      ]),
    }),
    // ...其他插件
  ],
};

二、vue-cli实现css的treeshaking:

1.安装插件purgecss-webpack-plugin:

npm i purgecss-webpack-plugin

npm install  glob

2.修改vue.config.js文件:(未成功,记录踩坑)

方式一:通过chainWebpack链式操作

const PurgeCSSPlugin = require('purgecss-webpack-plugin');
const glob = require('glob');
const path = require('path');

module.exports = {
  chainWebpack: config => {
    if (process.env.NODE_ENV === 'production') {
      config.plugin('PurgeCSSPlugin').use(PurgeCSSPlugin, [
        {
          paths: glob.sync([
            path.join(__dirname, './src/*.vue'),
            path.join(__dirname, './node_modules/your-library/**/*.vue'),
            // 添加其他需要处理的文件路径
          ]),
          // 其他配置...
        }
      ]);
    }
  }
};

方式二:通过configureWebpac实现 webpack-merge 合并到最终的配置

const glob = require('glob');
const { PurgeCSSPlugin } = require('purgecss-webpack-plugin');
const PurgeCSSPluginConfig = process.env.NODE_ENV === 'production' ? [new PurgeCSSPlugin({
    // paths: glob.sync(path.resolve(__dirname, "src") + '/**/*', { nodir: true }),
    paths: glob.sync([
        path.join(__dirname, 'src/**/*.vue'),
        path.join(__dirname, 'src/**/*.scss'),
        path.join(__dirname, 'src/**/*.css'),
    ]),
})] : []

 plugins: [
            ...PurgeCSSPluginConfig 
        ]

 两种方式结果:css文件在打包后体积明显下降,但是项目运行后缺少大量css样式。

3.网上查询帖子未果,很少关于vue-cli的css树摇话题,在官网找到新方法:

purgecss-webpack-plugin官网的链接:Introduction | PurgeCSS

在purgecss官网的用法中:我注意到了下面这句话:大多数用于构建网站的打包器和框架都使用 PostCSS,配置 PurgeCSS 最简单的方法是使用其 PostCSS 插件。(咦,言下之意,就是如果工程化本身是基于postCss,那么配置将会更加简单)

接着,果然在脚手架的官网中,看到与上面呼应的一句话: Vue CLI 内部使用了 PostCSS,并且支持使用配置源来配置 PostCSS。

vue-cli的官网链接:CSS 相关 | Vue CLI

开始实践:

1.按照vue-cli官网的说法,我需要通过postcss-load-config,于是,安装postcss-load-config(用于手动修改postcss的配置)

npm i -D postcss-load-config

2.在postcss-load-confi插件的用法说明:我选择了新增postcss.config.js配置文件的方式

3.postcss.config.js添加内容:

const purgecss = require('@fullhuman/postcss-purgecss')

const purgecssConfig = process.env.NODE_ENV === 'production' ? [
    purgecss({
        content: ['./src/**/*.vue', './src/**/*.scss', './src/**/*.css']
    })
] : []

module.exports = {
    plugins: [
        ...purgecssConfig
    ]
}

结果:css文件在打包后体积明显下降,项目也成功运行。

总结:

1.在使用插件或者配置项优化项目的时候,一定要牢记自己优化的目标,其实就是要达到的效果标准,比如在这里,如果配置成功,那么在生产环境下,Css分包出现的文件一定体积会有明显的减小,同时项目的样式也能全部符合ui。

2.在使用插件的时候,如果按照官网的用法使用后,发现有报错,先明确写法是否有差异。如果没有,则可以在社区看看有没有出现类似的情况,如果没有,则可以选择到官网,看看有哪些地方是自己使用的时候忽略了细节,以及有没有其它写法可以代替。

3.特别注意了小伙伴们,css的树摇的目的与代码分割差不多,主要是为了生产环境的页面优化加载,在开发环境一般不做此操作,因为开发环境更多考虑的是构建速度。

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值