插件 mini-css-extract-plugin 使用的详解(二)

html-css012

插件 mini-css-extract-plugin 使用的详解(二),第1张

文接上回,继续看 webpack 的插件:这里默认你已经搭建出来一个 React 框架。我就是在这个基础上演示的。

mini-css-extract-plugin作用: 该插件的主要是为了抽离 css 样式,防止将样式打包在 js 中文件过大和因为文件大网络请求超时的情况。

extract-text-webpack-plugin 是 mini-css-extract-plugin 的前身,不过前者在 webpack4 算是废了。

安装依赖:

然后引入,配置提出 css 样式,重命名 css 文件。

其中上面的 rules 还可以修改变成这样:

打包出来的 index.css将会插入 index.html 里面的 head 标签里面。

现在如果使用下面的样式:

其中 transform: rotate(45deg) 是 css3 的样式。我们想批量给它增加前缀。这时就得使用 autoprefixer 。但是还的用一个 loader 来处理,这个 loader 就叫 postcss-loader 。

安装依赖:

配置时 postcss-loader 执行顺序必须保证在 css-loader 之前。

完成之后 在webpack.config.js 同级目录下新建 post.config.js 输入内如下:

打包之前的 css 样式为:

经过插件处理之后为:

如果你不想新建一个 post.config.js 文件的话可以这样配置:

处理的效果是完全和分开写一样的。

这里需要注意的是在 HtmlWebpackPlugin 插件里面的配置压缩 css 参数只对自己创建的模板有效,所以这里引包的 css 并没有压缩。我们还的专门配置 压缩 css 的插件。它就是 optimize-css-assets-webpack-plugin 。 terser-webpack-plugin 是对打包的 JS 进行压缩的。

安装依赖:

注意: 使用 optimize-css-assets-webpack-plugin 插件和 terser-webpack-plugin 插件的时候 webpack 的 mode (模式)一定的是 生产模式(production)

简单配置就能压缩 css 和 JS 了。还是很有用的,压缩完成明显文件变小了。

友情提示:

原本打包过后是css-in-js,配置完MiniCssExtractPlugin后,可以将css单独打包出来

1,安装npm install --save-dev mini-css-extract-plugin

2,将style-loader替换成MiniCssExtractPlugin.loader (style.loader,支持HMR,但MiniCssExtractPlugin目前正在支持(还没))

3,安装npm install --save-dev optimize-css-assets-webpack-plugin (压缩输出的css文件)

4,安装npm install --save-dev terser-webpack-plugin (因为需要配置minimizer,所以默认的js压缩被覆盖,在旧版本中是使用的 UglifyjsWebpackPlugin来压缩的,但是在最新版本中更换成了TerserJSPlugin)

5,在optimization.minimizer注册OptimizeCSSAssetsPlugin与TerserJSPlugin,注意,当运行mode是development时minimizer并不运行,所以,不会压缩js和css

6,安装npm install css-hot-loader --save-dev (来支持MiniCssExtractPlugin的HMR功能)

7,将css-hot-loader配置于MiniCssExtractPlugin.loader前面,注意,生成的css命名,不能让根据内容的改变而改变,不然找不到变化的css文件,热更新无效,如[name].[hash].css,就会让热更新失效,建议为[name].css

做项目的时候,突然发现一个容易犯错的问题

1、webpack中对css文件的处理使用的是: MiniCSSExtractPlugin、css-loader、post-loader。

2、在plugins中也相对应的设置一个MiniCssExtractPlugin,打包后将css文件单独抽离到了css文件夹下

3、打包后的目录

4、打包后的css里面的url

6、再次打包,url引入正确

很简单,但是如果不注意,还真的很容易掉坑里!!