前端工程化第三章:webpack5基础(下)

news2024/11/28 12:56:08

文章目录

  • 1. TypeScript支持(ts-loader)
    • 1.1. ts-loader
      • 1.1.1. webpack.config.js
      • 1.1.2. tsconfig.json
      • 1.1.3. src/index.ts
    • 1.2. 使用babel-loader将ts转换为js
      • 1.2.1. webpack.config.js
      • 1.2.2. src/index.ts
  • 2. 代码规范检查(Eslint)
    • 2.1. webpack.config.js
    • 2.2. .eslintrc
    • 2.3. src/index.ts
  • 3. 图片处理(png/jpg/gif/svg等)
    • 3.1. asset模块
      • 3.1. webpack.config.js
      • 3.1.2. .eslintrc
      • 3.1.3. src/index.js
    • 3.2. 图片压缩(优化)
      • 3.2.1. 安装 `image-webpack-loader`
      • 3.2.2. webpack.config.js
    • 3.3. 响应式图片
      • 3.3.1. 安装
      • 3.3.2. webpack.config.js
      • 3.3.3. src/index.js
    • 3.4. 雪碧图
      • 3.4.1. 安装
      • 3.4.2. src/images/icons
      • 3.4.3. webpack.config.js
      • 3.4.4. src/index.js
      • 3.4.5. icon.less

1. TypeScript支持(ts-loader)

TypeScript 是一种静态类型的编程语言,是 JavaScript 的一个超集。它由 微软开发,提供了许多 JavaScript 不支持的功能,比如类型检查接口和类

1.1. ts-loader

ts-loaderWebpack 中的一个加载器,用于将 TypeScript 代码转换成 JavaScript 代码。它是基于 typescript 编译器实现的,支持所有 TypeScript 的语法和特性,可以帮助开发者在 Webpack 中使用 TypeScript 进行开发。

1.1.1. webpack.config.js

将入口文件改为index.ts, 在module中配置ts-loader:

在这里插入图片描述
具体代码如下

const path = require("path"); // nodeJs 的 path 模块
const HtmlWebpackPlugin = require("html-webpack-plugin"); // 生成html的插件,并自动将打包后的 JS、CSS 文件引入 HTML 文件中
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 将css代码从js文件中拆分出来

module.exports = {
  mode: "development", // 模式为开发模式
  devtool: false, // 不生成sourcemap
  entry: "./src/index.ts", // entry:默认的路径是src/index.js,也可以自定义
  output: {
    path: path.resolve(__dirname, "dist"), // 打包文件的输出位置
    filename: "main.js", // 打包后的文件名
    clean: true, // 在新的打包之前清除历史文件
  },
  devServer: {
    static: path.join(__dirname, "public"), // 静态资源路径
    compress: true, // 是否开始gzip压缩
    host: "localhost", // 服务器主机名
    port: 80, // 服务器端口名
    open: true, //启动项目后是否自动打开浏览器
    hot: true, // 是否启动模块热替功能
    historyApiFallback: true, // 处理单页应用的路由问题
    watchFiles: ["src/**/*.js", "src/**/*.css"], // 需要监听的文件列表,当这些文件发生变化时,自动重启服务器
  },
  module: {
    rules: [
      {
        test: /\.ts$/, // 匹配以 .ts 结尾的文件
        use: ["ts-loader"],
        exclude: /node_modules/, // 不匹配的文件。排除 node_modules 文件夹,不进行 ts 匹配
      },
      {
        test: /\.js$/, // 匹配以 .js 结尾的文件
        use: [
          {
            loader: "babel-loader",
            // options: { // 可以直接在这里配置预设,也可以在 .babelrc 文件中配置,也可以在babel.config.js 中配置
            //	 presets: ["@babel/preset-env"]
            // }
          },
        ],
      },
      {
        test: /\.css$/, // 匹配以 .css 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
          "postcss-loader",
        ], // 注意:loader执行顺序是从后往前执行,顺序不能改变
      },
      {
        test: /\.less$/, // 匹配以 .less 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
          "postcss-loader",
          "less-loader",
        ],
      },
      {
        test: /\.scss$/, // 匹配以 .scss 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
          "postcss-loader",
          "sass-loader",
        ],
      },
    ],
  },
  plugins: [
    // 插件使用时,像构造函数一样直接 new 即可
    // template:模板文件的路径
    // filename:打包后生成的文件名
    // chunk:代码块
    new HtmlWebpackPlugin({ template: "./src/index.html" }),
    new MiniCssExtractPlugin(),
  ],
};

