前端工程化基础(三):Webpack基础

Webpack和打包过程

学习webpack主要是为了了解目前前端开发的整体流程,实际开发中,我们并不需要去手动配置,因为框架的脚手架都已经帮助我们完成了配置

内置模块path

该模块在Webpack中会经常使用

从路径中获取信息

const path = require("path");
const pathStr = "D:/Mrzhang/Study/前端/node/code/zc_test/src/index.js";//获取文件的父文件夹
console.log(path.dirname(pathStr)); //D:/Mrzhang/Study/前端/node/code/zc_test/src
//获取文件名
console.log(path.basename(pathStr)); //index.js
//获取扩展名
console.log(path.extname(pathStr));//.js

将多个路径拼接在一起(相对路径)

const path = require("path");
const pathStr1 = "./src/view";
const pathStr2 = "../index.js";
const pathStr3 = "./index.js";console.log(path.join(pathStr1, pathStr2)); //src\index.js
console.log(path.join(pathStr1, pathStr3)); //src\view\index.js

将多个路径拼接在一起(返回绝对路径)

  • 使用 **path.resolve()**方法,进行拼接
  • 当遇到 /xxx即为终止的解析,生成绝对路径
  • 在 **resolve()**方法中,里面的路径,会从右往左进行解析,直到生成一个绝对路径就会停止
  • 在所有 路径都解析完成之后,还没有生成绝对路径,就会使用当前工作目录
  • 路径中零长度的path会被忽略
const path = require("path");console.log(path.resolve("/src", "/txt.js")); //在"txt.js"就会停止解析 D:\txt.js
console.log(path.resolve("/src", "./txt.js")); // 在"/src"停止解析,D:\src\txt.js
console.log(path.resolve("/src/view", "../txt.js")); //D:\src\txt.js

认识Webpack

  • 官方的解释:Wevpack是一个静态的模块化打包工具,为现代的JS应用程序
  • 实际上会将我们编写的代码,打包成静态的资源
  • 打包:webpack可以帮助我们进行打包,它是一个打包工具
  • 静态:webpack可以将我们的代码打包成静态资源
  • **模块化:**webpack默认支持各种模块化开发,ESModule、CommonJS,AMD等
  • **现代的:**因为前端的不断发展,面临着各种各样的问题,催生了webpack的出现

image.png

Webpack使用前提

webpack的中文官方文档 中文文档

  • Webpack的运行是依赖Node环境的,所以电脑上需要右Node环境

Webpack的安装

  • webpack的安装目前分为两个:webpack和webpack-cli
  • webpack:主要用于代码中使用,通过代码对代码进行打包
  • webpack-cli:主要用于命令行中使用,通过命令行对代码进行打包
  • npm install webpack webpack-cli进行局部安装,若有需要可以进行全局安装

Webpack配置文件

  • 当我们在命令行执行 webpack命令,Webpack会默认去寻找目录中的 src/index.js文件
  • 并将该文件以及该文件引用的其他依赖进行打包,生成 dist文件夹,里面包含 main.js

image.png

  • 而默认的打包行为,不能满足我们的需求,因此,这时候可以在项目目录中创建webpack的配置文件 webpack.config.js
const path = require("path");//导出配置信息
//因为webpack基于node,所以使用CommonJS
module.exports = {//需要对哪个文件进行打包entry: "./src/main.js",//打包后的文件名,文件夹名称以及路径output: {filename: "bundle.js",//这里的path需要使用绝对路径,因此需要使用node中的path模块path: path.resolve(__dirname, "./dist"),},
};
  • 当我们在命令行输入 npx webpack

    • webpack就会寻找 webpack.config.js中的配置信息,完成代码的打包
  • 而每次输入 npx webpack会很麻烦,因此,我们可以在 package.json文件中的 scripts属性进行配置

"scripts": {"build":"webpack"},
  • 之后我们就可以通过输入 npm run build进行文件的打包

css-loader的使用

Webpack默认是可以打包js文件的,但是对于其他文件在默认情况下不能进行打包

因此在打包其他文件的时候,需要用到对应文件的loader

css也不例外

  • 首先应当先安装 css-loader npm install css-loader
  • 安装完成后,需要在 webpack.config.js进行配置
    • 目的是告诉webpack在遇到 css文件的时候,使用哪个loader
    • module.exports中创建module对象
    • module对象中,创建rules规则数组
    • rules数组中,创建一个又一个的对象,用于告诉webpack识别什么文件,使用什么loader
    • 对象中,使用test设置识别的文件,use使用相关loader
    • loader有多个内容的时候,是从后往前识别的,先识别后面,再识别前面
