image.png
asset/resource :发送一个单独的文件并导出URL
asset/inline:导出资源的Data URL
asset/source:导出资源的源代码URL
asset:在导出一个Data URL和发送一个单独文件之间自动进行选择

resource

导出单独文件,例如图片

  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. // 定义资源文件名,和路径
  10. // 通过[contenthash]自动生成文件名
  11. // [ext]自动生成扩展名
  12. assetModuleFilename:"images/[contenthash][ext]"
  13. },
  14. mode:"development",
  15. devtool:"inline-source-map",
  16. plugins: [
  17. new HtmlWebpackPlugin({
  18. template:"./index.html",
  19. filename:"app.html",
  20. inject:"body"
  21. })
  22. ],
  23. // 定义哪些资源文件需要打包
  24. module:{
  25. rules:[
  26. {
  27. // 通过正则来定义我们加载的文件类型,
  28. // 表示以png
  29. test:/\.png$/,
  30. // 定义资源类型
  31. type:"asset/resource",
  32. // 配置资源文件生成位置和名称
  33. // generator配置的优先级高于在output中配置的assetModuleFilename
  34. // 两者作用类似,但generator优先级更高
  35. generator:{
  36. filename:"images/[contenthash][ext]"
  37. }
  38. }
  39. ]
  40. }
  41. }

image.png
打包后的资源文件,将会由系统自动生成一个名称,并放到dist下
通过在output中定义属性assetModuleFilename:”images/test.png”,
这之后打包的资源文件将会放到dist/images 文件下面,文件名交test.png
image.png
通过[contenthash]生成不同的文件名,[ext]自动生成扩展名
image.png

第二种配置资源文件位置和名称的方式
在module 的rules下面的对象中配置generator
image.png

inline

导出资源的Data URL

  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. }
  36. }

将类似与svg这样的文件,当作资源显示到网页上
image.png
打包后不会出现在dist文件中,需要通过浏览器才能看见,在网页中是以base64的格式显示的

source

用于导出资源的源代码URL
例如将文本内容生成一个URL

  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. }
  40. }

引入使用:
image.png
不会打包成文件放到dist中,
在网页中会显示资源文件中的源信息,及文件中有什么网页就显示什么

asset(通用数据类型)

在导出一个Data URL和发送一个单独文件之间自动进行选择,也就是在asset/inline和asset/resource之间先择

  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. }
  51. }

同样导入后使用:
image.png
打包后。因为在output中配置了打包后资源文件的路径,所以会在dist/imags中生成一个.jpg的图片
image.png
默认情况下当一个资源文件小于8k时会选择inline的方,生成一个base64的链接,大于8k时会使用resource创建一个资源

通过设置parser将临界条件修改,如下:
image.png
当资源文件大于4M时才会创建一个资源,小于时会生成一个URL
生成URL时不会在dist文件中创建资源,需要通过浏览器查看URL和渲染效果