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

前端打包工具之Webpack5

前端打包工具之Webpack5

    • 什么是打包工具
    • 打包工具的作用
    • 常见的打包工具
    • 一、Webpack
      • 1、什么是[webpack](https://webpack.docschina.org/concepts/)
      • 2、webpack本身的功能是有限的
      • 3、webpack基本使用:基于本身功能只解析JS资源
      • 4、webpack配置
        • 4.1、`entry`(入口):指示webpack从哪个文件开始打包
        • 4.2、`output`(出口):指示webpack打包完的文件输出到哪里、如何命名
        • 4.3、`loader` ([加载器](https://webpack.docschina.org/concepts/loaders)):webpack本身只能处理js、json资源,其他资源需要借助loader
        • 4.4、`plugins` ([插件](https://webpack.docschina.org/api/plugins)): 扩展webpack功能
        • 4.5、`mode` ([模式](https://webpack.docschina.org/configuration/mode)) :开发、生产模式
        • 4.6、`browser compatibility` (浏览器兼容性)
        • 4.7、`environment` (环境): Webpack 5 运行于 Node.js v10.13.0+ 的版本
      • 5、webpack提升打包构建速度
        • 5.1、热更新:只针对开发模式
        • 5.2、oneOf配置项
        • 5.3、exclude配置项或者include配置项
        • 5.4、ESLint、babel添加缓存
        • 5.5、启动多线程打包
        • 5.6、减少代码体积
        • 5.7、减少文件中的babel辅助代码引入
        • 5.8、压缩静态资源图片
      • 6、webpack配置代码

什么是打包工具

将浏览器无法运行的高级语法代码(如:es6、scss)编译成浏览器能识别的JS、CSS等语法。

打包工具的作用

  • 语法编辑
  • 压缩代码
  • 兼容性处理
  • 代码性能优化

常见的打包工具

  • Vite
  • Webpack
  • parcel

一、Webpack

1、什么是webpack

webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。它会以一个或多个文件作为打包的入口,将整个项目所有文件编译组合成一个或者多个文件(bundles)输出。

webpack 开箱即用,可以无需使用任何配置文件。然而,webpack 会假定项目的入口起点为 src/index.js,然后会在 dist/main.js 输出结果,并且在生产环境开启压缩和优化

2、webpack本身的功能是有限的

webpack本身的功能是有限的

  • 开发模式: 仅能编译JS中的ES Model语法
  • 生产模式:编译JS中的ES Model语法,还能压缩JS代码

即是:webpack本身只能处理JS编译,其他编译和处理需要进一步的配置

3、webpack基本使用:基于本身功能只解析JS资源

  • 初始化package.json
$ npm init -y
  • 下载依赖 cli
$ npm i webpack webpack-cli -D

webpack从4.0版本开始,在安装时,就需要安装webpack和webpack-cli这两个东西。(1、webpack是打包代码时的核心内容;2、webpack-cli是一个用来在命令行中运行webpack的工具)

xxx-cli的主要功能就是:处理命令行参数(如果你想使用 npx 来运行 webpack,请确保你已经安装了 webpack-cli);npm run build -> 执行node_modules/webpack文件 -> 执行webpack-cli文件 -> 执行cli.run() -> 处理命令行参数。

  • 执行webpack打包
// 开发环境
$ npx webpack ./app.js --mode=development
// 生产环境
$ npx webpack ./app.js --mode=production

npx webpack: 运行本地安装的webpack包(npx: 用于快速执行本地或远程的npm包)
./app.js: 打包入口文件
–mode=XXX:打包模式

以上步骤默认打包的是JS代码,CSS等其他代码的处理,需要另行配置

4、webpack配置

npx webpack init: 根据项目需求快速生产webpack配置

4.1、entry(入口):指示webpack从哪个文件开始打包

默认src/index.js

4.2、output(出口):指示webpack打包完的文件输出到哪里、如何命名
4.3、loader加载器):webpack本身只能处理js、json资源,其他资源需要借助loader

webpack 只能理解 JavaScript 和 JSON 文件,这是 webpack 开箱可用的自带能力。loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。

loader 的两个属性:

  • test 属性,识别出哪些文件会被转换。
  • use属性,定义出在进行转换时,应该使用哪个 loader。
const path = require('path');module.exports = {output: {filename: 'my-first-webpack.bundle.js',},module: {// 嘿,webpack 编译器,当你碰到「在 require()/import 语句中被解析为 '.txt' 的路径」时,在你对它打包之前,先 use(使用) raw-loader 转换一下rules: [{ test: /\.txt$/, use: 'raw-loader' }],},
};
4.4、plugins (插件): 扩展webpack功能

想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 操作符来创建一个插件实例

const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); // 用于访问内置插件module.exports = {module: {rules: [{ test: /\.txt$/, use: 'raw-loader' }],},plugins: [new HtmlWebpackPlugin({ template: './src/index.html' })],
};
4.5、mode (模式) :开发、生产模式
4.6、browser compatibility (浏览器兼容性)

Webpack 支持所有符合 ES5 标准 的浏览器(不支持 IE8 及以下版本)。webpack 的 import() 和 require.ensure() 需要 Promise。如果你想要支持旧版本浏览器,在使用这些表达式之前,还需要 提前加载 polyfill。

4.7、environment (环境): Webpack 5 运行于 Node.js v10.13.0+ 的版本

5、webpack提升打包构建速度

5.1、热更新:只针对开发模式
// 生产模式下不需要devServer
devServer: {host: '0.0.0.0',port: 3000,compress: true,// 默认为true: 提升开发模式的打包构建速度// 默认只支持css热更新  js的需要加载相应loaderhot: true, // 开启HRM 热更新
},
5.2、oneOf配置项
// 加载器: 帮助webpack识别  本身不能识别的资源
module: {// loader的配置rules: {// 避免找到了loader 还会继续遍历后面的loaderoneOf: [// 处理css资源{},// 处理图片资源{},// 处理其他资源{},// 将高阶JS语法处理成IE等旧浏览器能识别的JS语法{test: /\.js$/,// 排除哪些不需要处理的文件exclude: /(node_modules|bower_components)/,// 只加载一个loader 可以直接使用loader替换useloader: 'babel-loader',// 可以直接在项目中 新建babel配置文件(babel.config.js), 方便配置扩展// options: {//     presets: ['@babel/preset-env']// }}]}
},
5.3、exclude配置项或者include配置项

exclude、include不能同时使用

{test: /\.js$/,// 排除哪些不需要处理的文件exclude: /(node_modules|bower_components)/,// include: path.resolve(__dirname, "../src"),// 只加载一个loader 可以直接使用loader替换useloader: 'babel-loader',// 可以直接在项目中 新建babel配置文件(babel.config.js), 方便配置扩展// options: {//     presets: ['@babel/preset-env']// }
}
5.4、ESLint、babel添加缓存
  • babel添加缓存
// 将高阶JS语法处理成IE等旧浏览器能识别的JS语法
{test: /\.js$/,// 排除哪些不需要处理的文件exclude: /(node_modules|bower_components)/,// 只加载一个loader 可以直接使用loader替换useloader: 'babel-loader',options: {// 可以直接在项目中 新建babel配置文件(babel.config.js), 方便配置扩展// presets: ['@babel/preset-env']cacheDirectory: true, // 开启babel缓存cacheCompression: false // 关闭缓存文件压缩}
}
  • ESLint 添加缓存
// 插件
plugins: [// ESLint检验new ESLintPlugin({// eslint 只检测src下面的文件context: path.resolve(__dirname, '../src'),exclude: 'node_modules', // 默认值: node_modulescache: true, // 开启缓存cacheLocation: path.resolve(__dirname, "../node_modules/.cache/eslintcache")}),
],
5.5、启动多线程打包
  • 获取cpu核数
const os = require('os')
// 获取cpu核数
const threads = os.cpus().length;
  • babel操作开启多线程
# 安装thread-loader
$ npm install --save-dev thread-loader
// 将高阶JS语法处理成IE等旧浏览器能识别的JS语法
{test: /\.js$/,// 排除哪些不需要处理的文件exclude: /(node_modules|bower_components)/,use: [{loader: "thread-loader",options: {workers: threads,  // babel: 进程数量}},{loader: 'babel-loader',options: {// 可以直接在项目中 新建babel配置文件(babel.config.js), 方便配置扩展// presets: ['@babel/preset-env']cacheDirectory: true, // 开启babel缓存cacheCompression: false // 关闭缓存文件压缩}}]
}
  • ESLint开启多进程
 plugins: [// ESLint检验new ESLintPlugin({// eslint 只检测src下面的文件context: path.resolve(__dirname, '../src'),exclude: 'node_modules', // 默认值: node_modulescache: true, // 开启缓存cacheLocation: path.resolve(__dirname, "../node_modules/.cache/eslintcache"),threads  // 开启多进程}),
],
  • 压缩js开启多进程
const TerserWebpackPlugin = require('terser-webpack-plugin')
optimization: {// 压缩的操作minimizer: [// 压缩jsnew TerserWebpackPlugin({// 开启多进程parallel: threads,}),],
},
5.6、减少代码体积

Tree Shaking: 移除JS中没有使用上的代码。 生产环境下已经默认开启了

5.7、减少文件中的babel辅助代码引入
{test: /\.js$/,// 排除哪些不需要处理的文件exclude: /(node_modules|bower_components)/,use: [{loader: "thread-loader",options: {workers: threads,  // babel: 进程数量}},{loader: 'babel-loader',options: {// 可以直接在项目中 新建babel配置文件(babel.config.js), 方便配置扩展// presets: ['@babel/preset-env']cacheDirectory: true, // 开启babel缓存cacheCompression: false, // 关闭缓存文件压缩plugins: ["@babel/plugin-transform-runtime"] // 减少代码体积:避免不必要的babel的辅助代码注入}}]
}
5.8、压缩静态资源图片

图片压缩

6、webpack配置代码

const path = require('path')
const os = require('os')
const ESLintPlugin = require('eslint-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin")
const nodeExternals = require('webpack-node-externals')
const TerserWebpackPlugin = require('terser-webpack-plugin')
// 获取cpu核数
const threads = os.cpus().length;
// 生产模式下:进行项目优化: 优化打包速度; 优化运行性能module.exports = {target: 'node',   // ignore built-in modules like path, fs, etc.externals: [nodeExternals()], // 排除Node.js核心模块// 项目打包入口: 相对路径entry: './src/app.js',// 模式mode: "production",// 包含行和列的映射  打包速度慢// 开发模式:  'cheap-module-source-map'devtool: 'source-map', // 将编译后的代码映射回原始源代码// 打包出口: 绝对路径output: {// __dirname: node变量: 当前文件的文件夹目录path: path.resolve(__dirname, '../dist'),  // 打包后所有文件的输出路径filename: 'static/js/[name].js',   // 入口文件打包后的输出路径// 给打包输出的其他文件命名 比如import动态导入的文件// 结合webpack 魔法命名 import(/* webpackChunkName: "app" */ "./src/app.js").then(()=>{})chunkFilename: 'static/js/[name].chunk.js',// 图片、字体等通过type: asset 处理资源命名方式  替换掉generatorassetModuleFilename: 'static/media/[hash:10][ext][query]',clean: true, //  自动清空path目录内容,再进行打包publicPath: '/assets/',},// 加载器: 帮助webpack识别  本身不能识别的资源module: {// loader的配置rules: {// 避免找到了loader 还会继续遍历后面的loaderoneOf: [// 处理css资源{test: /\.s[ac]ss$/,// use的加载顺序: 从右向左use: [// "style-loader",  // 将js中的css通过创建style标签添加到html文件中MiniCssExtractPlugin.loader, // 将css资源抽离成css文件, 通过link引入(避免了加载js的阻塞)"css-loader",   // 将css资源编译成commonjs模块到js中// sass兼容处理// 需要在package 添加需要兼容到哪些浏览器// "browserslist": [//     "last 2 version",  // 所有的浏览器取最新的两个版本//     "> 1%",     // 覆盖99% 的浏览器//     "not dead"//   ]{loader: 'postcss-loader',options: {postcssOptions: {plugins: [['postcss-preset-env',{// 其他选项},],],},},},"sass-loader"   // 将sass编译成css],},// 处理图片资源{// webpack5内置了处理图片的loadertest: /\.(png|jpe?g|gif|webp|svg)$/,type: 'asset',parser: {dataUrlCondition: {// 将小于10kb的图片打包成base64// 优点: 较少请求数量// 缺点: 图片体积变大(所以一般都转的小体积的图片)maxSize: 10 * 1024 // 10kb}},// 图片打包后的目录// generator: {//     // hash:10   取hash前10个字符//     filename: 'static/images/[hash:10][ext][query]'// }},// 处理其他资源{test: /\.(ttf|woff2?|mp3|mp4|avi)$/,type: 'asset/resource',  // 原样打包到dist中// generator: {//     // hash:10   取hash前10个字符//     filename: 'static/media/[hash:10][ext][query]'// }},// 将高阶JS语法处理成IE等旧浏览器能识别的JS语法// babel-loader: 不能处理async、promise等ES+的语法   需要借助core-js// core-js 是专门做ES6以上API的polyfill(补丁)// 在babel.config.js// module.exports = {//     // 智能预设: 能够编译ES6语法//     presets: [//         '@babel/preset-env',//         {//             useBuiltIns: 'usage',  // 按需自动加载core-js对ES6+的兼容性处理//             corejs: 3  // core-js的版本号//         }//     ]// }{test: /\.js$/,// 排除哪些不需要处理的文件exclude: /(node_modules|bower_components)/,// include: path.resolve(__dirname, "../src"),// 只加载一个loader 可以直接使用loader替换useuse: [{loader: "thread-loader",options: {workers: threads,  // babel: 进程数量}},{loader: 'babel-loader',options: {// 可以直接在项目中 新建babel配置文件(babel.config.js), 方便配置扩展// presets: ['@babel/preset-env']cacheDirectory: true, // 开启babel缓存cacheCompression: false, // 关闭缓存文件压缩plugins: ["@babel/plugin-transform-runtime"]   // 减少代码体积:避免不必要的babel的辅助代码注入}}]}]}},// 插件plugins: [// ESLint检验new ESLintPlugin({// eslint 只检测src下面的文件context: path.resolve(__dirname, '../src'),exclude: 'node_modules',threads}),// html文件自动引入依赖资源new HtmlWebpackPlugin({// 模板: 以public/index.html 文件作为模板,创建打包后新的html文件// 新的html文件特点:1、结构和打包之前的一致; 2、自动引入打包输出的资源template: path.resolve(__dirname, '../public/index.html')}),// 单独打包出css文件new MiniCssExtractPlugin({filename: 'static/css/[name].[contenthash:10].css',chunkFilename: 'static/css/[name].chunk.[contenthash:10].css'}),],optimization: {// 压缩的操作minimizer: [// css压缩// 开启生产模式 html、js会自动压缩的new CssMinimizerPlugin(),// 压缩jsnew TerserWebpackPlugin({// 开启多进程parallel: threads,}),],// 代码分割配置splitChunks: {chunks: 'all'},// 保证引用文件不变// 只变runtime和map里面的文件runtimeChunk: {name: (entrypoint) => `runtime-${entrypoint.name}.js`}},// 开发服务器: 不会输出资源到dist中的, 是在内存中进行编译打包的// src下的代码更改后,自动打包/自动编译代码// 生产模式下不需要devServerdevServer: {host: '0.0.0.0',port: 3000,compress: true,// 默认为true: 提升开发模式的打包构建速度// 默认只支持css热更新  js的需要加载相应loaderhot: true, // 开启HRM 热更新},
}

相关文章:

前端打包工具之Webpack5

前端打包工具之Webpack5 什么是打包工具打包工具的作用常见的打包工具一、Webpack1、什么是[webpack](https://webpack.docschina.org/concepts/)2、webpack本身的功能是有限的3、webpack基本使用:基于本身功能只解析JS资源4、webpack配置4.1、entry(入口…...

linux设置环境变量

linux设置环境变量 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! Linux设置环境变量:打造个性化开发环境 在Linux系统中,环境变量是一项…...

vue中对pdf文件和路径的处理

根据url预览pdf文件 地址栏输入url可以直接预览的pdf&#xff0c;这种我们可以直接使用vue-pdf进行预览 <div class"animation-box-pdf"><pdf :src"url" /></div><script> import Pdf from vue-pdfexport default {components: …...

Socks5与代理IP技术探析:构建安全高效的网络通信

1. Socks5协议的技术内幕 1.1 握手与身份验证 Socks5协议的握手阶段通过版本协商和灵活的身份验证方式建立安全连接。这确保了通信的可靠性和用户身份的安全。 1.2 数据传输机制 Socks5通过代理实现数据传输&#xff0c;支持TCP和UDP协议&#xff0c;为用户提供了高度灵活的…...

【lesson13】MySQL表的基本操作之create(创建),update(更新)和replace(替换)

文章目录 表的增删查改create测试建表基础测试 update测试建表基础测试 replace&#xff08;替换&#xff09;测试建表基础测试 表的增删查改 CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; create 测试 建表…...

SQL进阶 | HAVING子句

概述 “HAVING”其用法和含义与“WHERE”关键词相似&#xff0c;但具有更高级别的限定性。在SELECT语句中&#xff0c;“HAVING”关键词用于过滤聚合函数的结果。与“WHERE”关键词不同的是&#xff0c;“HAVING”关键词不能用于过滤单个行&#xff0c;它主要用于过滤由GROUP B…...

【Marp】基于Markdown-Marp快速制作PPT

【Marp】基于Markdown-Marp快速制作PPT 文章目录 【Marp】基于Markdown-Marp快速制作PPT零、参考资料一、Marp基本语法&#xff08;创建分页&#xff0c;排版图片&#xff0c;更换主题&#xff0c;Marp扩展指令修改样式&#xff09;1、创建新的PPT页面2、插入图片 & 排版图…...

微服务项目部署

启动rabbitmq \RabbitMQ\rabbitmq_server-3.8.2\sbin 找到你的安装路径 找到\sbin路径下执行这些命令即可 rabbitmqctl status //查看当前状态 rabbitmq-plugins enable rabbitmq_management //开启Web插件 rabbitmq-server start //启动服务 rabbitmq-server stop //停止服务…...

vite+TypeScript+vue3+router4+Pinia+ElmPlus+axios+mock项目基本配置

1.viteTSVue3 npm create vite Project name:... yourProjectName Select a framework:>>Vue Select a variant:>>Typescrit2. 修改vite基本配置 配置 Vite {#configuring-vite} | Vite中文网 (vitejs.cn) vite.config.ts import { defineConfig } from vite …...

【rabbitMQ】模拟work queue,实现单个队列绑定多个消费者

上一篇&#xff1a; springboot整合rabbitMQ模拟简单收发消息 https://blog.csdn.net/m0_67930426/article/details/134904766?spm1001.2014.3001.5502 在这篇文章的基础上进行操作 基本思路&#xff1a; 1.在rabbitMQ控制台创建一个新的队列 2.在publisher服务中定义一个…...

pdf转png的两种方法

背景:pdf在一般公司,没有办公系统,又不是word/wps/Office系统,读不出来,识别不了,只能将其转化为图片png,因此在小公司或者一般公司就需要pdf转png的功能。本文将详细展开。 1、fitz库(也就是PyMuPDF) 直接pip安装PyMuPDF即可使用,直接使用fitz操作,无需其他库。 …...

【起草】1-2 讨论 ChatGPT 在自然语言处理领域的重要性和应用价值

【小结&#xff1a;ChatGPT 在自然语言处理领域的八种典型应用】 ChatGPT是一种基于Transformer模型的端到端生成式对话系统&#xff0c;采用自监督学习的方式ChatGPT是一种基于Transformer模型的端到端生成式对话系统&#xff0c;采用自监督学习的方式在海量无标注数据集上进…...

Mapreduce小试牛刀(1)

1.与hdfs一样&#xff0c;mapreduce基于hadoop框架&#xff0c;所以我们首先要启动hadoop服务器 --------------------------------------------------------------------------------------------------------------------------------- 2.修改hadoop-env.sh位置JAVA_HOME配…...

二百一十七、Flume——Flume拓扑结构之聚合的开发案例(亲测,附截图)

一、目的 对于Flume的聚合拓扑结构&#xff0c;进行一个开发测试 二、聚合 &#xff08;一&#xff09;结构含义 这种模式是我们最常见的&#xff0c;也非常实用。日常web应用通常分布在上百个服务器&#xff0c;大者甚至上千个、上万个服务器产生的日志&#xff0c;处理起来…...

vue3+ts+vite+element plus 实现table勾选、点击单行都能实现多选

需求&#xff1a;table的多选栏太小&#xff0c;点击的时候要瞄着点&#xff0c;不然选不上&#xff0c;要求实现点击单行实现勾选 <ElTableborder:data"tableDataD"style"width: 100%"max-height"500"ref"multipleTableRef"selec…...

在WPF窗口中增加水印效果

** 原理&#xff1a; ** 以Canvas作为水印显示载体&#xff0c;在Canvas中创建若干个TextBlock控件用来显示水印文案&#xff0c;如下图所示 然后以每一个TextBlock的左上角为中心旋转-30&#xff0c;最终效果会是如图红线所示&#xff1a; 为了达到第一行旋转后刚好与窗口…...

wget下载到一半断了,重连方法

我是使用wget去下载 data.tar.gz 压缩包 wget https://deepgo.cbrc.kaust.edu.sa/data/deepgozero/data.tar.gz一开始下载的挺快&#xff0c;然后随着下载继续&#xff0c;下载速度就一直在下滑 下了大概2个小时后&#xff0c;已经下载了78%(6G/7.7G&#xff09;就断了。无奈c…...

Docker笔记:docker compose部署项目, 常用命令与负载均衡

docker compose的作用 docker-compose是docker官方的一个开源项目可以实现对docker容器集群的快速编排docker-compose 通过一个配置文件来管理多个Docker容器在配置文件中&#xff0c;所有的容器通过 services来定义然后使用docker-compose脚本来启动&#xff0c;停止和重启容…...

Java单元测试:JUnit和Mockito的使用指南

引言&#xff1a; 在软件开发过程中&#xff0c;单元测试是一项非常重要的工作。通过单元测试&#xff0c;我们可以验证代码的正确性、稳定性和可维护性&#xff0c;帮助我们提高代码质量和开发效率。本文将介绍Java中两个常用的单元测试框架&#xff1a;JUnit和Mockito&#x…...

缓存雪崩问题与应对策略

目录 1. 缓存雪崩的原因 1.1 缓存同时失效 1.2 缓存层无法应对高并发 1.3 缓存和后端系统之间存在紧密关联 2. 缓存雪崩的影响 2.1 系统性能下降 2.2 数据库压力激增 2.3 用户请求失败率增加 3. 应对策略 3.1 多级缓存 3.2 限流与降级 3.3 异步缓存更新 3.4 并发控…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...