【WebPack】前端工程化

news2024/9/21 20:41:45

文章目录

  • 前端工程化
    • 一、前端工程化概念
    • 二、前端工程化优点
    • 三、前端工程化解决方案
    • 四、webpack 的基本使用
      • 4.1 什么是 webpack
      • 4.2 创建列表隔行变色项目
      • 4.3 安装 webpack
      • 4.4 配置 webpack
      • 4.5 自定义 打包入口与出口
    • 五、webpack 的插件使用
      • 5.1 webpack 常见插件
      • 5.2 webpack-dev-server
      • 5.3 html-webpack-plugin
    • 六、Loader加载器
      • 6.1 Loader加载器概述
      • 6.2 Loader加载器的条用过程
      • 6.3 打包加载 css 文件
      • 6.4 打包处理 less 文件
      • 6.5 打包处理 url 路径文件
      • 6.6 打包处理 js 高级语法
    • 七、打包发布
      • 7.1 配置打包发布
      • 7.2 统一生成 js 目录
      • 7.3 统一生成 image 目录
      • 7.4 自动清理 dist 目录
    • 八、Source Map
      • 8.1 使用场景
      • 8.2 webpack 开发环境下的 Source Map


前端工程化


一、前端工程化概念

前端工程化指的是:在企业级的前端项目开发中,把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。最终落实到细节上,就是实现前端的 “4 个现代化 ”:

  • 模块化(js 的模块化、css 的模块化、其它资源的模块化)

  • 组件化(复用现有的 UI 结构、样式、行为)

  • 规范化(目录结构的划分、编码规范化、接口规范化、文档规范化、 Git 分支管理)

  • 自动化(自动化构建、自动部署、自动化测试)


二、前端工程化优点

前端工程化的好处主要体现在如下两方面:

① 前端工程化让前端开发能够“自成体系”,覆盖了前端项目从创建到部署的方方面面

② 最大程度地提高了前端的开发效率,降低了技术选型、前后端联调等带来的协调沟通成本


三、前端工程化解决方案

