当前位置: 首页 > news >正文

Webpack前端打包工具详解

目录

  • Webpack前端打包工具详解
    • 一、Webpack 的作用
    • 二、Webpack 的安装和基本使用
      • 1. 安装 Webpack
      • 2. 创建 Webpack 配置文件
      • 3. 运行 Webpack
    • 三、Webpack 核心概念
      • 1. 入口(Entry)
      • 2. 输出(Output)
      • 3. 加载器(Loaders)
      • 4. 插件(Plugins)
      • 5. 模式(Mode)
    • 四、Webpack 的高级使用
      • 1. 代码拆分(Code Splitting)
        • 1.1 入口点拆分
        • 1.2 动态导入
        • 1.3 SplitChunksPlugin 插件
      • 2. 热模块替换(Hot Module Replacement, HMR)
      • 3. 树摇(Tree Shaking)
      • 4. 处理 CSS
      • 5. 处理图片和字体
      • 6. 多页面应用程序(Multiple Page Application, MPA)
      • 7. 环境变量
    • 五、Webpack 配置文件详解
      • 详细解析
    • 六、Webpack 实战案例
      • 1. 项目结构
      • 2. 安装依赖
      • 3. 配置文件
        • `webpack.config.js`
        • `.babelrc`
      • 4. React 组件
        • `src/index.js`
        • `src/App.js`
        • `src/App.css`
        • `src/index.html`
      • 5. 启动开发服务器
    • 七、总结

Webpack前端打包工具详解

Webpack 是一种现代 JavaScript 应用程序的静态模块打包工具。它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将这些模块打包成一个或多个 bundle。本文将详细介绍 Webpack 的作用、使用步骤,并整合最全面的资源来介绍其功能和配置。

一、Webpack 的作用

Webpack 主要用于以下几个方面:

  1. 模块打包:Webpack 能够将 JavaScript、CSS、HTML 等前端资源视作模块进行打包。它会分析代码中的依赖关系,生成一个或多个打包文件。
  2. 代码拆分:通过代码拆分(Code Splitting),Webpack 可以将代码分成多个 bundle,以便按需加载,减少初始加载时间,提高应用性能。
  3. 文件优化:Webpack 提供了许多优化功能,例如代码压缩(minification)、树摇(tree shaking,删除未使用的代码)等。
  4. 开发工具支持:Webpack 具备强大的开发工具支持,如热模块替换(Hot Module Replacement,HMR)、源代码映射(Source Maps)等,极大提升了开发体验。
  5. 插件和加载器:Webpack 拥有丰富的插件和加载器,可以处理各种类型的文件和转换,满足不同项目的需求。

二、Webpack 的安装和基本使用

1. 安装 Webpack

首先,确保你已经安装了 Node.js 和 npm。然后,通过 npm 安装 Webpack 及其 CLI 工具:

npm install --save-dev webpack webpack-cli

2. 创建 Webpack 配置文件

在项目根目录下创建一个名为 webpack.config.js 的文件,这是 Webpack 的配置文件。在其中定义打包的入口文件和输出文件:

const path = require('path');module.exports = {entry: './src/index.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},mode: 'development'
};

3. 运行 Webpack

package.json 中添加一个构建脚本,然后运行 Webpack 进行打包:

{"scripts": {"build": "webpack"}
}

在命令行中运行以下命令:

npm run build

Webpack 会根据配置文件的定义,从 src/index.js 开始打包,并将输出文件保存到 dist/bundle.js 中。

三、Webpack 核心概念

1. 入口(Entry)

入口起点(Entry Point)指示 Webpack 应该使用哪个模块作为构建其内部依赖图的开始。可以通过配置单个或多个入口点。

单入口配置示例:

module.exports = {entry: './src/index.js'
};

多入口配置示例:

module.exports = {entry: {app: './src/app.js',admin: './src/admin.js'}
};

2. 输出(Output)

输出配置告诉 Webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件。默认值为 ./dist

示例配置:

const path = require('path');module.exports = {output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')}
};

3. 加载器(Loaders)

加载器允许 Webpack 处理非 JavaScript 文件(如 CSS、图片、TypeScript 等)。它们在 module.rules 中配置,指定要匹配的文件类型和使用的加载器。

例如,使用 babel-loader 转换 ES6 代码:

module.exports = {module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env']}}}]}
};

4. 插件(Plugins)

插件用于执行范围更广的任务,包括打包优化、资源管理、环境变量注入等。插件需要在 plugins 数组中进行配置。

例如,使用 HtmlWebpackPlugin 自动生成 index.html 文件并注入打包后的脚本:

const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {plugins: [new HtmlWebpackPlugin({template: './src/index.html'})]
};

5. 模式(Mode)