1.1.2. tsconfig.json

要使用ts,必须配置tsconfig.json文件
在这里插入图片描述
具体代码如下

{
  "compilerOptions": {
    "noImplicitAny": true, // 不能有隐藏的 any 类型
    "moduleResolution": "node" // 使用 nodeJs 的模块规则
  }
}

1.1.3. src/index.ts

新建一个ts文件,随便写点ts代码:

在这里插入图片描述
具体代码如下

let arr: number[] = [1, 2, 3];
console.log(arr);

运行 npm run build,查看main.js文件,可以看到ts代码已经被转换成了js代码:

在这里插入图片描述
注意:此处如果编译报以下错误,那么需要安装parse-json
在这里插入图片描述

npm install --save parse-json

1.2. 使用babel-loader将ts转换为js

  • @babel/preset-typescript 是一个babel的一个预设,用于将ts代码转换为js代码

1.2.1. webpack.config.js

配置@babel/preset-typescript:

在这里插入图片描述
具体代码如下

{
  test: /\.ts$/, // 匹配以 .ts 结尾的文件
  // use: ["ts-loader"], // 由于ts-loader存在一定的性能问题,因此这里我们可以配置 @babel/preset-typescript 来转换ts代码
  use: [
    {
      loader: "babel-loader",
      options: {
        presets: ["@babel/preset-typescript"],
      },
    },
  ],
  exclude: /node_modules/, // 不匹配的文件。排除 node_modules 文件夹,不进行 ts 转换
},

1.2.2. src/index.ts

添加一点ts代码:
在这里插入图片描述
具体代码如下

let arr: number[] = [1, 2, 3];
console.log(arr);

type Add = () => void;

let add: Add = () => {
  console.log("这是一个函数");
};
add();

运行 npm run build 后,可以看到刚添加的ts代码已经被转换成js代码了:

在这里插入图片描述

2. 代码规范检查(Eslint)

  • ESLint 是一款 JavaScript 代码检查工具,它可以帮助开发者在编写代码时检查错误、保持一致的风格和避免常见的陷阱。ESLint 可以使用预定义的规则,也可以通过自定义规则来满足特定的项目需求。

  • ESLint 可以与各种编辑器集成,包括 Visual Studio Code、Sublime Text 和 Atom 等。它还可以与构建工具集成,例如 Webpack 和 Gulp。

  • ESLint 的配置文件是一个 JSON 文件,其中包含要使用的规则和其他选项。ESLint 支持多种配置文件格式,包括 .eslintrc.eslintrc.js.eslintrc.yaml.eslintrc.json。开发者可以根据项目的需求选择适合自己的配置文件格式。

2.1. webpack.config.js

配置eslint插件:

const EslintPlugin = require("eslint-webpack-plugin");
module.exports = {
  // ......
  plugins: [
    // ......
    new EslintPlugin({
      // 这些类型的文件需要进行 eslint 代码检查
      extensions: ["js", "jsx", "ts", "tsx"],
    }),
  ],
};

2.2. .eslintrc

更多eslint规则
配置eslint规则:

在这里插入图片描述
具体代码如下

