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

webpack基本使用(基础配置)

文章目录

    • 概要理解
  • 一、使用示例
    • 1.引入库
    • 2.创建config/webpack.dev.js 测试环境
    • 3.创建config/webpack.prod.js 正式环境
    • 3.创建eslintrc.js
    • 4.创建babel.config.js
    • 5.package.json
    • 5.main.js
  • 总结


概要理解

vue或者react 通常用webpack作为打包工具,打包成浏览器识别的html、css、js -------简单理解webpack做为一个工厂。

  1. 需要告诉工厂先从那个入口(entry)开始去处理代码(通常是项目的main.js入口文件)
  2. 在所有的资源都间接或者直接被man,js引入之后,使用加载器(loaders) 将不同的原材料(less 、图片、css)转成javascript能理解的文件
  3. 当工厂还需要做一些特殊的处理(检查文件、代码压缩、图区css到单独的文件)的操作,这就是用来做特殊处理的工具(plugins)
  4. 那都处理好之后就需要输出了吧(output), webpack就将模块打包成一个或者多个文件,这些文件最终是浏览器运行的代码包

一、使用示例

首先先去webpack官方网站,包含了各种loader和plugins

1.引入库

npm install less less-loader --save-dev //处理less
npm install --save-dev css-loader //处理css
npm install --save-dev style-loader //处理style
npm install stylus stylus-loader --save-dev //处理stylus
npm i thread-loader -D

2.创建config/webpack.dev.js 测试环境


//创建config/webpack.dev.js 测试环境//处理路径问题
const path = require("path");
//使用ESLintPlugin 来做文件检查(常用作团队开发 规范代码作用)
const ESLintPlugin = require("eslint-webpack-plugin"); 
//在打包之后的dist文件中 生成一个html根目录文件
const HtmlWebpackPlugin = require("html-webpack-plugin");
const os = require("os");
const threads = os.cpus().length; // 检查cpu核数  多进程打包//工厂
module.exports = {// 入口entry: "./src/main.js", // 相对路径// 输出output: {// 所有文件的输出路径// 开发模式没有输出path: undefined,//开发模式中 devserver会重新运行刷新// 入口文件打包输出文件名 filename: "static/js/[name].js",// 给打包输出的其他文件命名chunkFilename: "static/js/[name].chunk.js",// 图片、字体等通过type:asset处理资源命名方式assetModuleFilename: "static/media/[hash:10][ext][query]",},// 加载器module: {rules: [// loader的配置{// 每个文件只能被其中一个loader配置处理//这样处理的好处 如果检测到是css 那么就不会往下走了,提高打包效率oneOf: [{test: /\.css$/, // 只检测.css文件use: [// 执行顺序:从右到左(从下到上)"style-loader", // 将js中css通过创建style标签添加html文件中生效"css-loader", // 将css资源编译成commonjs的模块到js中],},{test: /\.less$/,// loader: 'xxx', // 只能使用1个loaderuse: [// 使用多个loader"style-loader","css-loader","less-loader", // 将less编译成css文件],},{test: /\.s[ac]ss$/,use: ["style-loader","css-loader","sass-loader", // 将sass编译成css文件],},{test: /\.styl$/,use: ["style-loader","css-loader","stylus-loader", // 将stylus编译成css文件],},{test: /\.(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?|map3|map4|avi)$/,type: "asset/resource",// generator: {// 输出名称// filename: "static/media/[hash:10][ext][query]",//},},{test: /\.js$/,exclude: /node_modules/, // 排除node_modules下的文件,其他文件都处理use: [{loader: "thread-loader", // 开启多进程options: {works: threads, // 进程数量},},{loader: "babel-loader",options: {// presets: ["@babel/preset-env"],cacheDirectory: true, // 开启babel缓存cacheCompression: false, // 关闭缓存文件压缩plugins: ["@babel/plugin-transform-runtime"], // 减少代码体积},},],},],},],},// 插件plugins: [// plugin的配置new ESLintPlugin({// 检测哪些文件context: path.resolve(__dirname, "../src"),exclude: "node_modules", // 默认值cache: true, //  开启缓存 意思就是说 每次打包 都要进行语句检查,那么缓存之前的,只检查修改的文件,提高性能cacheLocation: path.resolve(__dirname,"../node_modules/.cache/eslintcache"),threads, // 开启多进程和设置进程数量}),new HtmlWebpackPlugin({// 模板:以public/index.html文件创建新的html文件// 新的html文件特点:1. 结构和原来一致 2. 自动引入打包输出的资源template: path.resolve(__dirname, "../public/index.html"),}),],// 开发服务器: 不会输出资源,在内存中编译打包的devServer: {host: "localhost", // 启动服务器域名port: "3000", // 启动服务器端口号open: true, // 是否自动打开浏览器hot: true, // 开启HMR(默认值 意思是不会全部更新 哪里修改更新哪里 热更新除了js文件},optimization: {// 开发模式下不需要压缩// 代码分割配置splitChunks: {chunks: "all",// 其他都用默认值},},// 模式mode: "development",devtool: "cheap-module-source-map",
};