const path = require("path");//导出配置信息
//因为webpack基于node,所以使用CommonJS
module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",//这里的path需要使用绝对路径,因此需要使用node中的path模块path: path.resolve(__dirname, "./dist"),},//在module设置不同文件的loadermodule: {//因为loader会有很多,所以采用数组的方式rules: [{//告诉webpack匹配什么文件//在后面使用正则表达式test: /\.css$/,//使用什么laoder处理,//使用数组类型,因为一个文件有可能使用多个loader//css-loader仅是可以识别css文件,并不能将样式添加进去//style-loader是将样式添加到元素中//因为先识别css-loader,所以要写在后面use: [{ loader: "style-loader" }, { loader: "css-loader" }],},],},
};

对less文件处理

与处理css文件类似

  • 首先通过 npm install less-loader安装less-loader
  • 之后对 webpack.config.js进行配置
const path = require("path");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},module: {rules: [{test: /\.css$/,use: [{ loader: "style-loader" }, { loader: "css-loader" }],},{//匹配less文件test: /\.less$/,//先对less文件进行解析//将less文件生成的css进行解析//最后将样式进行解析//这是简写use: ["style-loader", "css-loader", "less-loader"],},],},
};

postcss-loader

这是一个工具,可以通过引入插件的方式,将我们写的css,自动做一个浏览器的适配,注意,需要安装相关插件

  • 首先使用 npm install postcss-loader安装post-loader
  • 之后在 module中引入 post-loader即可
const path = require("path");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},module: {rules: [{test: /\.css$/,use: [{ loader: "style-loader" }, { loader: "css-loader" },{loader:"postcss-loader"}],},{//匹配less文件test: /\.less$/,//先对less文件进行解析//将less文件生成的css进行解析//最后将样式进行解析//这是简写use: ["style-loader", "css-loader", "less-loader"],},],},
};
  • 但是这样引入,并不能实现 css样式浏览器适配的打包,需要安装其余的插件

  • 通过 npm install autoprefixer安装插件即可

  • 之后对 postcss-loader进行配置

const path = require("path");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},module: {rules: [{test: /\.css$/,use: [{ loader: "style-loader" },{ loader: "css-loader" },{loader: "postcss-loader",//对某个loader进行单独的配置options: {//loader中设置使用的插件postcssOptions: {plugins: ["autoprefixer"],},},},],},{test: /\.less$/,use: ["style-loader", "css-loader", "less-loader"],},],},
};
  • 同时 postcss-loader的配置可以单独使用一个文件

  • 创建 postcss.config.js

    • 在webpack.config.js使用 **loader:“postcss-loader”**会自动查找 postcss.config.js配置文件
module.exports = {plugis: ["autoprefixer"],
};//在webpack.config.js文件中,直接使用loader:"postcss-loader"即可

postcss-preset-env

上面我们用到了postcss的一个插件,而postcss-preset-env是将常用的插件集成到了一起

  • 此插件,继承了postcss常用的插件,包含上面提到过的 autoprefixer
  • 使用 npm install postcss-preset-env安装插件
  • webpack.config.js文件中使用该插件
module.exports = {plugis: ["post-preset-env"],
};

Webpack打包图片

在webpack环境中,每一个文件都是模块,只需要引入模块即可

import testImg from “./img/test.jpg”;

基本使用

  • 在webpack5之前对图片资源进行打包的时候,是需要安装一些loader的,raw-loader url-loader file-laoder

  • 在webpack5之后,我们可以直接使用 **资源模块类型(asset module type)**来替代上面的loader,即不用单独安装以上的loader

  • 我们仅需在 webpack.config.js的module属性中完成配置即可

const path = require("path");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},module: {rules: [{test: /\.css$/,use: ["style-loader", "css-loader", "postcss-loader"],},{test: /\.less$/,use: ["style-loader", "css-loader", "less-loader", "postcss-loader"],},//对图片资源进行打包设置{test: /\.(png|jpe?g|svg)/,type: "asset",},],},
};

认识 asset module type

  • 在上面的配置中,我们设置了type:asset

  • type的类型有以下设置

    • **asset/resource:**发送一个单独的文件并导出URL
      • 之前通过file-loader实现
    • **asset/inline:**导出一个资源的data URI
      • 之前通过url-loader实现
    • **asset/source:**导出资源的源代码
      • 之前通过raw-loader实现
    • asset:在导出一个data URI和发送一个单独的文件之间自动选择
      • 之前通过url-loader,并且配置资源体积限制实现
  • asset/resource:使用该设置,会将图片打包成单独的单独的文件,放在dist文件夹中,通过url进行引入

    • 缺点就是,每一张图片都会进行一次网络请求,图片资源过多的时候,网络请求就会过多

image.png

  • **asset/inline:**使用该设置,会将图片设置成base64编码的格式,放在 bundle.js文件中
    • 缺点就是,当图片资源过大的时候,会增加bundle.js文件的体积,造成下载资源缓慢

image.png

  • asset:会根据图片资源的大小,去判断打包成新的文件,还是打包成base64编码格式
    • webpack.config.js中进行设置
const path = require("path");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},module: {rules: [{test: /\.css$/,use: ["style-loader", "css-loader", "postcss-loader"],},{test: /\.less$/,use: ["style-loader", "css-loader", "less-loader", "postcss-loader"],},//对图片资源进行打包设置{test: /\.(png|jpe?g|svg)/,type: "asset",//设置多大的图片会进行base64编码parser: {dataUrlCondition: {//单位是byte,60*1024代表60kb//60kb之前会生成base64编码//大于60kb会打包成单独的文件maxSize: 60 * 1024,},},},],},
};

对打包资源图片进行重命名

  • webpack.config.js中进行设置
  • 通过 generator进行设置
const path = require("path");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},module: {rules: [{test: /\.css$/,use: ["style-loader", "css-loader", "postcss-loader"],},{test: /\.less$/,use: ["style-loader", "css-loader", "less-loader", "postcss-loader"],},//对图片资源进行打包设置{test: /\.(png|jpe?g|svg)/,type: "asset",//设置多大的图片会进行base64编码parser: {dataUrlCondition: {maxSize: 60 * 1024,},},generator: {//占位符//name:源文件名//ext:文件名的后缀.png  .jpg//hash:webpack生成的hash//前面可以加上路径,代表打包之后,放到哪个文件夹中filename: "img/[name]_[hash][ext]",},},],},
};

image.png

Webpack对js代码的babel处理

我们知道,webpack默认会对js文件进行打包的,但是仅仅是将代码进行压缩以及丑化

并不能将ES5+的代码转换成ES5的代码,保持浏览器的兼容

因此这时候需要用到babel工具

Babel工具

  • Babel是一个 **工具链,**主要用于就浏览器或者环境中将 ES5+的代码转换成ES5的代码
  • postcss工具类似,可以单独使用,不用借助于Webpack
  • 此处主要学习Webpack中的babel设置
  • 在webpack中使用 npm install babel-loader安装Babel工具

Babel预设babel/preset-env

常见的预设有三个env react TypeScript

  • 与postcss-loader类似,我们可以单独安装插件进行单独的配置
  • 但是随着插件数量的增多,有了预设插件 npm install @babel/preset-env
  • 安装完成之后,创建 babel.config.js文件,在里面完成配置
module.exports = {presets: ["@babel/preset-env"],
};
  • webpack.config.js中的配置
const path = require("path");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},module: {rules: [{//对js文件使用babel-loader工具test: /\.js/,//会自动去寻找babel.config.js中的设置use: ["babel-loader"],},{test: /\.css$/,use: ["style-loader", "css-loader", "postcss-loader"],},{test: /\.less$/,use: ["style-loader", "css-loader", "less-loader", "postcss-loader"],},//对图片资源进行打包设置{test: /\.(png|jpe?g|svg)/,type: "asset",parser: {dataUrlCondition: {maxSize: 60 * 1024,},},generator: {filename: "img/[name]_[hash][ext]",},},],},
};

Webpack文件路径的解析和配置

  • 在我们实际发开中,会引入很多不同的依赖,通过 import/require的方式进行引入
  • 而webpack通过 enhanced-resolve模块对我们引入文件的路径进行一个解析
  • webpack能够解析三种文件路径
    • 绝对路径
      • 此种路径不会再做解析
    • 相对路径
    • 模块路径(require(“vue”))
      • 在resolve.modules中指定所有目录的检索模块
      • 默认值是[“node_modules”],所以默认会从 node_modules中查找相应的文件
  • 那么怎么区分是文件还是文件夹呢

import {name} from “./until”

import {name} from “./until.js”

  • 如果是一个文件:
    • 如果文件具有扩展名,则直接打包文件
    • 否则,将会使用resolve.extensions选项作为文件扩展名的解析
const path = require("path");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},//对文件会自动进行添加后缀//即我们写出import {name} from "./until"这样的代码,会在until后面自动拼接extensions数组里面的内容resolve: {extensions: [".js", ".json", ".jsx", ".vue"],alias: {//最好使用绝对路径//现在 /untils就代表了.src/untilsutils: path.resolve(__dirname, ".src/untils"),},},module: {rules: [],},
};
  • 如果是一个文件夹
    • 会在文件夹中根据 resolve.mainFiles配置选项中指定的文件顺序查找
    • 默认值是 [index]
    • 再根据 resolve.extensions解析扩展名

Webpack常见的插件和模式

认识plugin

  • 很多人会吧 plugin插件Loader弄混
  • Loader是用于特定的模块类型进行转换:如对.css .vue .jsx等文件进行转换
  • plugin可以用于更加广泛的任务,比如打包的优化,资源的管理,环境变量的注入等等

CleanWebpackPlugin

当我们修改了代码,重新打包的时候,需要手动的清除dist,再重新打包才是最新的

我们可以借助 CleanWebpackPlugin插件,完成手动清除dist文件夹的操作

  • 首先,我们先安装此插件 npm install clean-webpack-plugin -D

  • 在 webpack.config.js文件中完成配置即可

const path = require("path");
//引入插件
const { CleanWebpackPlugin } = require("clean-webpack-plugin");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},//使用插件plugins: [new CleanWebpackPlugin()],resolve: { },module: {rules: [],},
};

HtmlWebpackPlugin

在之前的学习中,当我们打包一个项目,生成的dist文件中并没有html文件,此插件的目的就是自动生成一个html文件

  • 首先通过 npm install html-webpack-plugin -D安装此插件
  • 之后再 webpack.config.js文件中使用此插件
    • 此插件可以传入 title(设置html标题)、template(设置使用html的模板)
const path = require("path");
//引入插件
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},//使用插件plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({title: "zhangcheng",//自己引用模板的路径//   template: "相对路径",}),],resolve: { },module: {rules: [],},
};

DefinePlugin的介绍

此插件已经集成到了 webpack中,因此我们直接引入即可

  • 此插件的目的是,在打包代码的过程中,生成全局变量
  • 此插件默认配置了 process.env.NODE_ENV用于区分开发环境和生成环境的
const path = require("path");
//引入插件
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { DefinePlugin } = require("webpack");module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},//使用插件plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({title: "zhangcheng",//自己引用模板的路径//   template: "相对路径",}),new DefinePlugin({//使用key:value形式//value中会当成js代码counter: "1+1", //2counterStr: "'1+1'", //1+1字符串}),],resolve: { },module: {rules: [],},
};

