经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » webpack » 查看文章
webpack拆分压缩css并以link导入的操作步骤
来源:jb51  时间:2021/10/19 15:31:55  对本文有异议

先看一下代码文件结构:

入口文件(index1.js)内容:

  1. import $ from 'jquery'
  2. import './css/index.css'
  3. import './less/index.less'
  4. $(function () {
  5. $('#app li:nth-child(odd)').css('color', 'red')
  6. $('#app li:nth-child(even)').css('color', 'green')
  7. })
  8. import './assets/fonts/iconfont.css';
  9. const ul = document.querySelector("ul");
  10. const theI = document.createElement("li");
  11. theI.className='iconfont icon-qq';
  12. ul.appendChild(theI);

webpack.config.js配置文件内容:

  1. const path = require('path');
  2. const HtmlWebpackPlugin = require('html-webpack-plugin');
  3. module.exports = {
  4. //入口文件地址
  5. entry: './src/index1.js',
  6. output: {
  7. path: path.resolve(__dirname, 'dist'),
  8. //出口文件名
  9. filename: 'bundle.js',
  10. },
  11. plugins: [
  12. new HtmlWebpackPlugin({
  13. template: './public/隔行变色.html'
  14. })],
  15. module: {
  16. rules: [{
  17. //匹配.css结尾的文件,i是不区别大小写
  18. test: [/\.css$/i],
  19. //从右往左执行,不能改变顺序style-loader是 CSS 插入到 DOM 中,css- loader是对 @import 和 url() 进行处理,就像 js 解析 import /require() 一样
  20. use: ["style-loader", "css-loader"],
  21. }, {
  22. test: /\.less$/i,
  23. use: [
  24. // compiles Less to CSS
  25. 'style-loader',
  26. 'css-loader',
  27. 'less-loader',
  28. ],
  29. }, { // webpack5默认内部不认识这些文件, 所以当做静态资源直接输出即可
  30. test: /\.(eot|svg|ttf|woff|woff2)$/,
  31. type: 'asset/resource',
  32. generator: {
  33. filename: 'font/[name].[hash:6][ext]'
  34. }
  35. }],
  36. },
  37. };

我们进行打包然后运行打包后的html文件:

发现css样式是通过js生成style标签的形式添加上去的

我们运行打包后会发现less转为了css文件,但css文件确通过js加入style标签,下面我们将css进行拆分出来,并以link标签引入

步骤:

1、安装mini-css-extract-plugin

  1. npm i mini-css-extract-plugin -D //npm安装
  2. yarn add mini-css-extract-plugin -D //yarn安装

2、在webpack.config.js文件中引入并配置

  1. const path = require('path');
  2. const HtmlWebpackPlugin = require('html-webpack-plugin');
  3. //引入安装的mini-css-extract-plugin
  4. const MiniCssExtractPlugin = require("mini-css-extract-plugin");
  5. module.exports = {
  6. //入口文件地址
  7. entry: './src/index1.js',
  8. output: {
  9. path: path.resolve(__dirname, 'dist'),
  10. //出口文件名
  11. filename: 'bundle.js',
  12. },
  13. plugins: [new MiniCssExtractPlugin(),
  14. new HtmlWebpackPlugin({
  15. template: './public/隔行变色.html'
  16. })],
  17. module: {
  18. rules: [{
  19. //匹配.css结尾的文件,i是不区别大小写
  20. test: [/\.css$/i],
  21. //从右往左执行,不能改变顺序style-loader是 CSS 插入到 DOM 中,css- loader是对 @import 和 url() 进行处理,就像 js 解析 import /require() 一样
  22. use: [MiniCssExtractPlugin.loader, "css-loader"
  23. ],
  24. }, {
  25. test: /\.less$/i,
  26. use: [
  27. // compiles Less to CSS
  28. MiniCssExtractPlugin.loader,
  29. 'css-loader',
  30. 'less-loader',
  31. ],
  32. }, { // webpack5默认内部不认识这些文件, 所以当做静态资源直接输出即可
  33. test: /\.(eot|svg|ttf|woff|woff2)$/,
  34. type: 'asset/resource',
  35. generator: {
  36. filename: 'font/[name].[hash:6][ext]'
  37. }
  38. }],
  39. },
  40. };

注意:

  • HtmlWebpackPlugin是将css文件以link形式引入到打包后的html页面中的。
  • use配置项是从右至左的。
  • 在css和less使用中即(use配置项中)MiniCssExtractPlugin.loader一定不要放在css-loader后面和style-loader前面,因为css-loader和less-loader是对@import和url()进行处理的,就像js解析import/require()一样(放在它之后相当于还没进行解析就拆分了会报错)。而style-loader是把CSS插入到DOM中的(放在它之前相当于已经将CSS插入到DOM中了再进行拆分会报错)。

3、压缩拆分出来的css文件

  • 下载optimize-css-assets-webpack-plugin
  • 引入并配置webpack.config.js文件
  1. const path = require('path');
  2. const HtmlWebpackPlugin = require('html-webpack-plugin');
  3. //引入安装的mini-css-extract-plugin
  4. const MiniCssExtractPlugin = require("mini-css-extract-plugin");
  5. //用来压缩拆分的CSS
  6. const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
  7. module.exports = {
  8. //入口文件地址
  9. entry: './src/index1.js',
  10. output: {
  11. path: path.resolve(__dirname, 'dist'),
  12. //出口文件名
  13. filename: 'bundle.js',
  14. },
  15. plugins: [new MiniCssExtractPlugin(),new OptimizeCSSAssetsPlugin({}),
  16. new HtmlWebpackPlugin({
  17. template: './public/隔行变色.html'
  18. })],
  19. module: {
  20. rules: [{
  21. //匹配.css结尾的文件,i是不区别大小写
  22. test: [/\.css$/i],
  23. //从右往左执行,不能改变顺序style-loader是 CSS 插入到 DOM 中,css- loader是对 @import 和 url() 进行处理,就像 js 解析 import /require() 一样
  24. use: [MiniCssExtractPlugin.loader, "css-loader"
  25. ],
  26. }, {
  27. test: /\.less$/i,
  28. use: [
  29. // compiles Less to CSS
  30. MiniCssExtractPlugin.loader,
  31. 'css-loader',
  32. 'less-loader',
  33. ],
  34. }, { // webpack5默认内部不认识这些文件, 所以当做静态资源直接输出即可
  35. test: /\.(eot|svg|ttf|woff|woff2)$/,
  36. type: 'asset/resource',
  37. generator: {
  38. filename: 'font/[name].[hash:6][ext]'
  39. }
  40. }],
  41. }
  42. };

4、进行打包

发现多了一个main.css文件,打开网页进行查看:

 

main.css文件以link方式引入进去了 并且被压缩了

到此这篇关于webpack拆分压缩css并以link导入的文章就介绍到这了,更多相关webpack拆分压缩css内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号