• Webpack打包图片-JS-Vue


    1 Webpack打包图片

    2 Webpack打包JS代码

    3 Babel和babel-loader

    5 resolve模块解析

    4 Webpack打包Vue

    webpack5打包 的过程:

       在webpack的配置文件里面编写rules,type类型有多种,每个都有自己的作用想要把小内存的图片转成base64图片和大内存的图片不转base64的方法就是使用parser打包之后的图片名称会被加上hash值,想要自定义图片打包之后的名字可以通过generator来设置

    1. const path = require("path")
    2. const { VueLoaderPlugin } = require("vue-loader/dist/index")
    3. module.exports = {
    4. entry: "./src/main.js",
    5. output: {
    6. filename: "bundle.js",
    7. path: path.resolve(__dirname, "./build"),
    8. // assetModuleFilename: "abc.png"
    9. },
    10. resolve: {
    11. extensions: [".js", ".json", ".vue", ".jsx", ".ts", ".tsx"],
    12. alias: {
    13. utils: path.resolve(__dirname, "./src/utils")
    14. }
    15. },
    16. module: {
    17. rules: [
    18. {
    19. test: /\.(png|jpe?g|svg|gif)$/,
    20. // 1.打包两张图片, 并且这两张图片有自己的地址, 将地址设置到img/bgi中
    21. // 缺点: 多图片加载的两次网络请求
    22. // type: "asset/resource",
    23. // 2.将图片进行base64的编码, 并且直接编码后的源码放到打包的js文件中
    24. // 缺点: 造成js文件非常大, 下载js文件本身消耗时间非常长, 造成js代码的下载和解析/执行时间过长
    25. // type: "asset/inline"
    26. // 3.合理的规范:
    27. // 3.1.对于小一点的图片, 可以进行base64编码
    28. // 3.2.对于大一点的图片, 单独的图片打包, 形成url地址, 单独的请求这个url图片
    29. type: "asset",
    30. parser: {
    31. dataUrlCondition: {
    32. maxSize: 60 * 1024
    33. }
    34. },
    35. generator: {
    36. // 占位符
    37. // name: 指向原来的图片名称
    38. // ext: 扩展名
    39. // hash: webpack生成的hash
    40. // 加img/可以在打包的时候创建img文件夹,把图片放到这里面
    41. filename: "img/[name]_[hash:8][ext]"
    42. }
    43. },
    44. ]
    45. },
    46. plugins: [
    47. new VueLoaderPlugin()
    48. ]
    49. }

     在js里面创建img。

    1. // 引入图片模块
    2. import zznhImage from "../img/zznh.png"
    3. // 创建img元素
    4. const imgEl = document.createElement("img")
    5. imgEl.src = zznhImage
    6. document.body.append(imgEl)
    7. // 创建div元素, 设置背景
    8. const divBgEl = document.createElement("div")
    9. divBgEl.classList.add("img-bg")
    10. document.body.append(divBgEl)

    webpack在打包js时候的操作:

    es6语法转成es5,需要使用babel

     

    现在webpack的配置文件里面编写rules

    1. const path = require("path")
    2. const { VueLoaderPlugin } = require("vue-loader/dist/index")
    3. module.exports = {
    4. entry: "./src/main.js",
    5. output: {
    6. filename: "bundle.js",
    7. path: path.resolve(__dirname, "./build"),
    8. // assetModuleFilename: "abc.png"
    9. },
    10. resolve: {
    11. extensions: [".js", ".json", ".vue", ".jsx", ".ts", ".tsx"],
    12. alias: {
    13. utils: path.resolve(__dirname, "./src/utils")
    14. }
    15. },
    16. module: {
    17. rules: [
    18. {
    19. test: /\.js$/,
    20. use: [
    21. {
    22. loader: "babel-loader",
    23. // options: {
    24. // plugins: [
    25. // "@babel/plugin-transform-arrow-functions",
    26. // "@babel/plugin-transform-block-scoping"
    27. // ]
    28. // }
    29. }
    30. ]
    31. },
    32. {
    33. test: /\.vue$/,
    34. loader: "vue-loader"
    35. }
    36. ]
    37. },
    38. plugins: [
    39. new VueLoaderPlugin()
    40. ]
    41. }

    安装babel-loader

    npm install babel-loader -D

    babel-loader也一样有许多插件,于是我们也可以像postcss一样创建一个配置文件,

    babel.config.js

    1. module.exports = {
    2. // plugins: [
    3. // "@babel/plugin-transform-arrow-functions",
    4. // "@babel/plugin-transform-block-scoping"
    5. // ]
    6. presets: [
    7. "@babel/preset-env"
    8. ]
    9. }

    下载预设的包

    npm install @babel/preset-env -D

    之前模块化的时候提到过node在执行import 导入模块的时候,有些文件的后缀可以不用写,这是因为在webpack的配置文件里面的resolve里面已经写好了后缀,在之后的文件也可以手动往resolve里面添加后缀 。

    extensions用来自动添加后缀寻找文件(import或者export的时候)

    alias用来添加路径别名的,简化后续填写的路径 __dirname是指当前项目的根目录

    1. const path = require("path")
    2. const { VueLoaderPlugin } = require("vue-loader/dist/index")
    3. module.exports = {
    4. entry: "./src/main.js",
    5. output: {
    6. filename: "bundle.js",
    7. path: path.resolve(__dirname, "./build"),
    8. // assetModuleFilename: "abc.png"
    9. },
    10. resolve: {
    11. extensions: [".js", ".json", ".vue", ".jsx", ".ts", ".tsx"],
    12. alias: {
    13. utils: path.resolve(__dirname, "./src/utils")
    14. }
    15. },
    16. module: {
    17. rules: [
    18. ]
    19. },
    20. plugins: [
    21. new VueLoaderPlugin()
    22. ]
    23. }

     

    1

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    react native Switch动态改变开关
    Smart-tools 产品介绍
    问题解决:MapReduce输出结果乱码(Eclipse)
    SpringCloud学习笔记(二)
    css的三大特性
    k8s手动下载镜像、通过容器创建镜像方法
    【100个 Unity实用技能】 | Unity自定义脚本的初始模版
    golang使用mongo-driver操作——增(进阶)
    电子商务的三个要素是人、货、场
    【Linux详解】冯诺依曼架构 | 操作系统设计 | 斯坦福经典项目Pintos
  • 原文地址:https://blog.csdn.net/weixin_56663198/article/details/130899968