通过设置 mode 可以告知 Webpack 使用相应模式的内置优化。Webpack 支持 developmentproductionnone 三种模式:

module.exports = {mode: 'development'
};

在开发模式下,Webpack 会设置一些有助于开发的配置,如未压缩的代码和更详细的错误信息。在生产模式下,Webpack 会自动启用一些优化措施,如代码压缩、删除无用代码等。

四、Webpack 的高级使用

1. 代码拆分(Code Splitting)

代码拆分是 Webpack 的一项重要功能,它可以将代码分成多个 bundle,以便按需加载,减少初始加载时间。代码拆分主要有三种方式:

1.1 入口点拆分

通过多入口配置实现代码拆分:

module.exports = {entry: {app: './src/app.js',vendor: './src/vendor.js'},output: {filename: '[name].bundle.js',path: path.resolve(__dirname, 'dist')}
};
1.2 动态导入

使用动态导入(Dynamic Import)语法来实现代码拆分:

// app.js
import('./math').then(math => {console.log(math.add(2, 3));
});
1.3 SplitChunksPlugin 插件

使用 SplitChunksPlugin 插件进行更高级的代码拆分:

module.exports = {optimization: {splitChunks: {chunks: 'all'}}
};

2. 热模块替换(Hot Module Replacement, HMR)

HMR 是一种增强开发体验的功能,允许在应用程序运行过程中替换、添加或删除模块,而无需重新加载整个页面。

在开发环境中启用 HMR:

const webpack = require('webpack');module.exports = {devServer: {contentBase: './dist',hot: true},plugins: [new webpack.HotModuleReplacementPlugin()]
};

3. 树摇(Tree Shaking)

树摇是一个优化技术,通过删除未引用的代码来减少打包后的文件大小。Webpack 在生产模式下自动启用树摇功能。

确保使用 ES6 模块语法进行导入和导出:

// math.js
export function add(a, b) {return a + b;
}export function subtract(a, b) {return a - b;
}// app.js
import { add } from './math';
console.log(add(2, 3));

4. 处理 CSS

Webpack 可以通过多个加载器处理 CSS 文件,例如 style-loadercss-loader

module.exports = {module: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader']}]}
};

可以进一步使用 MiniCssExtractPlugin 将 CSS 提取到单独的文件中:

const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {module: {rules: [{test: /\.css$/,use: [MiniCssExtractPlugin.loader, 'css-loader']}]},plugins: [new MiniCssExtractPlugin({filename: '[name].css',chunkFilename: '[id].css'})]
};

5. 处理图片和字体

Webpack 可以使用 file-loaderurl-loader 处理图片和字体文件:

module.exports = {module: {rules: [{test: /\.(png|svg|jpg|gif)$/,use: ['file-loader']},{test: /\.(woff|woff2|eot|ttf|otf)$/,use: ['file-loader']}]}
};

6. 多页面应用程序(Multiple Page Application, MPA)

对于多页面应用程序,可以配置多个入口点和多个 HtmlWebpackPlugin 实例:

const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {entry: {page1: './src/page1.js',page2: './src/page2.js'},plugins: [new HtmlWebpackPlugin({filename: 'page1.html',chunks: ['page1']}),new HtmlWebpackPlugin({filename: 'page2.html',chunks: ['page2']})]
};

7. 环境变量

Webpack 支持通过 DefinePlugin 插件注入

环境变量:

const webpack = require('webpack');module.exports = {plugins: [new webpack.DefinePlugin({'process.env.NODE_ENV': JSON.stringify('production')})]
};

五、Webpack 配置文件详解

一个完整的 Webpack 配置文件可能会包括多个部分,如入口、输出、加载器、插件、优化配置等。以下是一个示例配置文件,展示了常见的配置选项:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const webpack = require('webpack');module.exports = {entry: {app: './src/index.js'},output: {filename: '[name].[contenthash].js',path: path.resolve(__dirname, 'dist')},mode: 'production',module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: 'babel-loader'},{test: /\.css$/,use: [MiniCssExtractPlugin.loader, 'css-loader']},{test: /\.(png|svg|jpg|jpeg|gif)$/,use: ['file-loader']},{test: /\.(woff|woff2|eot|ttf|otf)$/,use: ['file-loader']}]},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: './src/index.html'}),new MiniCssExtractPlugin({filename: '[name].[contenthash].css'}),new webpack.DefinePlugin({'process.env.NODE_ENV': JSON.stringify('production')})],optimization: {splitChunks: {chunks: 'all'}},devServer: {contentBase: './dist',hot: true}
};