Mode配置

  • Mode配置选项,可以告知 webpack使用相应模式的内置优化
    • 默认值是 production(什么都不配置的情况下)
    • 可选值有:none|development|production

image.png

const path = require("path");module.exports = {//Mode配置项mode:"development"entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./dist"),
},//使用插件plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({title: "zhangcheng",//自己引用模板的路径//   template: "相对路径",}),new DefinePlugin({//使用key:value形式//value中会当成js代码counter: "1+1", //2counterStr: "'1+1'", //1+1字符串}),],resolve: { },module: {rules: [],},
};

Webpack搭建一个本地服务器

前面的学习中,我们编写完成代码后,需要手动执行build命令,完成项目的打包,效率会很低

  • 通过Webpack搭建一个本地的服务器,代码发生变化的时候,就自动打包,并刷新浏览器

  • 需要借助webpack-dev-server来完成以上操作

  • 首先通过 npm install webpack-dev-server -D安装 webpack-dev-server

  • 在package.json文件的scripts中增加相应的脚本

"scripts": {"build": "webpack","serve": "webpack serve"},
  • 之后运行 npm run serve即可

  • 实际上webpack-dev-server会将代码打包到内存中,之后开启一个服务器,浏览器访问本地的服务器读取内存中的代码,并不会生成本地的文件