{
  "parser": "@typescript-eslint/parser", // 解释器
  "plugins": ["@typescript-eslint"], // 插件
  "root": true,
  "env": {
    "node": true,
    "es6": true
  },
  "extends": [
    "eslint:recommended" // 继承 recommended 代码规范
  ],
  "parserOptions": {
    "ecmaVersion": 2021 // es 规范
  },
  "rules": { // 配置一些规则
    "no-console": "warn", // 不允许调用 console 对象,否则会报警告
    "no-unused-vars": "warn" // 未使用的变量报警告
  }
}

2.3. src/index.ts

let arr: number[] = [1, 2, 3];
console.log(arr);

type Add = () => void;

let add: Add = () => {
  console.log("这是一个函数");
};
add();

let a: string = 'hello world';

编译后,可以看到此时报了一些警告:

在这里插入图片描述

按要求解决完代码中的console和变量:

let arr: number[] = [1, 2, 3];
arr.push(4);

type Add = () => void;

let add: Add = () => {
  
};
add();

let a: string = 'hello world';
a + "你好";

再次编译已经没有警告了:

在这里插入图片描述

3. 图片处理(png/jpg/gif/svg等)

3.1. asset模块

Webpack 5 中,可以使用 type: 'asset/xxxx' 配置选项来处理图片等资源文件。

type 类型有四种

  • asset/resource:每个资源文件作为单独的文件输出,并返回 URL。
  • asset/inline:生成 base64 编码的字符串直接嵌入到输出的 JavaScript bundle 中。可以减少请求,但会加大体积。
  • asset/source:将文件处理和捆绑为原始源代码。文件内容会作为字符串加载,并可直接在捆绑包中使用。
  • asset:会自动选择导出数据 URI 还是生成单独的文件,可以设置文件大小限制来实现。

3.1. webpack.config.js

module.exports = {
  // ......
  entry: "./src/index.js", // entry:默认的路径是src/index.js,也可以自定义
  // ......
  devServer: {
  	// ......
  },
  module: {
    rules: [
      {
        test: /\.png$/,
        type: "asset/resource",
      },
      {
        test: /\.jpg$/,
        type: "asset/inline",
      },
      {
        test: /\.bmp$/,
        type: "asset/source",
      },
      {
        test: /\.svg$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            maxSize: 1024, // 小于1024的"asset/resource",大于1024的"asset/inline"
          },
        },
      },
      // ......
    ],
  },
};

3.1.2. .eslintrc

注意:需要在eslintrc文件中添加browser:true,否则index.js中使用document对象会报错

在这里插入图片描述

3.1.3. src/index.js

测试一下asset这几种状态:

// 图片处理
let imgPng = require("./images/baidu.png");
let imgJpg = require("./images/hao123.jpg");
let imgBmp = require("./images/360.bmp");
let imgSvg = require("./images/google.svg");

let image = document.createElement("img");
image.src = imgPng;
console.log(image, "png");

image.src = imgJpg;
console.log(image, "jpg");

image.src = imgBmp;
console.log(image, "jpg");

image.src = imgSvg;
console.log(image, "jpg");
  • asset/resource

    在这里插入图片描述
    运行 npm run dev 后,查看控制台

    在这里插入图片描述

  • asset/inline
    在这里插入图片描述
    运行 npm run dev 后,查看控制台
    在这里插入图片描述

  • asset/source

    在这里插入图片描述

    运行 npm run dev 后,查看控制台

    在这里插入图片描述

  • asset
    先看一下这个图片的大小是1829 byte,我们会测试一次大于设置的尺寸,测试一次小于设置的尺寸
    在这里插入图片描述
    1.测试大于maxSize:

    在这里插入图片描述
    运行 npm run dev 后,查看控制台

    在这里插入图片描述

    2.测试小于maxSize:

    在这里插入图片描述
    运行 npm run dev 后,查看控制台

    在这里插入图片描述