详细解析

  1. 入口配置:定义打包的入口文件 src/index.js
  2. 输出配置:指定输出文件名和路径,使用内容哈希值确保文件名唯一。
  3. 模式:设置为生产模式,启用内置的优化功能。
  4. 加载器
    • babel-loader:用于转换 ES6 代码。
    • css-loaderMiniCssExtractPlugin.loader:用于处理 CSS 文件。
    • file-loader:用于处理图片和字体文件。
  5. 插件
    • CleanWebpackPlugin:在构建前清理输出目录。
    • HtmlWebpackPlugin:生成 HTML 文件并注入打包后的脚本。
    • MiniCssExtractPlugin:提取 CSS 到单独的文件。
    • DefinePlugin:注入环境变量。
  6. 优化配置:使用 splitChunks 进行代码拆分。
  7. 开发服务器:启用 HMR 和静态文件服务。

六、Webpack 实战案例

以下是一个使用 Webpack 打包 React 应用程序的示例配置。

1. 项目结构

my-app/
├── node_modules/
├── src/
│   ├── index.js
│   ├── App.js
│   ├── App.css
│   └── index.html
├── package.json
├── webpack.config.js
└── .babelrc

2. 安装依赖

npm install react react-dom
npm install --save-dev webpack webpack-cli webpack-dev-server babel-loader @babel/core @babel/preset-env @babel/preset-react html-webpack-plugin mini-css-extract-plugin css-loader style-loader

3. 配置文件

webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');module.exports = {entry: './src/index.js',output: {filename: 'bundle.[contenthash].js',path: path.resolve(__dirname, 'dist')},mode: 'development',module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: 'babel-loader'},{test: /\.css$/,use: [MiniCssExtractPlugin.loader, 'css-loader']}]},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: './src/index.html'}),new MiniCssExtractPlugin({filename: 'styles.[contenthash].css'})],devServer: {contentBase: path.join(__dirname, 'dist'),compress: true,port: 9000,hot: true}
};
.babelrc
{"presets": ["@babel/preset-env", "@babel/preset-react"]
}

4. React 组件

src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './App.css';ReactDOM.render(<App />, document.getElementById('root'));
src/App.js
import React from 'react';function App() {return (<div><h1>Hello, Webpack and React!</h1></div>);
}export default App;
src/App.css
body {font-family: Arial, sans-serif;background-color: #f0f0f0;text-align: center;margin: 0;
}h1 {color: #333;
}
src/index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Webpack React App</title>
</head>
<body><div id="root"></div>
</body>
</html>

5. 启动开发服务器

package.json 中添加启动脚本:

{"scripts": {"start": "webpack serve --open","build": "webpack --mode production"}
}

运行开发服务器:

npm start

访问 http://localhost:9000,你将看到“Hello, Webpack and React!”的页面。

七、总结

Webpack 是一个功能强大的前端打包工具,能够显著提升前端开发的效率和代码质量。本文详细介绍了 Webpack 的作用、安装和使用步骤、核心概念、先进功能和一个完整的实战案例。通过掌握这些内容,开发者可以更好地利用 Webpack 进行前端开发,打造高效、可靠的现代化 Web 应用。

相关文章:

Webpack前端打包工具详解

目录 Webpack前端打包工具详解一、Webpack 的作用二、Webpack 的安装和基本使用1. 安装 Webpack2. 创建 Webpack 配置文件3. 运行 Webpack 三、Webpack 核心概念1. 入口&#xff08;Entry&#xff09;2. 输出&#xff08;Output&#xff09;3. 加载器&#xff08;Loaders&#…...

计网总结☞网络层

.................................................. 思维导图 ........................................................... 【Wan口和Lan口】 WAN口&#xff08;Wide Area Network port&#xff09;&#xff1a; 1)用于连接外部网络&#xff0c;如互联…...

【全开源】云调查考试问卷系统(FastAdmin+ThinkPHP+Uniapp)

便捷、高效的在线调研与考试新选择​ 云调查考试问卷是一款基于FastAdminThinkPHPUniapp开发的问卷调查考试软件&#xff0c;可以自由让每一个用户自由发起调查问卷、考试问卷。发布的问卷允许控制问卷的搜集、回答等各个环节的设置&#xff0c;同时支持系统模板问卷&#xff…...

网络安全难学吗?2024该怎么系统学习网络安全?

学习网络安全需要循序渐进&#xff0c;由浅入深。很多人对网络安全进行了解以后&#xff0c;就打算开始学习网络安全&#xff0c;但是又不知道怎么去系统的学习。 网络安全本身的知识不难&#xff0c;但需要学习的内容有很多&#xff0c;其中包括Linux、数据库、渗透测试、等保…...

2 程序的灵魂—算法-2.4 怎样表示一个算法-2.4.6 用计算机语言表示算法

我们的任务是用计算机解题&#xff0c;就是用计算机实现算法&#xff1b; 用计算机语言表示算法必须严格遵循所用语言的语法规则。 【例 2.20】求 12345 用 C 语言表示。 main() {int i,t; t1; i2; while(i<5) {tt*i; ii1; } printf(“%d”,t); } 【例 2.21】求级数的…...

