loader使用
image.png
在打包时,打包.txt文件之前先用raw-loader将文件进行转换。

使用loader加载css模块

安装:npm i css-loader -D 用与解析css
项目根目录下安装,
安装:npm i style-loader -D 用于将css放到网页上
配置:

  1. const path = require("path")
  2. const HtmlWebpackPlugin = require("html-webpack-plugin")
  3. module.export = {
  4. // entry:"./src/index.js",
  5. // output:{
  6. // filename:"bundle.js",
  7. // path:path.resolve(__dirname,"./dist"),
  8. // clean:true,
  9. // assetModuleFilename:"images/[contenthash][ext]"
  10. // },
  11. // mode:"development",
  12. // devtool:"inline-source-map",
  13. // plugins: [
  14. // new HtmlWebpackPlugin({
  15. // template:"./index.html",
  16. // filename:"app.html",
  17. // inject:"body"
  18. // })
  19. // ],
  20. // 定义哪些资源文件需要打包
  21. module:{
  22. rules:[
  23. // {
  24. // test:/\.png$/,
  25. // type:"asset/resource",
  26. // generator:{
  27. // filename:"images/[contenthash][ext]"
  28. // }
  29. // },
  30. // {
  31. // test:/\.svg$/,
  32. // type:"asset/inline",
  33. // },
  34. // {
  35. // test:/\.txt$/,
  36. // type:"asset/source",
  37. // },
  38. // {
  39. // test:/\.jpg$/,
  40. // type:"asset",
  41. // // 解析器
  42. // parser:{
  43. // // 定义是否生成URL的临界值,当文件大于时创建,反之生成URL
  44. // dataUrlCondition:{
  45. // maxSize:4*1024*1024
  46. // }
  47. // }
  48. // }
  49. {
  50. test:/\.css$/,
  51. // 定义在打包之前使用css-loader转换.css文件
  52. // use:"css-loader"
  53. // 多个loader时使用数组,但读取时时逆序读取
  54. // 因为在打包时需要先识别css文件并转化("css-loader"),然后再将css放到网页上("style-loader")
  55. use:["style-loader","css-loader"]
  56. // 链式调用,css-loader处理后的源将会传递给style-loader使用
  57. }
  58. ]
  59. }
  60. }

打包后,网页就可以加载css样式了

如果需要解析scss,less等,需要添加一个loader,如下:
安装: npm i less-loader less -D
使用:less-loader 是需要放到css-loader后面,因为需要先less通过less-loader解析,再给css-loader解析

  1. {
  2. // 对应的使用less时,对应的扩展名也需要修改,如下:
  3. test:/\.(css|less)$/,
  4. // 定义在打包之前使用css-loader转换.css文件
  5. // use:"css-loader"
  6. // 多个loader时使用数组,但读取时时逆序读取
  7. // 因为在打包时需要先识别css文件并转化("css-loader"),然后再将css放到网页上("style-loader")
  8. use:["style-loader","css-loader","less-loader"]
  9. // 链式调用,css-loader处理后的源将会传递给style-loader使用
  10. }

打包后css文件和less文件内容都能显示在网页中了
less文件需要三个loader:”style-loader”,”css-loader”,”less-loader”
css文件需要两个loader:”style-loader”,”css-loader”

抽离和压缩css

抽离css文件

这个插件是基于webpack5的
安装:npm i mini-css-extract-plugin -D
用于抽离css文件
引入插件

  1. const path = require("path")
  2. const HtmlWebpackPlugin = require("html-webpack-plugin")
  3. const MiniCssExtractPlugin = require("mini-css-extract-plugin")
  4. module.export = {
  5. // entry:"./src/index.js",
  6. // output:{
  7. // filename:"bundle.js",
  8. // path:path.resolve(__dirname,"./dist"),
  9. // clean:true,
  10. // assetModuleFilename:"images/[contenthash][ext]"
  11. // },
  12. // mode:"development",
  13. // devtool:"inline-source-map",
  14. plugins: [
  15. new HtmlWebpackPlugin({
  16. template:"./index.html",
  17. filename:"app.html",
  18. inject:"body"
  19. }),
  20. // 实例化
  21. new MiniCssExtractPlugin({
  22. filename:"styles/[contenthash].css"
  23. })
  24. ],
  25. // 定义哪些资源文件需要打包
  26. module:{
  27. rules:[
  28. // {
  29. // test:/\.png$/,
  30. // type:"asset/resource",
  31. // generator:{
  32. // filename:"images/[contenthash][ext]"
  33. // }
  34. // },
  35. // {
  36. // test:/\.svg$/,
  37. // type:"asset/inline",
  38. // },
  39. // {
  40. // test:/\.txt$/,
  41. // type:"asset/source",
  42. // },
  43. // {
  44. // test:/\.jpg$/,
  45. // type:"asset",
  46. // // 解析器
  47. // parser:{
  48. // // 定义是否生成URL的临界值,当文件大于时创建,反之生成URL
  49. // dataUrlCondition:{
  50. // maxSize:4*1024*1024
  51. // }
  52. // }
  53. // }
  54. {
  55. test:/\.(css|less)$/,
  56. // 这时需要将css文件抽离,所以将不需要style-loader,替换为MiniCssExtractPlugin-loader
  57. // 这个loader是由MiniCssExtractPlugin插件自带的
  58. use:[MiniCssExtractPlugin-loader,"css-loader","less-loader"]
  59. }
  60. ]
  61. }
  62. }