3.2. 图片压缩(优化)

  • image-webpack-loader 可以在 Webpack 打包过程中对图片进行优化和压缩,从而减小图片文件的大小,提高页面加载速度和响应速度
    • optipng:用于压缩PNG图片的配置项
    • pngquant:同样用于压缩PNG图片的配置项,可以设置图片质量和压缩速度
    • svgo:用于压缩SVG图片的配置项,包含多个插件
    • gifsicle:用于压缩Gif图片的配置项
    • webp:用于将JPG/PNG图片压缩并转换为WebP图片格式的配置项

3.2.1. 安装 image-webpack-loader

cnpm install image-webpack-loader --save

3.2.2. webpack.config.js

module.exports = {
  // ......
  module: {
    rules: [
      // ......
      {
        // 匹配文件的正则表达式,这里表示匹配JPG、PNG、GIF和SVG格式的图片文件
        test: /\.(jpe?g|png|gif|svg)$/i,
        use: [
          {
            // 使用image-webpack-loader对图片进行优化和压缩
            loader: "image-webpack-loader",
            options: {
              // 是否禁用图片优化和压缩
              disable: process.env.NODE_ENV === "development",
              mozjpeg: {
                progressive: true, // 是否开启渐进式JPEG,可以有效提升JPEG图片加载速度
                quality: 65, // 压缩JPEG图片的质量,取值范围为0到100,值越大质量越好但文件越大
              },
              optipng: {
                enabled: true, // 是否开启PNG图片的优化,可以有效提升PNG图片加载速度
              },
              pngquant: {
                // 压缩PNG图片的质量范围,取值范围为0到1,值越大质量越好但文件越大
                // 第一个数字表示压缩质量的下限,第二个数字表示压缩质量的上限
                quality: [0.65, 0.9],
                speed: 4, // 压缩PNG图片的速度,取值范围为1到10,值越大速度越快但质量越低
              },
              svgo: {
                plugins: [
                  // 压缩SVG图片的插件列表,这里包含removeViewBox和cleanupIDs两个插件
                  {
                    //用于删除SVG图片中的viewBox属性
                    //viewBox属性是用来指定SVG视口范围的,它的值是一个矩形框的坐标和宽高
                    removeViewBox: false,
                  },
                  {
                    //用于删除SVG图片中的无用ID属性
                    cleanupIDs: true,
                  },
                ],
              },
              gifsicle: {
                interlaced: true, // 是否开启GIF图片的隔行扫描,可以有效提升GIF图片加载速度
              },
            },
          },
        ],
      },
      // ......
    ],
  },
};

运行npm run build后,可以看到图片体积明显变小了:

在这里插入图片描述

3.3. 响应式图片

  • 响应式图片是指能够根据设备屏幕大小分辨率等因素动态调整显示大小清晰度的图片。
  • responsive-loader 是一个 webpackloader,用于实现响应式图片的功能。它可以根据设备屏幕大小和像素密度等因素自动调整图片大小和清晰度,从而提高网站的用户体验和性能。
    • sizes:用于指定不同尺寸的图片大小。在这个例子中,我们指定了3个不同的图片大小,分别是375px(iphone6/7/8/X尺寸)768px(ipad尺寸)1024px(ipadPro尺寸)。当加载图片时,responsive-loader 会根据设备的屏幕大小和像素密度等因素自动选择最合适的图片大小。
    • adapter:用于指定图片处理库。在这个例子中,我们使用了 sharp 库,它是一个高性能的图片处理库,可以用来自动调整图片大小和清晰度
  • srcsetsizesHTMLimg 标签的两个属性,用于实现响应式图片的功能。
    • srcset 属性用于指定不同尺寸和清晰度的图片版本,它的值是一个以逗号分隔的图片列表,每个图片元素包含了图片 URL 和对应的宽度或像素密度等信息。
    • sizes 属性用于指定图片在不同屏幕尺寸下的显示大小,它的值是一个以逗号分隔的尺寸列表,每个尺寸元素包含了媒体查询和对应的尺寸信息。

3.3.1. 安装

cnpm i responsive-loader sharp --save

3.3.2. webpack.config.js

在这里插入图片描述