早期的前端工程化解决方案:

  • grunt( https://www.gruntjs.net/ )

image-20230615184558751

  • gulp( https://www.gulpjs.com.cn/ )

image-20230615184618221

目前主流的前端工程化解决方案:

  • webpack( https://www.webpackjs.com/ )

image-20230615184538923

  • parcel( https://zh.parceljs.org/ )

image-20230615184645401

返回顶部


四、webpack 的基本使用

4.1 什么是 webpack

概念:webpack 是前端项目工程化的具体解决方案。

主要功能:它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端 JavaScript 的兼容性、性能优化等强大的功能。

好处:让程序员把工作的重心放到具体功能的实现上,提高了前端开发效率和项目的可维护性。

注意:目前企业级的前端项目开发中,绝大多数的项目都是基于 webpack 进行打包构建的。


4.2 创建列表隔行变色项目

① 新建项目空白目录,并运行 npm init –y 命令,初始化包管理配置文件 package.json

image-20230615190114951

② 新建 src 源代码目录

image-20230615190124491

③ 新建 src -> index.html 首页和 src -> index.js 脚本文件

④ 初始化首页基本的结构

image-20230615190359495

⑤ 运行 npm install jquery –S 命令,安装 jQuery

image-20230616014957839

⑥ 通过 ES6 模块化的方式导入 jQuery,实现列表隔行变色效果

// 1.使用 ES6 模块化语法导入 jquery
import $ from 'jquery'

// 2.实现隔行变色效果
$(function(){
    $('li:odd').css('backgroundColor','red')
    $('li:even').css('backgroundColor','cyan')
})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入js文件 -->
    <script src="./index.js"></script>
    <title>Document</title>
</head>
<body>
    <ul>
        <li>这是第1个li</li>
        <li>这是第2个li</li>
        <li>这是第3个li</li>
        <li>这是第4个li</li>
        <li>这是第5个li</li>
        <li>这是第6个li</li>
        <li>这是第7个li</li>
        <li>这是第8个li</li>
        <li>这是第9个li</li>
    </ul>
</body>
</html>

image-20230616015953984

浏览器打开后发现有乱码并且没有出现预期的效果,F12 查看控制台 :Uncaught SyntaxError: Cannot use import statement outside a module,这是因为出现了浏览器对于es6的兼容性问题,这就需要使用到 webpack 将其转换为具有兼容行的代码。

乱码是因为文件保存的编码问题,按照如下图所示将文件保存为utf-8即可:

image-20230616020546052


4.3 安装 webpack

在终端运行如下的命令,安装 webpack 相关的两个包:

image-20230616152214357


4.4 配置 webpack

① 在项目根目录中,创建名为 webpack.config.jswebpack 配置文件,并初始化如下的基本配置:

image-20230616152756605

webpack.config.jswebpack 的配置文件。webpack 在真正开始打包构建之前,会先读取这个配置文件,从而基于给定的配置,对项目进行打包。

mode 节点的可选值有两个,分别是:

  • development

开发环境

  • 不会对打包生成的文件进行代码压缩和性能优化

  • 打包速度快,适合在开发阶段使用

image-20230616162219675

  • production

生产环境

  • 会对打包生成的文件进行代码压缩和性能优化

  • 打包速度很慢,仅适合在项目发布阶段使用

image-20230616162229168

注意:由于 webpack 是基于 node.js 开发出来的打包工具,因此在它的配置文件中,支持使用 node.js 相关的语法和模块进行 webpack 的个性化配置。

② 在项目根目录中,创建名为 webpack.config.jswebpack 配置文件,并初始化如下的基本配置:

image-20230616153959209

③ 在终端中运行 npm run dev 命令,启动 webpack 进行项目的打包构建

image-20230616154400496

通过读取webpack.config.js 中的配置对象,对其进行打包,生成 dist 文件夹,其中的main.js 文件,就是将我们自定义的js文件转换为没有兼容性问题的对应代码,所以我们还需要将这个文件在页面中进行引用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-an3oB6xB-1687077399561)(null)]

image-20230616155100866

webpack 中有如下的默认约定:

​ ① 默认的打包入口文件为 src -> index.js

​ ② 默认的输出文件路径为 dist -> main.js

注意:可以在 webpack.config.js 中修改打包的默认约定

最后刷新浏览器,可以看到最终的效果:

image-20230616155043035


4.5 自定义 打包入口与出口

webpack.config.js 配置文件中,通过 entry 节点指定打包的入口。通过 output 节点指定打包的出口。示例代码如下:

const path = require('path') // 导入node.js中专门操作路径的模块

module.exports = {
    entry: path.join(__dirname, './src/index.js'), // 打包入口的文件
    output: {
        path: path.join(__dirname, './self-definition'), // 输出文件的存放路径 
        filename: 'bundle.js'  // 输出文件的名称
    }
}

image-20230616164819743

返回顶部


五、webpack 的插件使用

5.1 webpack 常见插件

通过安装和配置第三方的插件,可以拓展 webpack 的能力,从而让 webpack 用起来更方便。最常用的 webpack 插件有如下两个:

webpack-dev-server

  • 类似于 node.js 阶段用到的 nodemon 工具

  • 每当修改了源代码,webpack 会自动进行项目的打包和构建

html-webpack-plugin

  • webpack 中的 `HTML 插件(类似于一个模板引擎插件)

  • 可以通过此插件自定制 index.html 页面的内容


5.2 webpack-dev-server

运行如下的命令,即可在项目中安装此插件:

image-20230616165240512

配置 webpack-dev-server:

① 修改 package.json -> scripts 中的 dev 命令如下:

image-20230616165347858

② 再次运行 npm run dev 命令,重新进行项目的打包

image-20230616170115717

如有上述报错,更新一下 webpack-cli 只要输入npm install webpack-cli

image-20230616172715596

③ 在浏览器中访问 http://localhost:8080 地址,查看自动打包效果

image-20230616170512925

重新打包后,再次查看浏览器效果并不会出现,因为自动打包的内容只是存储在了内存中。

① 不配置 webpack-dev-server 的情况下,webpack 打包生成的文件,会存放到实际的物理磁盘上

  • 严格遵守开发者在 `webpack.config.js``中指定配置

  • 根据 output 节点指定路径进行存放

② 配置了 webpack-dev-server 之后,打包生成的文件存放到了内存

  • 不再根据 output 节点指定的路径,存放到实际的物理磁盘上

  • 提高了实时打包输出的性能,因为内存比物理磁盘速度快很多

webpack-dev-server 生成到内存中的文件,默认放到了项目的根目录中,而且是虚拟的、不可见的。

  • 可以直接用/表示项目根目录,后面跟上要访问的文件名称,即可访问内存中的文件

  • 例如/bundle.js就表示要访问 webpack-dev-server 生成到内存中的 bundle.js 文件

    image-20230616172658682

最终效果:

在这里插入图片描述


5.3 html-webpack-plugin

html-webpack-plugin 是 webpack 中的 HTML 插件,可以通过此插件自定制 index.html 页面的内容。

需求:通过 html-webpack-plugin 插件,将 src 目录下的 index.html 首页,复制到项目根目录中一份!

运行如下的命令,即可在项目中安装此插件:

image-20230616182214844

配置 html-webpack-plugin:

const path = require('path'); // 1.1 导入node.js中专门操作路径的模块

const HtmlPlugin = require('html-webpack-plugin'); // 2.1 导入html插件,得到一个构造函数
const htmlPlugin = new HtmlPlugin({
    template: './src/index.html', // 2.2 指定源文件的存放路径
    filename: './index.html' // 2.3 指定生成的文件存放的路径
})

module.exports = {
    mode: 'development', // mode用來指定构建模式,可选值有development (开发阶段)、production(产品上线)
    entry: path.join(__dirname, './src/index.js'), // 1.2 打包入口的文件
    output: {
        path: path.join(__dirname, './dist'), // 1.3 输出文件的存放路径 
        filename: 'bundle.js'  // 1.4 输出文件的名称
    },
    performance: {
        hints: false // 关闭性能提示
    },
    plugins: [htmlPlugin] // 2.4 通过plugins节点使 htmlPlugin 生效
};

重新启动后可以看到,访问8080主页直接就变成了我们的index主页(下图是前后做的对比):

image-20230616182925878

① 通过 HTML 插件复制到项目根目录中的 index.html 页面,也被放到了内存中

② HTML 插件在生成的 index.html页面的底部,自动注入了打包的 bundle.js 文件(所以上面的js文件可以不用手动导入)

image-20230616190632252

webpack.config.js 配置文件中,可以通过 devServer 节点对 webpack-dev-server 插件进行更多的配置,例代码如下:

const path = require('path'); // 1.1 导入node.js中专门操作路径的模块

const HtmlPlugin = require('html-webpack-plugin'); // 2.1 导入html插件,得到一个构造函数
const htmlPlugin = new HtmlPlugin({
    template: './src/index.html', // 2.2 指定源文件的存放路径
    filename: './index.html' // 2.3 指定生成的文件存放的路径
})

module.exports = {
    mode: 'development', // mode用來指定构建模式,可选值有development (开发阶段)、production(产品上线)
    entry: path.join(__dirname, './src/index.js'), // 1.2 打包入口的文件
    output: {
        path: path.join(__dirname, './dist'), // 1.3 输出文件的存放路径 
        filename: 'bundle.js'  // 1.4 输出文件的名称
    },
    performance: {
        hints: false // 关闭性能提示
    },
    plugins: [htmlPlugin], // 2.4 通过plugins节点使 htmlPlugin 生效
    devServer: {
        oprn: true,  // 初次打完包后,自动打开浏览器
        host: '127.0.0.1', // 实时打包所使用的主机地址
        port: 80  // 实施大宝所使用的端口号,默认:8080
    }
};

在这里插入图片描述

返回顶部


六、Loader加载器

6.1 Loader加载器概述

在实际开发过程中,webpack 默认只能打包处理以 .js 后缀名结尾的模块。其他非 .js 后缀名结尾的模块,webpack 默认处理不了,需要调用 loader 加载器才可以正常打包,否则会报错!

loader 加载器的作用:协助 webpack 打包处理特定的文件模块。比如:

  • css-loader 可以打包处理 .css 相关的文件

  • less-loader 可以打包处理 .less 相关的文件

  • babel-loader 可以打包处理 webpack 无法处理的高级 JS 语法


6.2 Loader加载器的条用过程

image-20230616193454183


6.3 打包加载 css 文件

image-20230616233105056

我们创建了新的 index.css 文件,并且将其以模块的形式导入到 js文件中,运行程序后报错提示:我们需要一个合适的loader来处理这个类型的文件,也就是这里的css文件

① 运行 npm i style-loader@2.0.0 css-loader@5.0.1 -D 命令,安装处理 css 文件的 loader

image-20230616231335128

② 在 webpack.config.jsmodule -> rules 数组中,添加 loader 规则如下:

 module: { // 所有第三方文件模块的匹配规则
     rules: [ // 文件后缀名的匹配规则
         { test: /\.css$/, use: ['style-loader', 'css-loader'] }
     ]
 }

css文件:

ul {
    list-style: none; /*将列表的样式去除*/
}

index.js文件

// 1.使用 ES6 模块化语法导入 jquery
import $ from 'jquery'
// 导入css文件
import './css/index.css'

// 2.实现隔行变色效果
$(function(){
    $('li:odd').css('backgroundColor','pink')
    $('li:even').css('backgroundColor','orange')
})

其中,test 表示匹配的文件类型, use 表示对应要调用的 loader。注意:

  • use 数组中指定的 loader 顺序是固定的

  • 多个 loader 的调用顺序是:从后往前调用

image-20230616233138294


6.4 打包处理 less 文件

① 运行 npm i less-loader@7.1.0 less@3.12.2 -D 命令

image-20230616233534959

② 在 webpack.config.jsmodule -> rules 数组中,添加 loader 规则如下:

module: { // 所有第三方文件模块的匹配规则
    rules: [ // 文件后缀名的匹配规则
        { test: /\.css$/, use: ['style-loader', 'css-loader'] },
        { test: /\.less$/, use: ['style-loader', 'css-loader','less-loader'] },
    ]
}

index.less文件:

html,
body,
ul {
    margin: 0; /* 处理边距 */
    padding: 0;
    li { /* 对列表进行格式设置 */
        line-height: 35px;
        padding-left: 10px;
        font-size: 12px;
    }
}

index.js文件

// 1.使用 ES6 模块化语法导入 jquery
import $ from 'jquery'
// 导入css文件
import './css/index.css'
// 导入less文件
import './css/index.less'

// 2.实现隔行变色效果
$(function(){
    $('li:odd').css('backgroundColor','pink')
    $('li:even').css('backgroundColor','orange')
})

在这里插入图片描述


6.5 打包处理 url 路径文件

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 引入js文件 -->
    <!-- <script src="./index.js"></script> -->

    <!-- 引入webpack打包的无兼容性问题js文件 -->
    <!-- <script src="../dist/bundle.js"></script> -->

    <!-- 开启实时打包后访问内存中的bundle.js -->
    <!-- <script src="/bundle.js"></script> -->
    <title>Document</title>
</head>
<body>
    <ul>
        <li>这是第1个li</li>
        <li>这是第2个li</li>
        <li>这是第3个li</li>
        <li>这是第4个li</li>
        <li>这是第5个li</li>
        <li>这是第6个li</li>
        <li>这是第7个li</li>
        <li>这是第8个li</li>
        <li>这是第9个li</li>
    </ul>
    <div id="box"></div>
</body>
</html>

index.less:

html,
body,
ul {
    margin: 0;
    padding: 0;
    li {
        line-height: 35px;
        padding-left: 10px;
        font-size: 12px;
    }
}
#box {
    width: 400px;
    height: 120px;
    background-color: grey;
    background:url('../image/logo.png#pic_center') // 報錯:You may need an appropriate loader to handle this file type
}

运行以上代码后会报错:You may need an appropriate loader to handle this file type,对于图片类的url处理也是需要单独设置loader的。

image-20230617000253724

① 运行 npm i url-loader@4.1.1 file-loader@6.2.0 -D 命令

image-20230617000123571

② 在 webpack.config.jsmodule -> rules 数组中,添加 loader 规则如下:

 module: { // 所有第三方文件模块的匹配规则
     rules: [ // 文件后缀名的匹配规则
         { test: /\.jpg|png|gif$/, use: ['url-loader?limit=22229'] }
     ]
 }

其中 ? 之后的是 loader 的参数项

  • limit 用来指定图片的大小,单位是字节(byte

  • 只有 ≤ limit 大小的图片,才会被转为 base64 格式的图片

image-20230617001038473


6.6 打包处理 js 高级语法

webpack 只能打包处理一部分高级的 JavaScript 语法。对于那些 webpack 无法处理的高级 js 语法,需要借助于 babel-loader 进行打包处理。例如 webpack 无法处理下面的 JavaScript 代码:

image-20230617001424351

运行如下的命令安装对应的依赖包,包的名称及版本号列表如下(红色是包的名称、黑色是包的版本号):

  • babel-loader@8.2.1

  • @babel/core@7.12.3

  • @babel/plugin-proposal-class-properties@7.12.1

    image-20230617002026138

webpack.config.jsmodule -> rules 数组中,添加 loader 规则如下:

module: { // 所有第三方文件模块的匹配规则
    rules: [ // 文件后缀名的匹配规则
        { test: /\.css$/, use: ['style-loader', 'css-loader'] },
        { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
        { test: /\.jpg|png|gif$/, use: ['url-loader?limit=22229'] },
        {
            test: /\.js$/,
            exclude: /node_modules/,
            use: {
                loader: 'babel-loader',
                options: {
                    plugins: ['@babel/plugin-proposal-class-properties'],
                },
            },
        },
    ]
}

image-20230617002432599

返回顶部


七、打包发布

项目开发完成之后,使用 webpack 对项目进行打包发布的主要原因有以下两点:

  • 开发环境下,打包生成的文件存放于内存中,无法获取到最终打包生成的文件

  • 开发环境下,打包生成的文件不会进行代码压缩和性能优化

7.1 配置打包发布

package.json 文件的 scripts 节点下,新增 build 命令:

"scripts": {
    "dev": "webpack serve",  // 开发环境,运行dev命令
    "build":"webpack --mode production" // 项目发布,运行build命令
},
  • --model 是一个参数项,用来指定 webpack 的运行模式。

  • production 代表生产环境,会对打包生成的文件进行代码压缩和性能优化。

注意:通过 --model 指定的参数项,会覆盖 webpack.config.js 中的 model 选项。

image-20230618144400637


7.2 统一生成 js 目录

webpack.config.js 配置文件的 output 节点中,进行如下的配置:

image-20230618144610920


7.3 统一生成 image 目录

修改 webpack.config.js 中的 url-loader 配置项,新增 outputPath 选项即可指定图片文件的输出路径:

image-20230618145047949

如果 dist 目录下没有生成 image 文件说明图片不需要进行优化,此时将图片的大小限制设置小于原图片字节大小即可:

image-20230618151451657

image-20230618152904853


7.4 自动清理 dist 目录

为了在每次打包发布时自动清理掉 dist 目录中的旧文件,可以安装并配置 clean-webpack-plugin 插件。

安装 dist 目录的 webpack 插件:

image-20230618145255654

导入插件、得到插件的构造函数,并且创建插件的实例对象,將插件导入到plguins节点中:

image-20230618150612870

返回顶部


八、Source Map

8.1 使用场景

前端项目在投入生产环境之前,都需要对 JavaScript 源代码进行压缩混淆,从而减小文件的体积,提高文件的加载效率。此时就不可避免的产生了另一个问题:对压缩混淆之后的代码除错(debug)是一件极其困难的事情!

image-20230618153611739

  • 变量被替换成没有任何语义的名称

  • 空行和注释被剔除

Source Map 就是一个信息文件,里面储存着位置信息。也就是说,Source Map 文件中存储着代码压缩混淆前后的对应关系。 出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试。


8.2 webpack 开发环境下的 Source Map

在开发环境下,webpack 默认启用了 Source Map 功能。当程序运行出错时,可以直接在控制台提示错误行的位置,并定位到具体的源代码:

image-20230618155138345

这里的转换会有一定的行数偏差,浏览器报错的行数是 Source Map 已经转换后的文件的代码行数,这里可以看到,源码是第19行,而浏览器报错是转换后的第25行。

image-20230618155320630

开发环境下,推荐在 webpack.config.js 中添加如下的配置,即可保证运行时报错的行数与源代码的行数保持一致:

module.exports = {
	mode: 'development', // mode用來指定构建模式,可选值有development (开发阶段)、production(产品上线) 
	devtool:'eval-source-map', // eval-source-map仅限开发者模式下使用,不建议在生产模式下使用,保证运行时报错代码行数与源码保持一致
    ......
}

image-20230618155957820

在生产环境下,如果省略了 devtool 选项,则最终生成的文件中不包含 Source Map。这能够防止原始代码通过 Source Map 的形式暴露给别有所图之人。

image-20230618160351376

将 devtool 注释,项目打包后浏览器,查看控制台:

image-20230618160852602

这种虽然能够保证安全性,但是对于我们开发的调试却不是很友好,我们有以下两种解决方案:

  • 定位行数不暴露源码

    在生产环境下,如果只想定位报错的具体行数,且不想暴露源码。此时可以将 devtool 的值设置为 nosources-source-map。实际效果如图所示:

image-20230618161427441

  • 定位行数且暴露源码

    在生产环境下,如果想在定位报错行数的同时,展示具体报错的源码。此时可以将 devtool 的值设置为 source-map。实际效果如图所示:

image-20230618161659436

返回顶部


开发环境下

  • 建议把 devtool 的值设置为 eval-source-map

  • 好处:可以精准定位到具体的错误行

生产环境下

  • 建议关闭 Source Map 或将 devtool 的值设置为 nosources-source-map

  • 好处:防止源码泄露,提高网站的安全性


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

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

相关文章

【Linux】进程优先级

目录 进程优先级什么叫做优先级&#xff1f;Linux优先级更改优先级 进程优先级 什么叫做优先级&#xff1f; cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用…

imx6ull固化和更新uboot、zImage和dtb方法---超详细总结

目录 一、固化系统 1. 使用mfgtool上位机固化系统 1.1 mfgtool固化系统到 SD 卡 1.2 mfgtool固化系统到 eMMC 1.3 mfgtool固化系统到 NAND FLASH 2.使用脚本固化系统 2.1脚本固化系统到 SD 卡 2.2 脚本固化系统到 eMMC 2.3 脚本固化系统到 NAND FLASH 二、更新系统 …

用Midjourney画“球迷冲进球场拥抱梅西“事件

作者 | 兔子酱 最近&#xff0c;被“球迷冲进球场拥抱梅西”刷屏了!在阿根廷对战澳大利亚北京工体友谊赛上&#xff0c;一名中国“狂热少年”冲进球场&#xff0c;成功拥抱了梅西&#xff0c;甚至摆出了拍照姿势。拥抱后在球场狂奔&#xff0c;还有大马丁击了掌&#xff0c;最后…

C++学习之STL vector

Vector是什么&#xff1f; 问chatgpt看看是什么回答&#xff1f; ChatGPT&#xff1a; C中的vector是标准库&#xff08;STL&#xff09;提供的一种动态数组容器。它能够在运行时根据需要自动调整大小&#xff0c;并且可以存储不同类型的元素。 使用vector&#xff0c;您可…

Java虚拟机——HotSpot的算法实现细节

根节点枚举 在可达性分析算法中从GC Roots集合中找引用链非常的麻烦 。固定可作为GC Roots的节点主要在全局性的引用&#xff08;例如常量或类静态属性&#xff09;与执行上下文&#xff08;栈帧的本地变量表&#xff09;中。当Java应用很大的时候&#xff0c;类和常量数量很多…

了解redis以及其基本命令

目录 1 编译安装2 启动3 redis 是_3.1 远程字典服务3.2 内存数据库3.3 kv数据库3.4 数据结构数据库3.4.1 string 是一个安全的二进制字符串&#xff1b;3.4.2 双端队列 &#xff08;链表&#xff09; list &#xff1a;有序&#xff08;插入有序&#xff09;&#xff1b;3.4.3 …

Dubbo的10种集群容错模式

学习Dubbo源码的过程中&#xff0c;首先看到的是dubbo的集群容错模式&#xff0c;以下简单介绍10种集群容错模式 1.AvailableCluster 顾名思义&#xff0c;就是可用性优先&#xff0c;遍历所有的invokers&#xff0c;选择可用的 2.MergeableCluster:当接口需要多个服务组合返回…

陌生人,可以看一看你最近复制了什么吗?

DDoS 攻击采用分布式的方式进行&#xff0c;攻击者通常会控制网络中许多终端或服务器&#xff0c;这些终端或服务器同时向被攻击目标发送大量的请求&#xff0c;被攻击目标无法判断这些请求来源的合法性&#xff0c;因此会无法正常处理这些请求&#xff0c;而导致服务中断&…

Web前端开发技术储久良第三版课后答案

P16-第1章 练习与实验答案 练习1 1.选择题 (1)B (2)B (3)B (4)D (5)A 2.填空题 (1)标记、文本 (2)Tim Berners-Lee&#xff08;蒂姆伯纳斯李&#xff09; (3)查看 (4)NotePad、EditPlus、TextPad、TopStyle、UltraEdit等 (5)超文本标记语言、统一资源定位符&#xff08;器&am…

Fiddler如何比较两个接口请求?

进行APP测试时&#xff0c;往往会出现Android和iOS端同一请求&#xff0c;但执行结果不同&#xff0c;这通常是接口请求内容差异所致。 如果你想学习Fiddler抓包工具&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的Fiddler抓包工具教程&…

多模态对比互学习和伪标签再学习半监督医学图像分割

文章目录 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segmentation摘要本文方法实验结果总结 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segm…

Linux系统之部署Yearning SQL审核平台

这里写目录标题 一、Yearning介绍1.1 Yearning简介1.2 Yearning特点1.3 Yearning功能 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查操作系统版本3.2 检查系统内核版本3.3 检查Docker版本 四、部署mysql数据库4.1 创建数据目录4.2 创建mysql数据…

【计网】第一章 计算机网络概述

文章目录 计算机网络概述一、计算机网络在信息时代中的作用二、互联网概述2.1 互连网概念2.2 网络的网络2.3 互连网基础结构发展的三个阶段2.4 互连网的标准化工作 三、互联网的组成3.1 互联网的边缘部分3.2 互联网的核心部分3.2.1 基础概念3.2.2 电路交换3.2.3 报文交换3.2.4 …

全网最全的以太坊ERC4626协议解析-ERC4626 - yield-bearing vaults

收益性存款 ERC4626 协议是一种用于代币化保险库的标准&#xff0c;它可以优化和统一收益保险库的技术参数。收益保险库是指使用不同策略来为用户提供最佳收益的合约&#xff0c;例如借贷市场、聚合器或本身具有利息的代币。ERC4626 协议提供了一个标准的 API&#xff0c;用于表…

html实现好看的个人介绍,个人主页模板5(附源码)

文章目录 1.设计来源1.1 主界面1.2 我的介绍界面1.3 我的能力界面1.4 项目案例界面1.5 联系我界面 2.效果和源码2.1 动态效果2.2 源代码2.3 源代码目录 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/13127331…

DJ4-4 CIDR、DHCP

目录 一、分类 IP 方法的问题 二、CIDR 1、CIDR 定义 2、CIDR 地址划分 三、DHCP 1、DHCP 概述 2、DHCP 工作过程 3、DHCP&#xff1a;C/S 场景 4、DHCP&#xff1a;不仅获得 IP 地址 四、组织机构获取 IP 地址 一、分类 IP 方法的问题 A 类的 IP 地址&#xff0c;有…

一天学完Java,主要记录difference

Java学习记录 Java中的内存区域划分Java中的包&#xff08;package&#xff09;Java中的枚举&#xff08;Enum&#xff09;Java中的包装类Java中的Math数学计算类Java中的Random&UUIDJava中的format数字格式化Java中字符串和数字的转换Java中的高精度计算Java中的String操作…

安装Ubuntu系统详细教程

一. 前言 本篇文章详解介绍一下如何安装Ubuntu系统&#xff0c;笔者在安装的过程中踩过很多坑&#xff0c;重装了很多次&#xff0c;现在把安装过程中遇到的问题也列出来&#xff0c;供大家参考。 二. 准备工作 这个环节很重要&#xff0c;工欲善其事&#xff0c;必先利其器。 …

数据结构--》从数据结构开始,打好算法基础

目录 数据结构的基本概念 数据结构的三要素 算法的基本概念 数据结构的基本概念 在学习某个知识之前&#xff0c;我们是否都有问过自己我们到底在学习的目的是什么&#xff1f;学习数据结构也一样&#xff0c;我们学习数据结构主要是为了用程序把现实世界的问题信息化&#…

银行项目软件测试中都测哪些内容呢?

在我们的日常在金融或银行软件测试工作中都有哪些内容需要测试&#xff1f;在这些测试的内容中如何去更好的掌握测试技能保证测试质量&#xff0c;一起来学习探讨交流。 如果你想拿到性能项目&#xff0c;可以进一下这个群&#xff1a;798478386 下面为银行测试点的概括&am…