CSS文件的代码分割

之前总结的代码分割都是针对JS代码的,如果要对CSS代码进行代码分割,要怎么办呢?借助MiniCssExtractPlugin插件
image.png
  • 在我们没有配置这个插件的时候,webpack是怎么对css代码进行打包的呢?我们来试一下
    image.png
image.png
  • 然后运行打包命令npm run dev-build
    image.png
  • 然后运行代码会发现,样式生效了。由此可以得知,webpack在打包的时候,它会把CSS文件直接打包到JS文件里。这也就是我们常听说的CSS IN JS这样一个概念
但是这并不是我们希望的,我们希望的是,在打包生成代码的时候,如果我们引入的是CSS文件,那么把CSS文件单独打包到dist目录下,生成一个CSS文件,而不是打包到js文件里,这个时候,我们就要借助MiniCssExtractPlugin插件了;具体的使用步骤如下:
  • 先安装
npm install --save-dev mini-css-extract-plugin
  • 安装好以后,要配置一下webpack.common.js

    image.png

    image.png

  • 然后我们用MiniCssExtractPlugin.loader来代替style.loader

    image.png

  • 然后我们运行一下打包命令npm run build,发现仍然没于对CSS做单独的打包

    image.png

  • 分析下原因,可能是下边几个因素造成的,之前我们在webpack.dev.js里做了下边的配置

    image.png

  • 这个参数是给tree shaking使用的。在做tree shaking的时候,webpack会对所有的模块都去tree shaking,但是有些模块我们不希望进行tree shaking,所以我们配置了usedExports: true,然后在package.json里,我们就可以在sideEffects去写一些内容来代替false值。

    image.png

  • 之前tree shaking对我们引入的style.css起了作用,发现我们虽然引入了文件,但是并没于使用它,所以直接就把style.css给干掉了,所以要解决这个问题,我们要对tree shaking做一下修改。

    image.png

  • 还有就是,之前我们把tree shaking的配置写在了dev开发环境里,实际上我们应该写在common这里,因为不管是线上代码,还是本地测试代码,我们都需要,使用这个参数来告诉我们的webpack,有一些css文件不要去做tree shaking的处理,所以,我们需要把usedExports: truedev里剪切到common

    image.png

  • 然后我们再运行打包npm run build,发现可以单独对CSS进行打包了

    image.png

还可以对MiniCssExtractPlugin插件进行更详细的配置
image.png
  • 然后运行打包命令,发现打包生成的CSS文件的文件名,还是走的filename这个配置,而不是chunkFilename这个配置。也就是说,打包生成的CSS文件,如果是直接被页面引用,那么在使用这个插件的时候,就会走filename这个配置。如果是间接要被引用的CSS文件,就会走chunkFilename这个配置
    image.png
  • 如果我们再增加一个CSS文件,并引入到index.js文件里,进行打包,那么webpack会把这两个CSS文件的内容合并到一起。
    image.png

    image.png

    image.png
虽然我们实现了打包单独生成CSS文件,但是我们可以看到,生成的文件代码并不是压缩状态的。如果我们希望单独生成CSS文件是压缩状态的,可以用`optimize-css-assets-webpack-plugin这个插件
  • 先安装
npm install --save-dev optimize-css-assets-webpack-plugin
  • 然后引入和配置


    image.png

    image.png
  • 然后我们再运行打包npm run build,发现它不单单帮我们把样式做了合并,还把代码做了压缩显示在了一行
    image.png
更高级的用法
  • 之前我们是在只有一个入口文件的情况下,对CSS文件进行单独的打包和压缩。如果我们现在有多个入口文件,并且我们希望所有的入口文件引入的CSS文件都能够打包生成到一个CSS样式文件里。该怎么做呢?


    image.png
  • 看官方文档可以知道,我们现在使用的MiniCssExtractPlugin这个插件,它的底层也是借助了splitChunks这个插件的。我们可以在cacheGroups组里额外增加一个组叫做styles,只要发现打包的文件是CSS为后缀的文件,那么不管它是同步加载的还是异步加载的文件,统一的都把它打包到名字叫做styles的文件里去。
    enforce:true的意思是,忽略掉默认的一些参数,比如说minSize,maxSize等。这些参数都不管,只要是一个CSS文件,就会做代码的拆分,把代码分割到名字叫做styles的文件里去。
    image.png
如果我们想根据入口文件的不同,把CSS文件打包到不同的CSS文件里边去,该怎么办?
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容