module.exports = {
  module: {
    rules: [
      // ......
      {
        test: /\.png$/,
        //oneOf是一个优化选项,用于提高打包的速度
        oneOf: [
          {
            //resourceQuery是一个用于匹配请求资源的URL中查询字符中是否包含sizes,如果包含则切图,不包含则执行下面的asset/resource
            resourceQuery: /sizes/,
            use: [
              {
                loader: "responsive-loader",
                options: {
                  adapter: require("responsive-loader/sharp"),
                },
              },
            ],
          },
          {
            type: "asset/resource",
          },
        ],
      },
      // ......
    ],
  },
};

3.3.3. src/index.js

在这里插入图片描述

import bgPng from "./images/bg.png?sizes[]=375,sizes[]=768,sizes[]=1024";
console.log(bgPng, "bgPng");
let image = new Image();
// let image = document.createElement("img"); // 等效上一行的写法
image.srcset = bgPng.srcSet;
// 屏幕宽度大于768px,则使用768px图片,并且图片宽度是屏幕的可视区域宽度
image.sizes = `(min-width: 768) 768px,100vw`;
document.body.appendChild(image);

运行npm run build,可以看到图片被打包成不同尺寸:

在这里插入图片描述

运行npm run dev启动项目,切换不同屏幕尺寸可以看到效果如下:

在这里插入图片描述
也可以通过审查这个元素去查看图片渲染大小:

在这里插入图片描述

3.4. 雪碧图

  • 雪碧图(Sprite)是指将多个小图片(如图标、小按钮等)合并成一张大图片,通过CSS的 background-position 属性来控制显示不同的小图片。它的优点是减少HTTP请求次数提高页面的加载速度和性能
  • webpack-spritesmith 是一个 webpack 插件,用于生成雪碧图。它可以将多个小图片合并成一张大图片,并在生成的 CSS 文件中自动生成 background-position 属性和样式代码,简化了雪碧图的生成和使用过程。

3.4.1. 安装

cnpm install --save webpack-spritesmith

3.4.2. src/images/icons

准备一个 icons 文件夹,放入事先下载的png图片:

在这里插入图片描述

3.4.3. webpack.config.js

在这里插入图片描述
在这里插入图片描述

const path = require("path"); // nodeJs 的 path 模块

const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 将css代码从js文件中拆分出来

const WebpackSpritesmith = require("webpack-spritesmith"); // 生成雪碧图插件

module.exports = {
  module: {
    rules: [
      // ......
      {
        test: /\.less$/, // 匹配以 .less 结尾的文件
        use: [
          process.env.NODE_ENV === "development"
            ? "style-loader"
            : MiniCssExtractPlugin.loader,
          "css-loader",
          "postcss-loader",
          // "less-loader",
          {
            loader: "less-loader",
            options: {
              lessOptions: {
                paths: [path.resolve(__dirname, "src/sprite")],
              },
            },
          },
        ],
      },
      // ......
    ],
  },
  plugins: [
    // ......
    new WebpackSpritesmith({
      // 具体配置可查看github
      src: {
        //指定输入的文件
        cwd: path.resolve(__dirname, "src/images/icons"),
        glob: "**/*.png",
      },
      target: {
        //指定输出的文件路径
        image: path.resolve(__dirname, "src/sprite/sprite.png"),
        css: path.resolve(__dirname, "src/sprite/sprite.less"),
      },
      apiOptions: {
        // 指定CSS文件应使用相对路径引用精灵图
        cssImageRef: "sprite/sprite.png",
      },
      spritesmithOptions: {
        algorithm: "top-down",
        padding: 10,
      },
    }),
  ],
};

3.4.4. src/index.js

在这里插入图片描述

/**
 * 6.雪碧图测试代码
 */
import "./icon.less";
let img1 = document.createElement("img");
img1.classList.add("icon-baidu");
document.body.appendChild(img1);