HMR模块热替换

  • 当我们只对某个模块发生了改变,则只会对改变的模块进行替换,添加以及删除等操作,从而无需刷新整个页面

  • HMR通过一下几种方式,来提高开发的效率

    • 不重新加载整个页面,这样可以保留某些应用程序的状态不丢失
    • 只更新需要变化的内容,节省开发的时间
    • 修改了css、js源代码,会立即在浏览器更新
  • 目前webpack是默认开启HMR的

    • 同时我们可以手动开启,在 webpack.config.js文件中,配置 devServer属性
    devServer:{hot:true
    }
    
  • 在代码中,我们需要指定哪些模块发生变化时,进行HMR

//判断是否开启了HMR
if(module.hot){module.hot.accept("./until.js",()=>{console.log("更新了")})
}

本地服务的配置

devServer:{hot:true,//修改端口号port:8888//修改主机host:"0.0.0.0"//自动打开浏览器open:true//是否对文件进行压缩compress:true
}

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

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

相关文章

[Python] 什么是逻辑回归模型?使用scikit-learn中的LogisticRegression来解决乳腺癌数据集上的二分类问题

什么是线性回归和逻辑回归? 线性回归是一种用于解决回归问题的统计模型。它通过建立自变量(或特征)与因变量之间的线性关系来预测连续数值的输出。线性回归的目标是找到一条直线(或超平面),使得预测值与观…