3.创建config/webpack.prod.js 正式环境

//创建config/webpack.prod.js 正式环境//处理路径问题
const path = require("path");
//使用ESLintPlugin 来做文件检查(常用作团队开发 规范代码作用)
const ESLintPlugin = require("eslint-webpack-plugin"); 
//在打包之后的dist文件中 生成一个html根目录文件
const HtmlWebpackPlugin = require("html-webpack-plugin");
//将打包的css 处理成单独的css文件
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
//将抽离出来的css 进行压缩
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const os = require("os");
const threads = os.cpus().length; // cpu核数 开启多进程打包
//压缩js 
const TerserWebpackPlugin = require("terser-webpack-plugin");
//压缩图片
const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin");
//预加载 浏览器空余时间 加载其他模块内容 提高性能
const PreloadWebpackPlugin = require("@vue/preload-webpack-plugin");
//断网了,但是页面还是会展示出来,离线缓存
const WorkboxPlugin = require("workbox-webpack-plugin");// 用来获取处理样式的loader
function getStyleLoader(pre) {return [MiniCssExtractPlugin.loader, // 提取css成单独文件"css-loader", // 将css资源编译成commonjs的模块到js中{loader: "postcss-loader",options: {postcssOptions: {plugins: ["postcss-preset-env", // 能解决大多数样式兼容性问题],},},},pre,].filter(Boolean);
}module.exports = {// 入口entry: "./src/main.js", // 相对路径// 输出output: {// 所有文件的输出路径// __dirname nodejs的变量,代表当前文件的文件夹目录path: path.resolve(__dirname, "../dist"), // 绝对路径// 入口文件打包输出文件名filename: "static/js/[name].[contenthash:10].js",// 给打包输出的其他文件命名chunkFilename: "static/js/[name].chunk.[contenthash:10].js",// 图片、字体等通过type:asset处理资源命名方式assetModuleFilename: "static/media/[hash:10][ext][query]",// 自动清空上次打包的内容// 原理:在打包前,将path整个目录内容清空,再进行打包clean: true,},// 加载器module: {rules: [// loader的配置{//这样处理的好处 如果检测到是css 那么就不会往下走了,提高打包效率oneOf: [{test: /\.css$/, // 只检测.css文件use: getStyleLoader(), // 执行顺序:从右到左(从下到上)},{test: /\.less$/,// loader: 'xxx', // 只能使用1个loaderuse: getStyleLoader("less-loader"),},{test: /\.s[ac]ss$/,use: getStyleLoader("sass-loader"),},{test: /\.styl$/,use: getStyleLoader("stylus-loader"),},{test: /\.(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?|map3|map4|avi)$/,type: "asset/resource",//通过output统一输出//generator: {// 输出名称//filename: "static/media/[hash:10][ext][query]",//},},{	// 排除node_modules下的文件,将其他的js文件都做处理 //(因为浏览器虽然识别js文件,但是一些es6新语法// 比如箭头函数、解构赋值依然没办法识别)所以使用babel转译代码test: /\.js$/,exclude: /node_modules/,use: [{loader: "thread-loader", // 开启多进程options: {works: threads, // 进程数量},},{loader: "babel-loader",options: {// presets: ["@babel/preset-env"],cacheDirectory: true, // 开启babel缓存cacheCompression: false, // 关闭缓存文件压缩plugins: ["@babel/plugin-transform-runtime"], // 减少打包代码体积},},],},],},],},// 插件plugins: [// plugin的配置new ESLintPlugin({// 检测哪些文件 (检查src下面所有的文件)context: path.resolve(__dirname, "../src"),exclude: "node_modules", // 默认值(除了node_modules)cache: true, // 开启缓存 意思就是说 每次打包 都要进行语句检查,那么缓存之前的,只检查修改的文件,提高性能cacheLocation: path.resolve(__dirname, "../node_modules/.cache/eslintcache"), //缓存的地址threads, // 开启多进程和设置进程数量}),new HtmlWebpackPlugin({// 模板:以public/index.html文件创建新的html文件// 新的html文件特点:1. 结构和原来一致 2. 自动引入打包输出的资源//会在dist文件下创建一个一样index.html 并且以link标签方式,引入了output出口文件main.js文件template: path.resolve(__dirname, "../public/index.html"),}),//在插件中 创建MiniCssExtractPlugin(将css文件抽出,并放到指定的目录下)//打包后 会以link标签方式,在index.html,引入了main.css文件//new MiniCssExtractPlugin({//filename: "static/css/main.css",//}),//打包后 拆分为不同的css文件new MiniCssExtractPlugin({filename: "static/css/[name].[contenthash:10].css",chunkFilename: "static/css/[name].chunk.[contenthash:10].css",}),// 将打包后css压缩//new CssMinimizerPlugin(),// 打包后js压缩// new TerserWebpackPlugin({// parallel: threads, // 开启多进程和设置进程数量//}),// 预获取/预加载模块 浏览器空闲时候 提前加载模块 提高加载性能new PreloadWebpackPlugin({// rel: "preload",// as: "script",rel: "prefetch",}),// 意思 假如断网了,但是页面还是会展示出来,离线缓存new WorkboxPlugin.GenerateSW({// 这些选项帮助快速启用 ServiceWorkers// 不允许遗留任何“旧的” ServiceWorkersclientsClaim: true,skipWaiting: true,}),],//将js css 图片等 打包后的资源 进行压缩optimization: {// 压缩的操作minimizer: [// 压缩cssnew CssMinimizerPlugin(),// 压缩jsnew TerserWebpackPlugin({parallel: threads, // 开启多进程和设置进程数量}),// 压缩图片new ImageMinimizerPlugin({minimizer: {implementation: ImageMinimizerPlugin.imageminGenerate,options: {plugins: [["gifsicle", { interlaced: true }],["jpegtran", { progressive: true }],["optipng", { optimizationLevel: 5 }],["svgo",{plugins: ["preset-default","prefixIds",{name: "sortAttrs",params: {xmlnsOrder: "alphabetical",},},],},],],},},}),],// 代码分割配置splitChunks: {chunks: "all",// 其他都用默认值},runtimeChunk: {name: (entrypoint) => `runtime~${entrypoint.name}.js`,},},// 模式mode: "production",devtool: "source-map",
};

3.创建eslintrc.js

//根目录下 eslintrc.js  需要在webpack.prod.js做相应配置 
//在这个文件下 来自定义语法规范
module.exports = {// 继承 Eslint 规则extends: ["eslint:recommended"],env: {node: true, // 启用node中全局变量browser: true, // 启用浏览器中全局变量},parserOptions: {ecmaVersion: 6, // es6sourceType: "module", // es module},rules: {"no-var": 2, // 不能使用 var 定义变量},plugins: ["import"], // 解决动态导入语法报错
};

4.创建babel.config.js

//根目录下 babel.config.js  需要在webpack.prod.js做相应配置 
//(因为浏览器虽然识别js文件,但是一些es6新语法
// 比如箭头函数、解构赋值依然没办法识别)所以使用babel转译代码
// 配置智能预设(根据你所支持的浏览器或运行环境(如 Node.js)的版本,自动决定需要哪些 Babel 插件来转换代码)
module.exports = {// 智能预设:能够编译ES6语法presets: [["@babel/preset-env",{useBuiltIns: "usage", // 按需加载自动引入corejs: 3, //识别es6+新语法 补丁的作用 解决兼容性问题},],],
};

5.package.json

{"name": "web-pack-code","version": "1.0.0","description": "",//测试环境下 输出文件"main": "./src/main.js","scripts": {//启动dev命令 令devserver重新刷新项目 //devserver 实际会打包,但是打包的会存储在内存中,不会写入到磁盘    中,让保存修改文件时,触发devserver会重新更新,并将结果存储到内存中。"start": "npm run dev",//这里测试环境入口 就是配置的webpack.dev.js"dev": "webpack serve --config ./config/webpack.dev.js",// 打包 使用配置的正式环境 打包成一个或者多个文件组合成的dist"build": "webpack --config ./config/webpack.prod.js"},

5.main.js

// 完整引入
// import 'core-js'
// 按需加载 识别es6+新语法 补丁的作用 解决兼容性问题
// import "core-js/es/promise";if (module.hot) {// 判断是否支持热模块替换功能module.hot.accept("./js/count");module.hot.accept("./js/sum");
}//离线缓存
if ("serviceWorker" in navigator) {window.addEventListener("load", () => {navigator.serviceWorker.register("/service-worker.js").then((registration) => {console.log("SW registered: ", registration);}).catch((registrationError) => {console.log("SW registration failed: ", registrationError);});});
}

总结

`未完 继续更新,有错误请留言 会及时改正

相关文章:

webpack基本使用(基础配置)

文章目录 概要理解 一、使用示例1.引入库2.创建config/webpack.dev.js 测试环境3.创建config/webpack.prod.js 正式环境3.创建eslintrc.js4.创建babel.config.js5.package.json5.main.js 总结 概要理解 vue或者react 通常用webpack作为打包工具,打包成浏览器识别的…...

在js渲染的dom中的事件中传递对象

在某些情况下&#xff0c;可能需要将整个对象或部分对象嵌入到 HTML 元素的属性中&#xff0c;可以将对象数据序列化为 JSON 字符串&#xff0c;存储在 data-* 自定义属性中。这样可以在事件中取出并解析对象数据&#xff1a; <!DOCTYPE html> <html lang"en&qu…...

服务器加速器如何应对大规模并行计算需求

服务器加速器&#xff0c;如GPU(图形处理单元)、FPGA(现场可编程门阵列)和TPU(张量处理单元)&#xff0c;在大规模并行计算需求中发挥着重要作用。它们通过提供高效的并行处理能力&#xff0c;大幅提升了计算性能&#xff0c;满足了许多领域对大规模并行计算的需求。下面详细介…...

C++/Qt 多媒体(续四)

一、前言 前边讲述到了Qt的两项独特的模块编程支持的另一项内容——多媒体编程,上篇文章具体讲述的包括采集和播放原始音频相关类的概述,而本章开始主要概述多媒体编程实现的功能中的最后两项:播放视频文件和通过摄像头拍照和录像。 对于上篇内容的示例全部代码,可…...

怎样把flv转换成mp4格式?8种可以推荐的视频转换方法

怎样把flv转换成mp4格式&#xff1f;MP4格式因其广泛的兼容性&#xff0c;几乎可以在所有设备和媒体播放器上顺畅播放&#xff0c;这极大地方便了用户的观看体验。与flv文件相比&#xff0c;MP4通常能更有效地压缩视频文件&#xff0c;既能保持较高的画质&#xff0c;又能显著减…...

【2024数学建模国赛赛题解析已出】原创免费分享

2024数模国赛赛题已正式发布 数模加油站初步分析评估了此次竞赛题目&#xff1a; A题&#xff1a;偏数学仿真建模&#xff0c;难度偏难&#xff0c;适合数学专业背景的同学 B题&#xff1a;评价决策类&#xff0c;自由度大&#xff0c;容易水&#xff0c;适合基础不太好的同…...

Windows安装使用Docker

配置Dorker环境 启用或关闭windows功能 安装wsl 以管理员身份打开windows PowerShell&#xff0c;安装相关配置 下载docker应用程序 Releases tech-shrimp/docker_installer (github.com) 安装Docker 指定安装位置 默认双击程序就开始安装了&#xff0c;要安装在指定位置…...

【wsl2】从C盘迁移到G盘

参考大神 C盘的ubuntu22.04 非常大&#xff0c;高达30g 迁移后就只有几百M了&#xff1a; 右键有一个move没有敢尝试 迁移过程 Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved.Install the latest PowerShell for new features and improveme…...

低代码技术新趋势——逆向工程

低代码的下一个趋势&#xff0c;应该是“逆向工程”&#xff0c;用户可以通过 可视化界面&#xff0c;逆向输出全栈工程代码。而标准的工程代码同样可以编译为支持可视化分析、编辑、调整的“无代码”程序。前一个是解释性语言向编译性语言的逆向工程。后者则是一个理论实践应用…...

HTTP 二、进阶

四、安全 1、TLS是什么 &#xff08;1&#xff09;为什么要有HTTPS ​ 简单的回答是“因为 HTTP 不安全”。由于 HTTP 天生“明文”的特点&#xff0c;整个传输过程完全透明&#xff0c;任何人都能够在链路中截获、修改或者伪造请求 / 响应报文&#xff0c;数据不具有可…...

【Hot100】LeetCode—35. 搜索插入位置

目录 1- 思路二分 2- 实现⭐35. 搜索插入位置——题解思路 3- ACM 实现 题目连接&#xff1a;35. 搜索插入位置 1- 思路 二分 二分左区间的三种情况。由于目标值不一定在数组中&#xff0c;因此二分的过程中有三种情况判断 2- 实现 ⭐35. 搜索插入位置——题解思路 class So…...

001集——CAD—C#二次开发入门——开发环境基本设置

CAD C#二次开发首先需要搭建一个舒服的开发环境&#xff0c;软件安装后&#xff0c;需要修改相关设置。本文为保姆级入门搭建开发环境教程&#xff0c;默认已成功安装vs和cad 。 第一步&#xff1a;创建类库 第二步&#xff1a;进行相关设置&#xff0c;如图&#xff1a; 下一…...

Java类和对象——快速自动生成带参数的结构

1.鼠标点击右键或者&#xff08;使用快捷按键&#xff1a;AltInsert&#xff09; 2.选着generate 3.选择想要执行的指令 其中Constructor---构造方法&#xff08;声明了private属性然后直接使用即可&#xff09;&#xff0c;生成带参数的结构 1&#xff1a;不带参数的结构&…...

Python操作数据库的ORM框架SQLAlchemy快速入门教程

连接内存版SQLIte from sqlalchemy import create_engineengine create_engine(sqlite:///:memory:) print(engine)连接文件版SQLite from sqlalchemy import create_engineengine create_engine(sqlite:///sqlite3.db) print(engine)连接MySQL数据库 from sqlalchemy imp…...

提交MR这个词儿您知道是什么意思吗?

作为测试的同学&#xff0c;是不是经常会听研发同学说提交MR呢&#xff1f;那么究竟什么是提交MR呢&#xff1f;在这篇文章中会告诉大家&#xff01; 在Git中&#xff0c;提交MR&#xff08;Merge Request&#xff0c;合并请求&#xff09;是在进行协作开发的一种常见方式&…...

Linux sentinel写法

在linux驱动里我们经常能看到类似下面的写法&#xff1a; static const struct of_device_id asensm6_of_match[] {{ .compatible DRIVER_COMPATIBLE },{ /* sentinel */ }, };static const struct of_device_id rockchip_pinctrl_dt_match[] {{ .compatible "rockch…...

顶级域名服务器 - TLD服务器

TLD服务器&#xff08;顶级域名服务器&#xff09;是负责管理互联网域名系统&#xff08;DNS&#xff09;中所有顶级域名&#xff08;Top-Level Domains, TLDs&#xff09;的DNS记录的服务器。顶级域名是域名层级结构中的最高级别&#xff0c;位于域名的最右侧&#xff0c;例如…...

【LeetCode】01.两数之和

题目要求 做题链接&#xff1a;1.两数之和 解题思路 我们这道题是在nums数组中找到两个两个数使得他们的和为target&#xff0c;最简单的方法就是暴力枚举一遍即可&#xff0c;时间复杂度为O&#xff08;N&#xff09;&#xff0c;空间复杂度为O&#xff08;1&#xff09;。…...

便宜好用的云手机盘点

云手机作为一种新型远程计算服务&#xff0c;凭借其便利性、高效性和可扩展性&#xff0c;迅速成为了用户的热门选择。然而&#xff0c;面对市场上众多的云手机品牌&#xff0c;如何选择一款性价比高且体验良好的云手机&#xff1f;本文将为您盘点几款便宜好用的云手机产品。 雷…...

pdf怎么压缩小一些?推荐的几种PDF压缩方法

pdf怎么压缩小一些&#xff1f;在工作中&#xff0c;我们经常处理PDF文件。大文件不仅存储麻烦&#xff0c;还会拖慢传输速度。因此&#xff0c;我们通常希望将这些文件压缩成更小的尺寸。压缩后的文件更便于分享和管理&#xff0c;适用于云存储、社交媒体或其他在线平台&#…...

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

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

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...