let img2 = document.createElement("img");
img2.classList.add("icon-hao123");
document.body.appendChild(img2);

let img3 = document.createElement("img");
img3.classList.add("icon-360");
document.body.appendChild(img3);

3.4.5. icon.less

@import "./sprite/sprite.less"; // 引用雪碧图文件
.icon-baidu {
  .sprite(@baidu);
}
.icon-hao123 {
  .sprite(@hao123);
}
.icon-360 {
  .sprite(@360);
}

运行 npm run dev 查看效果:

  • 首先根据我们的配置,生成一个src/sprite/sprite.less和一个src/sprite/sprite.png文件
    在这里插入图片描述

  • 其次我们在src/icon.less中导入的样式会生效

    在这里插入图片描述

  • 然后就可以看到页面上已经将图片渲染出来了,并且是采用的雪碧图,是通过background-position属性实现的,减少了http请求,有效的提高了加载性能
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「深度学习之优化算法」(十八)头脑风暴算法

1. 头脑风暴算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   可能大家对“头脑风暴”这个词不怎么熟,毕竟是外来词汇,其大概含义就是分组讨论,畅所欲言。   头脑风暴算法(Brain Storm Optimization)是根据人们进行“头脑风暴”讨论困难问题的解决方案的过…

RabbitMQ消息可靠性问题及解决

说明:在RabbitMQ消息传递过程中,有以下问题: 消息没发到交换机 消息没发到队列 MQ宕机,消息在队列中丢失 消息者接收到消息后,未能正常消费(程序报错),此时消息已在队列中移除 …

Android WiFi框架概览

概览 Android 提供默认 Android 框架实现,其中包括对各种 WLAN 协议和模式的支持,这些协议和模式包括: WLAN 基础架构 (STA)网络共享模式或仅限本地模式下的 WLAN 热点 (Soft AP)WLAN 直连(点对点)WLAN 感知 (NAN)WL…

3.19 Bootstrap 面板(Panels)

文章目录 Bootstrap 面板(Panels)面板标题面板脚注带语境色彩的面板带表格的面板带列表组的面板 Bootstrap 面板(Panels) 本章将讲解 Bootstrap 面板(Panels)。面板组件用于把 DOM 组件插入到一个盒子中。创…

Python采集某网站小视频内容, m3u8视频内容下载

目录标题 前言环境使用:模块使用:代码实现步骤代码展示尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 环境使用: python 3.8 运行代码 pycharm 2021.2 辅助敲代码 模块使用: import requests >>> pip install requests 内置模块 你安装好python环境就…

【机器学习】支持向量机SVM入门

优化目标 相较于之前学习的线性回归和神经网络,支持向量机(Supprot Vector Machine,简称SVM)在拟合复杂的非线性方程的时候拥有更出色的能力,该算法也是十分经典的算法之一。接下来我们需要学习这种算法 首先我们回顾…

ffplay播放器剖析(4)----音频输出和音频重采样流程

文章目录 1. 音频输出模块1.1 音频输出流程1.2 音频输出模型图 2. 打开SDL音频设备audio_open详解sdl_audio_callbackaudio_decode_frame 3. 音频重采样样本补偿 1. 音频输出模块 1.1 音频输出流程 打开SDL音频设备,设置参数启动SDL音频设备播放SDL音频回调函数读取数据,也就…

虚拟仿真实验室未授权获取账号密码

你应该在以后短暂的岁月里,真正活的不负众爱 漏洞描述 虚拟仿真实验室存在未授权访问漏洞,通过访问构造的Url可以获取敏感信息 漏洞复现 访问漏洞url: /admin/student/studentlist.html?page1成功获取所有用户的账号密码信息 文笔生疏…

遥感目标检测(2)--SCRDet