Eureka实操--下篇

高可用连接方式 1、双机部署:Eureka的server端相互注册,自动相互同步应用信息。Eureka的client端注册到任意一个上面即可,但为了保险起见,可以同时注册到两个上面,防止client注册到server1后,server1挂掉&…

7.NFS服务器

目录 1. 简介 1.1. NFS背景介绍 1.2. 生产应用场景 2. NFS工作原理 2.1. 示例图 2.2. 流程 3. NFS的使用 3.1. 安装 3.2. 配置文件 3.3. 主配置文件分析 3.4. 实验1 3.5. NFS账户映射 3.5.1. 实验2: 3.5.2. 实验3 4. autofs自动挂载服务 4.1. 产生原…

C语言——标准输出函数(printf、putchar和puts)

目录 1. 标准输入输函数出头文件2. printf2.1 函数申明2.2 基本用法2.3 占位符2.4 输出格式2.4.1 限定宽度2.4.2 总是显示正负号2.4.3 限定小数位数2.4.4 输出部分字符串 3. putchar3.1 函数申明3.2 基本用法 4. puts4.1 函数申明4.2 基本用法 1. 标准输入输函数出头文件 #inc…

undo log 和 redo log的区别

undo log 和 redo log的区别 缓冲池(Buffer Pool)是MySQL用于存储数据页的内存区域,它用于减少对磁盘的读写操作,提高数据库的访问速度。在MySQL中,数据被分为多个固定大小的数据页(通常为16KB&#xff09…

【代码随想录20】669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

目录 669.修剪二叉搜索树题目描述参考代码 108.将有序数组转换为二叉搜索树题目介绍参考代码 538.把二叉搜索树转换为累加树题目描述参考代码 669.修剪二叉搜索树 题目描述 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树…

前端添加富文本/Web 富文本编辑器wangeditor

官网wangEditor 需要引入两个文件 <link href"https://unpkg.com/wangeditor/editorlatest/dist/css/style.css" rel"stylesheet"> <script src"https://unpkg.com/wangeditor/editorlatest/dist/index.js"></script> 前端…

8.DNS域名解析服务器

目录 1. 概述 1.1. 产生原因 1.2. 作用&#xff1a; 1.3. 连接方式 1.4. 因特网的域名结构 1.4.1. 拓扑&#xff1a; 1.4.2. 分类 1.4.3. 域名服务器类型划分 2. DNS域名解析过程 2.1. 分类&#xff1a; 2.2. 解析图&#xff1a; 2.2.1. 图&#xff1a; 2.2.2. 过…

面试中问到的算法题。————目录树生成

前言 我在面试中遇到了算法题&#xff0c;也是我第一次面试&#xff0c;也不知道是太紧张了还是太久没刷算法题了&#xff0c;感觉压有点懵的状态&#xff0c;所以当时面试的时候没有做出来或者说只做了一半没有做完。 面试完成后&#xff0c;我又重新审视了一下题目&#xff…

【Linux】日志的实现——日志等级的分类、日志的实现和输出、日志在程序中的应用(以管道通信为例)

文章目录 日志实现1.日志的介绍2.日志的制作&#xff08;向屏幕直接打印&#xff09;2.1获取时间2.2输出内容2.3打印方式2.3.1向单个文件打印2.3.2向分类文件打印 3.日志的应用3.1以管道通信为例 日志实现 1.日志的介绍 Linux日志是以时间线-事件的方式记录操作系统和应用的信…

【软件工程】建模工具之开发各阶段绘图——UML2.0常用图实践技巧(功能用例图、静态类图、动态序列图状态图活动图)

更多示例图片可以参考&#xff1a;&#xff08;除了常见的流程图&#xff0c;其他都有&#xff09; 概念&#xff1a;类图 静态&#xff1a;用例图 动态&#xff1a;顺序图&状态图&活动图 1、【面向对象】UML类图、用例图、顺序图、活动图、状态图、通信图、构件图、部…

Redis核心技术与实战【学习笔记】 - 12.Redis删除数据后,为什么内存占用率还是很高?

前言 在使用 Redis 是&#xff0c;经常会遇到一个问题&#xff1a;明明做了数据删除&#xff0c;数据量不大&#xff0c;但是 使用 top 命令查看时&#xff0c;发现 Redis 还是占用了很多内存。 这是因为&#xff0c;当删除数据后&#xff0c;Redis 释放的内存空间会由内存分…

《数字化运维路线图》第三部分-数字化运维转型平台 震撼发布!

数字化转型已不再是企业追求效益最大化的手段&#xff0c;而是成为经济发展变革、提升国家数字竞争的核心动力。在此背景下&#xff0c;博睿数据继续发力&#xff0c;隆重推出「数字化运维转型平台」&#xff0c;汇聚了我们对数字化转型的深刻洞见与实践经验&#xff0c;以期为…

༺༽༾ཊ—Unity之-01-工厂方法模式—ཏ༿༼༻

首先创建一个项目&#xff0c; 在这个初始界面我们需要做一些准备工作&#xff0c; 建基础通用文件夹&#xff0c; 创建一个Plane 重置后 缩放100倍 加一个颜色&#xff0c; 任务&#xff1a;使用工厂方法模式 创建 飞船模型&#xff0c; 首先资源商店下载飞船模型&#xff0c…

《区块链简易速速上手小册》第6章:区块链在金融服务领域的应用(2024 最新版)

文章目录 6.1 金融服务中的区块链6.1.1 金融服务中区块链的基础6.1.2 主要案例&#xff1a;跨境支付6.1.3 拓展案例 1&#xff1a;去中心化金融&#xff08;DeFi&#xff09;6.1.4 拓展案例 2&#xff1a;代币化资产 6.2 区块链在支付系统中的作用6.2.1 支付系统中区块链的基础…

Linux - iptables 防火墙

一. 安全技术和防火墙 1.安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全…

专业数据治理:数据中台系统塑造企业未来的数字化运营管理新秩序

随着信息化进程的快速推进&#xff0c;数据已然成为企业最为宝贵的资产。对于众多企业而言&#xff0c;如何有效整合、治理以及充分利用这些数据&#xff0c;使之成为推动业务发展的引擎&#xff0c;成为当前难题。数据中台应运而生&#xff0c;它被认为是企业数字化转型的至关…

元素的显示与隐藏,精灵图,字体图标,CSSC三角

元素的显示与隐藏 类似网站广告&#xff0c;当我们点击关闭就不见了&#xff0c;但是我们重新刷新页面&#xff0c;会重新出现 本质&#xff1a;让元素在页面中隐藏或者显示出来。 1.display显示隐藏 2.visibility显示隐藏 3.overflow溢出显示隐藏 1.display属性&#xff08;…

远EC600E-CN LTE Standard模块硬件设计手册

EC600E-CN是一款LTE-FDD、LTE-TDD无线通信模块&#xff0c;支持LTE-FDD和LTE-TDD数据连接&#xff0c;可为客户在特定场景应用中提供语音功能。 模块封装紧凑&#xff0c;仅为22.9mm21.9mm2.4mm&#xff0c;能满足大部分M2M应用需求&#xff0c;例如自动化领域、智能计量、跟踪…