重生之我要精通JAVA--第八周笔记

文章目录 多线程线程的状态线程池自定义线程池最大并行数多线程小练习 网络编程BS架构优缺点CS架构优缺点三要素IP特殊IP常用的CMD命令 InetAddress类端口号协议UDP协议&#xff08;重点&#xff09;UDP三种通信方式 TCP协议&#xff08;重点&#xff09;三次握手四次挥手 反射…...

51单片机独立按键控制LED灯,按键按一次亮,再按一次灭

1、功能描述 独立按键控制LED灯&#xff0c;按键按一次亮&#xff0c;再按一次灭 2、实验原理 轻触按键:相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动米实现接通和断开&#xff1b;…...

【上海大学计算机组成原理实验报告】七、程序转移机制

一、实验目的 学习实现程序转移的硬件机制。 掌握堆栈寄存器的使用。 二、实验原理 根据实验指导书的相关内容&#xff0c;实验箱系统的程序转移硬件机制在于&#xff0c;当LDPC有效时&#xff0c;如果此时DUBS上的值就是转移的目标地址&#xff0c;则此目标地址被打入PC&am…...

LLVM Cpu0 新后端7 第一部分 DAG调试 dot文件 Machine Pass

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…...

修复www服务trace漏洞

验证方式&#xff1a;curl -v -X TRACE ip:port&#xff0c;或使用其他接口调试工具如Postman 响应&#xff1a;状态行405 Method Not Allowed且响应体无内容 方案一&#xff1a;使用过滤器 若webserver是tomcat, 添加过滤器的方式有很多 Component public class TraceHttpMe…...

算法:101. 对称二叉树

对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; 树中节…...

wordpress 使用api发布文章

1.安装插件 在/wp-content/plugins/目录执行以下命令 $ sudo git clone https://github.com/WP-API/Basic-Auth.git 2.Python脚本 import requestsurl http://www.ziyuanwang.online/wp-json/wp/v2/postsuser adminpassword xxxxxheaders {Content-Type: application/j…...

《Brave New Words 》2.2 阅读理解的未来,让文字生动起来!

Part II: Giving Voice to the Social Sciences 第二部分&#xff1a;为社会科学发声 The Future of Reading Comprehension, Where Literature Comes Alive! 阅读理解的未来&#xff0c;让文字生动起来&#xff01; Saanvi, a ninth grader in India who attends Khan World S…...

基于Java的超市进销存管理系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; Java JSP Servlet JavaBean 工具&#xff1a; IDEA/Eclipse、…...

Oracle 日志挖掘

oracle 11g 日志挖掘测试 需要开启补充日志 alter database add supplemental log data; SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;在用户下执行一些删除&#xff0c;插入等操作 SQL> create table zxy( …...

翻转二叉树-力扣

翻转二叉树&#xff0c;通过前序遍历的顺序&#xff0c;从根节点开始&#xff0c;将节点的左右子节点一次进行交换即可。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), …...

办公风云颜值背后的职场正能量

办公风云&#xff1a;颜值背后的职场正能量当我们提到职场&#xff0c;脑海中浮现的往往是严肃的面孔、忙碌的身影和堆积如山的文件。但在这个看似单调的舞台上&#xff0c;总有一些人&#xff0c;用他们的颜值和才华&#xff0c;为我们上演了一场场别开生面的“大戏”。今天&a…...

ffmpeg将一个视频中的音频合并到另一个视频

ffmpeg -i input1.mp4 -i input2.mp4 -map 1:v -map 0:a -c:v copy -c:a aac -strict experimental output.mp4解释如下&#xff1a; -i input1.mp4&#xff1a;指定第一个输入文件input1.mp4&#xff0c;这是你要提取音频的文件。-i input2.mp4&#xff1a;指定第二个输入文件…...

Web前端管理系统项目:深度解析与实现之道

Web前端管理系统项目&#xff1a;深度解析与实现之道 在当今数字化时代&#xff0c;Web前端管理系统项目已成为企业信息化建设的核心组成部分。这类项目不仅涉及技术的深度和广度&#xff0c;更考验开发者的综合素质和创新能力。本文将从四个方面、五个方面、六个方面和七个方…...

C语言最终讲:预处理详解

C语言最终讲&#xff1a;预处理详解 1.预定义符号2.#define定义常量3.#define定义宏4.带有副作用的宏参数5.宏替换的规则6.宏和函数的对比6.1宏的优势6.1.1\符号 6.2宏的劣势 7.#和##7.1#运算符7.2##运算符 8.命名约定9.#undef10.命令行定义11.条件编译12.头文件的包含12.1本地…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...