目录 一、概述 二、三个挑战 三、网络结构 1、SF-Net 2、MDA-Net(Multi-Dimensional Attention Network) 3、Rotation Branch 四、损失函数 五、实验 一、概述 SCRDet(Towards More Robust Detection for Small,Cluttered and Rotate…

实验数据origin作图使用经验总结

使用Origin绘制实验数据图表时,可以遵循以下经验总结: 选择合适的图表类型: 根据实验数据的性质和目的,选择合适的图表类型,例如散点图、折线图、柱状图、饼图等。确保图表类型能够清晰地展示数据趋势和关系。 规范坐…

jenkins中运行python脚本时,报错:collecting ... collected 0 items

【问题描述】:jenkins在windows环境下运行python脚本时总是报collecting … collected 0 items 【问题定位】:jenkins工作目录和python文件目录不一样导致 【解决办法】:需要先把路径切换到项目目录下,再进行运行xxx.py文件&…

zabbix钉钉报警

登录钉钉客户端,创建一个群,把需要收到报警信息的人员都拉到这个群内. 然后点击群右上角 的"群机器人"->"添加机器人"->"自定义", 记录该机器人的webhook值。 添加机器人 在钉钉群中,找到只能群助手 添加机器人 选择自定义机…

springboot 根据不同环境 ,配置不同日志输出路径

logback-spring.xml<?xml version"1.0" encoding"UTF-8"?> <!-- scan&#xff1a;当此属性设置为true时&#xff0c;配置文件如果发生改变&#xff0c;将会被重新加载&#xff0c;默认值为true。 scanPeriod&#xff1a;设置监测配置文件是否有…

《零基础入门学习Python》第057讲:论一只爬虫的自我修养5:正则表达式

如果你在课后有勤加练习&#xff0c;那么你对于字符串的查找应该是已经深恶痛绝了&#xff0c;你发现下载一个网页是很容易的&#xff0c;但是要在网页中查找到你需要的内容&#xff0c;那就是困难的&#xff0c;你发现字符串查找并没有你想象的那么简单&#xff0c;并不是说直…

macOS mysql 8.0 忘记密码

╰─➤ mysql -V mysql Ver 8.0.33 for macos13.3 on arm64 (Homebrew)mysql.server status mysql.server stopskip-grant-tables 启动mysql ─➤ /opt…

Elemui表单合并

原代码形式 <template><el-table:data"tableData"borderstyle"width: 100%"><el-table-columnprop"date"label"日期"width"180"></el-table-column><el-table-columnprop"name"label…

Qt6 Qt Quick UI原型学习QML第五篇

文章目录 效果QML语法父文件 MyQML.qmlQML语法子文件 TLineEditV1.qmlQML语法子文件 TTextEdit.qml 效果 QML语法父文件 MyQML.qml import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12Window {id: windowvisible: truewidth: 600height: 600title:…

【043】解密C++ STL:深入理解并使用 list 容器

解密C STL&#xff1a;深入理解并使用list容器 引言一、list 容器概述二、list容器常用的API2.1、构造函数2.2、数据元素插入和删除操作2.3、大小操作2.4、赋值操作2.5、数据的存取2.6、list容器的反转和排序 三、使用示例总结 引言 &#x1f4a1; 作者简介&#xff1a;一个热爱…

详细解析python视频选择--【思维导图知识范围】

C ,JAVA JAVAWEB ,微信小程序等 都有视频选择的分析。 语言视频选择收录专辑链接C张雪峰推荐选择了计算机专业之后-在大学期间卷起来-【大学生活篇】JAVA黑马B站视频JAVA部分的知识范围、学习步骤详解JAVAWEB黑马B站视频JAVAWEB部分的知识范围、学习步骤详解SpringBootSpringB…

Linux QT通过NFS挂载到Linux开发板上

Linux QT通过NFS挂载到Linux开发板上 说明&#xff1a;这里使用的Linux开发板是正点原子的阿尔法开发板 创建NFS 环境 NFS简介 网络文件系统&#xff0c;英文 Network File System(NFS)&#xff0c;是由 SUN 公司研制的 UNIX 表示层协议 (presentation layer protocol)&…