打包后,会生成一个main.css文件(在dist文件的根目录下),这个文件将会把所有css文件less文件都合并在一起(抽离)。
这时在入口页面(app.html)中将会只引入main.css来代替其他文件

如何指定抽离后文件的位置:在实例化MiniCssExtractPlugin时指定一个filename即可,如下
可以指定文件名,扩展名
image.png
打包后:
image.png

压缩css文件

安装:npm i css-minimizer-webpack-plugin -D
这个插件需要在优化配置中配置,并需要将mode修改为production

  1. const path = require("path")
  2. const HtmlWebpackPlugin = require("html-webpack-plugin")
  3. const MiniCssExtractPlugin = require("mini-css-extract-plugin")
  4. const CSSMinimizerPlugin = require("css-minimizer-webpack-plugin")
  5. module.export = {
  6. // entry:"./src/index.js",
  7. // output:{
  8. // filename:"bundle.js",
  9. // path:path.resolve(__dirname,"./dist"),
  10. // clean:true,
  11. // assetModuleFilename:"images/[contenthash][ext]"
  12. // },
  13. mode:"production",
  14. // devtool:"inline-source-map",
  15. plugins: [
  16. // new HtmlWebpackPlugin({
  17. // template:"./index.html",
  18. // filename:"app.html",
  19. // inject:"body"
  20. // }),
  21. // 实例化
  22. new MiniCssExtractPlugin({
  23. filename:"styles/[contenthash].css"
  24. })
  25. ],
  26. // 定义哪些资源文件需要打包
  27. module:{
  28. rules:[
  29. // {
  30. // test:/\.png$/,
  31. // type:"asset/resource",
  32. // generator:{
  33. // filename:"images/[contenthash][ext]"
  34. // }
  35. // },
  36. // {
  37. // test:/\.svg$/,
  38. // type:"asset/inline",
  39. // },
  40. // {
  41. // test:/\.txt$/,
  42. // type:"asset/source",
  43. // },
  44. // {
  45. // test:/\.jpg$/,
  46. // type:"asset",
  47. // // 解析器
  48. // parser:{
  49. // // 定义是否生成URL的临界值,当文件大于时创建,反之生成URL
  50. // dataUrlCondition:{
  51. // maxSize:4*1024*1024
  52. // }
  53. // }
  54. // }
  55. {
  56. test:/\.(css|less)$/,
  57. // 这时需要将css文件抽离,所以将不需要style-loader,替换为MiniCssExtractPlugin-loader
  58. // 这个loader是由MiniCssExtractPlugin插件自带的
  59. use:[MiniCssExtractPlugin-loader,"css-loader","less-loader"]
  60. }
  61. ]
  62. },
  63. // 优化配置
  64. optimization:{
  65. minimizer:[
  66. new CSSMinimizerPlugin()
  67. ]
  68. }
  69. }

配置完后打包,打包后的css文件将会是一个压缩文件,如下
image.png

加载images图像

通过资源模块也可以加载图片。
在css中加载图片
直接通过css引入图片作为背景,然后再通过资源模块解析图片,最后打包就可以了。这样打包时如果有提示警告,则可以将mode属性修改为development,就不会由警告了。

加载fonts字体

通过资源模块加载字体
image.png
asset/resource可以帮我们载入任何类型的资源。
image.png
打包后,在浏览器中查看效果

加载数据

image.png
csv/tsv(csv中的数据是使用“,”分隔,tsv中的数据是使用“type”分隔)用于对excel的数据进行转换
安装:npm i csv-loader xml-loader -D
配置:
image.png
打包后,xml文件会转化为一个对象:
image.png
csv会转换为一个数组:
image.png

自定义json模块parser

image.png
yaml文件
通过缩进控制是否是子项
image.png
toml文件
通过中括号定义是否是子项(下方文件扩展名错误,应为toml)
image.png
json5文件
json5文件是对接送文件的升级
json5文件中,可以添加注释,key值将可以不使用双引号,value可以使用单引号,还可以使用\n等转义符
image.png
要加载这三个文件需要安装:npm i toml yaml json5 -D

  1. // 先导入三个模块
  2. const toml = require("toml")
  3. const yoml = require("yoml")
  4. const json5 = require("json5")
  5. module:{
  6. rules:[
  7. {
  8. // 需要转换的文件
  9. test:/.\toml$/,
  10. // 转换后的类型
  11. type:"json",
  12. // 使用什么转换
  13. parser:{
  14. parse:toml.parse
  15. }
  16. },
  17. {
  18. // 需要转换的文件
  19. test:/.\yoml$/,
  20. // 转换后的类型
  21. type:"json",
  22. // 使用什么转换
  23. parser:{
  24. parse:yoml.parse
  25. }
  26. },
  27. {
  28. // 需要转换的文件
  29. test:/.\json5$/,
  30. // 转换后的类型
  31. type:"json",
  32. // 使用什么转换
  33. parser:{
  34. parse:json5.parse
  35. }
  36. }
  37. ]
  38. }

修改配置文件后,可以编译一下,查看是否有问题(npx webpack)
引入文件后打印文件内容
image.png
结果:
image.png