WebPack4学习实践笔记(一)

2023-05-16

一、准备

nodejs安装教程:https://blog.csdn.net/FED_AF/article/details/105747632)

二、安装

(1)全局安装

:: 初始化npm
C:\Users\Administrator> npm init -y
package name: (administrator) webpack_test
::后面全部回车默认
::全局安装(webpack版本4.43.0,webpack-cli版本3.3.11)
C:\Users\Administrator> npm i webpack webpack-cli -g
::提供sw代码运行的服务器环境
C:\Users\Administrator> npm i serve -g

(2)项目安装

:: 初始化npm
项目根目录> npm init -y
package name: (webpack_test) 名称自己取,只要不和全局的一样就行
::后面全部回车默认
::安装webpack和webpack-cli
项目根目录> npm i webpack webpack-cli -D

(3)模块和插件安装

::安装webpack-dev-server
项目根目录> npm i webpack-dev-server -D
::用来打包css
项目根目录> npm i css-loader style-loader -D
::用来打包sass(这里是需要装css-loader和style-loader的,但前面已经装过就不再装)
项目根目录> npm i sass sass-loader -D
::用来打包html
项目根目录> npm i html-webpack-plugin -D
::用来打包css引入的图片
项目根目录> npm i url-loader file-loader -D
::用来打包html的img元素引入的图片
项目根目录> npm i html-loader -D


::用来提取css成单独文件
项目根目录> npm i mini-css-extract-plugin -D
::用来处理css兼容性
项目根目录> npm i postcss-loader postcss-preset-env -D
::用来压缩css代码
项目根目录> npm i optimize-css-assets-webpack-plugin -D
::用来检查规范js代码(airbnb风格)
项目根目录> npm i eslint-loader eslint eslint-config-airbnb-base eslint-plugin-import -D
::用来处理js代码的兼容性
项目根目录> npm i babel-loader @babel/preset-env @babel/core @babel/polyfill core-js -D
::用来实现PWA技术
项目根目录> npm i workbox-webpack-plugin serve -D
::用来多进程打包
项目根目录> npm i thread-loader -D
::用来配合dll使用,功能是将某个文件打包输出去,并在html中自动引入
项目根目录> npm i add-asset-html-webpack-plugin -D
::优化生产环境代码压缩
项目根目录> npm i terser-webpack-plugin -D

(4)第三方库安装

::jquery
项目根目录> npm i jquery -D

三、结构

项目根目录
    源代码目录src
    构建后代码目录build
    webpack.config.js

四、配置

  • 项目根目录下的webpack.dll.js(初始化动态链接库):

/*
	使用dll技术,对某些库(第三方库:jquery、vue)进行单独打包
*/
const {resolve} = require('path');
const webpack = require('webpack');
module.exports = {
	entry: {
		// 最终打包生成的[name]
		// ['jquery']要打包的库是jquery
		jquery: ['jquery']
	},
	output: {
		filename: '[name].js',
		path: resolve(__dirname, 'dll'),
		// 打包的库向外暴露出去的内容叫什么名字
		library: '[name]_[hash]',
	},
	plugins: [
		// 打包生成一个manifest.json,提供和jquery的映射关系
		new webpack.DllPlugin({
			// 映射库的暴露的内容名称
			name: '[name]_[hash]',
			// 输出文件路径
			path: resolve(__dirname, 'dll/manifest.json')
		})
	],
	mode: 'production'
};
  • 项目根目录下的webpack.dev.js(开发环境):

// resolve用来拼接绝对路径的方法
const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const AddAssetHtmlWebpackPlugin = require('add-asset-html-webpack-plugin');
/*
	样式文件可以使用HMR功能,因为style-loader内部实现了
	js文件默认不能使用HMR功能
	解决:需要修改js代码,添加支持HMR功能的代码,只能处理非入口js文件的其他文件
	html文件默认不能使用HMR功能(html不存在引用问题,没有优化的空间),同时会导致修改html文件后页面刷新无果
	解决:修改entry入口,将html文件引入
 */
// 设置node环境变量
process.env.NODE_ENV = 'development';
module.exports = { // webpack配置
	// 入口起点
	entry: ['./src/index.js', './src/index.html'],
	// 输出
	output: {
		// 输出文件名
		filename: 'built.js',
		// 输出路径
		// __dirname是nodejs的变量,代表当前文件的目录绝对路径
		path: resolve(__dirname, 'build')
	},
	// loader的配置
	module: {
		rules: [
            // 详细loader配置
            oneOf: [
				{
					// 匹配哪些文件
					test: /\.css$/,
					// 使用哪些loader进行处理,多个loader用use数组
					  use: [
						// use数组中loader的执行顺序:从右到左,从下到上,依次执行
						// 创建style标签,将js中的样式资源插入进去,添加到head中生效
						'style-loader',
						// 将css文件变成commonjs模块加载到js中,里面的内容是样式字符串
						'css-loader'
					]
				},
				{
					test: /\.sass$/,
					use: [
						'style-loader',
						'css-loader',
						// 将sass文件编译成css文件
						'sass-loader',
						'sass'
					]
				},
				{
					// 处理图片资源
					test: /\.(jpg|png|gif)$/,
					// 使用一个loader,直接用loader
					// 需要下载url-loader和file-loader
					loader: 'url-loader',
					options: {
						// 当发现图片大小小于8kb,就会被base64处理,转化为字符串
						// 优点:能够减少请求数量,减轻服务器压力
						// 缺点:图片体积会更大,文件请求速度更慢
						limit: 8 * 1024,
						// 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs
						// 解析时会出现问题:[object Module]
						// 解决:关闭url-loader的es6模块化,使用commonjs解析
						esModule: false
					}
				},
				{
					// 处理图片资源
					test: /\.html$/,
					// 处理html文件的img图片(负责引入img,从而能被url-loader处理)
					// 需要下载html-loader
					loader: 'html-loader'
				},
				{
					// 处理其他资源
					exclude: /\.(css|js|html|jpg|png|gif|sass|json)$/,
					loader: 'file-loader',
					options: {
						// 限制输出的文件名哈希值长度为10位,在加上本来的扩展名
						name: '[hash:10].[ext]'
					}
				}
			]	
		]
	},
	// plugins的配置
	plugins: [
		// 详细plugins的配置
		// html-webpack-plugin
		// 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
		// 需求:需要有结构的HTML文件
		new HtmlWebpackPlugin({
			// 将 './src/icons/icon.ico'文件作为网页标签的图标引入
			// favicon: './src/icons/icon.ico',
			// 复制 './src/index.html'文件,并自动引入打包输出的所有资源
			// 多个html需要多个HtmlWebpackPlugin,通过filename指定构建后的html路径和文件名
			template: './src/index.html'
		}),
		new HtmlWebpackPlugin({
			template: './src/inde.html',
			filename: './build/c/inde.html'
		}),
		// 告诉webpack哪些库不参与打包,同时使用时的名称也得改
		new webpack.DllReferencePlugin({
			manifest: resolve(__dirname, 'dll/manifest.json')
		}),
		// 将某个文件打包输出去,并在html中自动引入
		new AddAssetHtmlWebpackPlugin({
			filepath: resolve(__dirname, 'dll/jquery.js')
		})
	],
	// 模式
	// mode: 'production'
	mode: 'development',
	// 开发服务器devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器)
	// 特点:只会在内存中编译打包,不会有任何输出
	devServer: {
		contentBase: resolve(__dirname, 'build'),
		// 启动gzip压缩
		compress: true,
		// 自动打开浏览器
		// open: true,
		// 按如下配置即可在其他终端访问
		host: '0.0.0.0',
		// 开启热模块替换(HMR功能),省去不必要刷新
		hot: true,
		// 端口号
		port: 3000
	},
	devtool: "eval-source-map"
};
/*
	source-map是一种提供源代码到构建后代码映射的技术。用法如下:
	[inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map
	source-map:外部
		会提示错误代码准确信息和源代码的错误位置
	inline-source-map:内联,将source-map嵌入到入口js中,构建速度更快
		会提示错误代码准确信息和源代码的错误位置
	hidden-source-map:外部,将source-map输出到一个map文件中
		会提示错误代码错误原因但是没有错误位置,而且只能提示构建后代码的错误位置
	eval-source-map:内联,每一个文件都生成对应的source-map
		会提示错误代码准确信息和源代码的错误位置(只多了一个js文件的hash值)
	nosources-source-map:外部
		会提示错误代码准确信息,但是没有任何源代码信息
	cheap-source-map:外部
		会提示错误代码准确信息,但只能定位到行
	cheap-module-source-map:外部
		会提示错误代码准确信息,但只能定位到行


	速度快:eval-cheap-source-map>eval-source-map>inline-source-map>cheap-source-map>...
	调试友好:source-map>cheap-module-source-map>cheap-source-map>...

	开发环境通常选择eval-source-map或eval-cheap-module-source-map
	生产环境通常选择source-map或cheap-module-source-map

 */
  • 项目根目录下的webpack.pro.js(生产环境):

const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');
const WorkboxWebpackPlugin = require('workbox-webpack-plugin');
const webpack = require('webpack');
const AddAssetHtmlWebpackPlugin = require('add-asset-html-webpack-plugin');
/*
	缓存:
	babel缓存:让第二次打包构建速度更快

	文件资源缓存:让代码上线运行更好使用。
	每次webpack构建时会生成一个唯一的hash值加入到文件名中,以此保证当文件修改时刷新缓存
	使用contenthash保证只对更改过的文件重新生成hash值
*/
/*
	tree shaking: 去除无用代码
	前提: 1.必须使用ES6模块化  2.开启production环境
	作用:减少代码体积
	在packaage.json中配置"sideEffects": ["*.css"]表示除css文件外所有代码都进行tree shaking
*/
/*
	code split: 代码分割
	将较大的js文件分割成多个较小的js文件,从而实现并行加载,速度更快
*/
/*
	PWA:渐进式网络开发应用程序(离线可访问)
	通过workbox实现PWA
 */
// 复用loader
const commonCssLoader = [
					// 提取js中的css成单独文件
					MiniCssExtractPlugin.loader,
					'css-loader',
					// css兼容性处理:postcss --> postcss-loader postcss-preset-env
					// 帮postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式
					/*	"browserslist": {
						// 开发环境 --> 设置node环境变量:process.env.NODE_ENV = development
						"development": [
						"last 1 chrome version",//兼容谷歌浏览器最近的一个版本
						"last 1 firefox version",
						"last 1 safari version"
						],
						// 生产环境:默认是生产环境
						"production": [
						">0.2%",//考虑99.8%的浏览器的兼容性
						"not dead",//不考虑不再使用的浏览器的兼容性
						"not op_mini all"//不考虑op_mini浏览器的全部版本的兼容性
						]
					}*/
					// 使用loader的默认配置
					// 'postcss-loader',
					// 修改loader的默认配置
					{
						loader: 'postcss-loader',
						options: {
							ident: 'postcss',
							plugins: () => [
								// postcss的插件
								require('postcss-preset-env')()
							]
						}
					}

];
// 设置node环境变量
// process.env.NODE_ENV = 'development';
module.exports = { 
	entry: './src/index.js',
	output: {
		filename: 'built.[contenthash:10].js',
		path: resolve(__dirname, 'build')
	},
	module: {
		rules: [
			/*{
				// 用eslint做js语法检查
				// 只检查自己写的源代码,第三方的库是不用检查的
				// 在package.json中的eslintConfig设置检查规则:
				// 使用airbnb风格
				test: /\.js$/,
				// 排除node模块
				exclude: /node_modules/,
				// 优先执行
				enforce: 'pre',
				loader: 'eslint-loader',
				options: {
					// 自动规范源js的语法
					fix: true
				}
			},*/
			{
				// 以下loader只会匹配一个,造成冲突的可以放到oneOf外面
				oneOf: [
					{
						test: /\.css$/,
						use: [...commonCssLoader]
					},
					{
						test: /\.sass$/,
						use: [...commonCssLoader, 'sass-loader', 'sass']
					},
					{
						test: /\.(jpg|png|gif)$/,
						loader: 'url-loader',
						options: {
							limit: 8 * 1024,
							name: '[hash:10].[ext]',
							outputPage: 'images',
							esModule: false
						}
					},
					{
						test: /\.html$/,
						loader: 'html-loader'
					},
					{
						exclude: /\.(css|js|html|jpg|png|gif|sass|json|ico)$/,
						loader: 'file-loader',
						options: {
							outputPage: 'media',
							name: '[hash:10].[ext]'
						}
					},
					{
						// 用babel做js兼容性处理
						test: /\.js$/,
						exclude: /node_modules/,
						use: [
							// 开启多进程打包。
							// 进程启动时间大概为600ms,进程通信也有开销。
							// 只有工作消耗时间比较长,才需要多进程打包
							{

								loader: 'thread-loader',
								options: {
									workers: 2 // 进程2个
								}
							},
							{
								loader: 'babel-loader',
								options: {
									// 预设:指示babel做怎么样的兼容性处理
									// @babel/preset-env:基本兼容性处理:只能转换基本语法,不能转换promise等
									// @babel/polyfill:全部兼容性处理(在入口js文件中引入即可:import '@babel/polyfill';):所有兼容性代码全部引入,代码体积太大
									// core-js:按需处理兼容性
									presets: [
										[
											'@babel/preset-env',
											{
												// 按需加载
												useBuiltIns: 'usage',
												corejs: {
													// 指定core-js的版本
													version: 3
												},
												// 指定兼容性做到哪个版本浏览器
												targets: {
													chrome: '60',
													firefox: '60',
													ie: '8',
													safari: '10',
													edge: '17'
												}
											}
										]
									],
									// 开启babel缓存
									// 第二次构建时,会读取之前的缓存
									cacheDirectory: true
								}
							}
						]
					}
				]
			}
		]
	},
	plugins: [
		new HtmlWebpackPlugin({
			// favicon: './src/icons/icon.ico',
			template: './src/index.html',
			// 压缩html代码
			minify: {
				// 移除空格
				collapseWhitespace: true,
				// 移除注释
				removeComments: true
			}
		}),
		new MiniCssExtractPlugin({
			// 对输出的文件重命名
			filename: 'css/main.[contenthash:10].css'
		}),
		// 压缩css
		new OptimizeCssAssetsWebpackPlugin(),
		// 压缩css
		new WorkboxWebpackPlugin.GenerateSW({
			// 帮助serviceworker快速启动
			// 删除旧的serviceworker
			// 生成一个serviceworker配置文件
			clientsClaim: true,
			skipWaiting: true,
		}),
		// 告诉webpack哪些库不参与打包,同时使用时的名称也得改
		new webpack.DllReferencePlugin({
			manifest: resolve(__dirname, 'dll/manifest.json')
		}),
		// 将某个文件打包输出去,并在html中自动引入
		new AddAssetHtmlWebpackPlugin({
			filepath: resolve(__dirname, 'dll/jquery.js')
		})
	],
	// 对于单页面应用,可以将node_module中代码单独打包一个chunk最终输出
	// 对于多页面应用,可以自动分析多入口trunk中有没有公共的文件。如果有会打包成单独一个chunk
	optimization: {
		splitChunks: {
			chunks: 'all'
		}
	},
	mode: 'production',
	// 下面这一行不是注释,是忽略eslint报的no-console警告
	// eslint-disable-next-line
	// mode: 'development',
	devtool: "source-map",
	externals: {
		// 忽略库名 -- npm包名
		jquery: 'jQuery'
	}
};
  • 项目根目录下的package.json:

{
  "name": "webpack_code",
  "version": "1.0.0",
  "main": "webpack.config.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "description": "",
  "devDependencies": {
    "@babel/core": "^7.9.6",
    "@babel/polyfill": "^7.8.7",
    "@babel/preset-env": "^7.9.6",
    "add-asset-html-webpack-plugin": "^3.1.3",
    "babel-loader": "^8.1.0",
    "core-js": "^3.6.5",
    "css-loader": "^3.5.3",
    "eslint": "^7.0.0",
    "eslint-config-airbnb-base": "^14.1.0",
    "eslint-loader": "^4.0.2",
    "eslint-plugin-import": "^2.20.2",
    "file-loader": "^6.0.0",
    "html-loader": "^1.1.0",
    "html-webpack-plugin": "^4.3.0",
    "jquery": "^3.5.1",
    "mini-css-extract-plugin": "^0.9.0",
    "optimize-css-assets-webpack-plugin": "^5.0.3",
    "postcss-loader": "^3.0.0",
    "postcss-preset-env": "^6.7.0",
    "sass": "^1.26.5",
    "sass-loader": "^8.0.2",
    "serve": "^11.3.0",
    "style-loader": "^1.2.1",
    "thread-loader": "^2.1.3",
    "url-loader": "^4.1.0",
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.11",
    "webpack-dev-server": "^3.11.0",
    "workbox-webpack-plugin": "^5.1.3"
  },
  "browserslist": {
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ],
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ]
  },
  "eslintConfig": {
    "extends": "airbnb-base",
    "env": {
      "browser": true
    }
  },
  "sideEffects": [
    "*.css",
    "*.sass"
  ]
}
  • 项目根目录下的server.js:

/*
	服务器代码
	启动服务器指令:node server.js
*/
const express = require('express');
const app = express();
// 缓存保留时长
app.use(express.static('build', {maxAge: 1000 * 3600}));
// 监听3000端口
app.listen(3000);
  • 项目入口js:

...
import './print.js';
...

//热模块替换
if (module.hot) { // 用于开发环境
	// 一旦module.hot为true,说明开启了HMR功能
		/* 
			1、accept方法会监听print.js的变化,一旦发生变化,默认不会重新打包构建其他js,而是会执行后面的回调函数
			2、每引入一个(自己写的)js,就要在if里面加一个用来监听的accept函数
		 */
	module.hot.accept('./print.js', function() {})
}

//代码分割、懒加载、预加载
用于生产环境,通过import动态导入语法能将某个文件单独打包成一个chunk
//通过/* webpackChunkName: 'test' */将输出的chunk设置为固定的名字
// 正常加载是并行加载(同时加载多个文件,文件越多加载速度越慢)
// 懒加载:当文件需要使用时才加载
// 预加载 prefetch:等其他资源加载完毕,浏览器空闲了,再偷偷加载资源
// 懒加载或预加载都建立在代码分割的基础上
// 但是下面的语法eslint会报错,提示你import语句只能放在顶部,解决的方法,要么打包时关掉eslint,要么使用webpack.pro.js中的optimization实现按需加载
import(/* webpackChunkName: 'test', webpackPrefetch: true */'./test').then(({ mul }) => {
	console.log(mul(4, 5));
});

/*
	eslint不认识window、navigator全局变量
	解决:需要修改package.json中eslintConfig配置
    "env": { 
      "browser": true // 支持浏览器端全局变量
    }
    sw代码必须运行在服务器上
	npm i serve -g
	serve -s build	启动服务器,将build目录下所有资源作为静态资源暴露出去
	sw只能用https访问,本地除外
 */
// 注册serviceWorker
// 处理兼容性问题
if ('serviceWorker' in navigator) {
	window.addEventListener('load', () => {
		navigator.serviceWorker.register('/service-worker.js').then(() => {
			console.log('注册成功');
		}).catch(() => {
			console.log('注册失败');

		});
	});
}

五、性能优化

1、开发环境性能优化

侧重:

(1)优化打包构建速度

 - HMR

 - oneOf

(2)优化代码调试

 - source-map

2、生产环境性能优化

侧重:

(1)优化打包构建速度

 - oneOf

 - babel缓存

 - 多进程打包

(2)优化代码运行的性能

 - 文件资源缓存(hash-chunkhash-contenthash)

 - tree shaking

 - code split

 - 懒加载/预加载

 - pwa

 - externals

 - dll

六、使用

  • 手动打包

进入项目根目录,执行webpack命令,默认会将webpack.config.js作为配置文件,开发环境中,可以将webpack.dev,js复制为webpack.config.js。生产环境同理,并不是不能直接指定或修改配置文件,只是这样来得快。对于某些第三方库,可以先使用webpack.dll.js打包,以后每次打包再用webpack.pro.js

  • 开发环境实时监听打包

devServer配置:见webpack.dev.js

进入项目根目录,执行npx webpack-dev-server命令

  • 生产环境监听

服务器配置:见server.js

进入项目根目录,执行node server.js命令(只是创建了服务器,并不能自动打包和刷新页面)

运行servicework的服务器启动命令:serve -s build

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebPack4学习实践笔记(一) 的相关文章

  • 【Ubuntu】 vim 安装与美化 史上最详细

    一 安装vim sudo apt get install vim 二 配置vim 针对单个用户配置 vim vimrc 针对全部用户配置 vim etc vim vimrc 三 配置选项 1 我的配置 34 设置编码 set fileenc
  • 【Ubuntu】Ubuntu16.04安装 搜狗输入法 史上最详细

    一 基本配置 开发环境 xff1a ubuntu16 04 二 准备工作 下载 搜狗输入法linux版 搜狗输入法官网Linux版 我这里是64位的 xff0c 所以选择64位 1 拷贝搜狗输入法到ubuntu cp media sf sh
  • 【嵌入式】---交叉编译 移植 ALSA1.2.2

    一 开发环境 开发环境 xff1a ubuntu16 04 开发平台 xff1a imx6q 交叉编译工具链 xff1a arm linux gnueabihf 二 需要的软件 1 alsa lib 下载地址 xff1a alsa lib
  • 【Android Studio 】经典常用开发设置 [最新最详细-持续更新]

    概述 一个好的配置能够帮助开发者完成更便捷 更快速的开发书山有路勤为径 xff0c 学海无涯苦作舟 我是秋知叶i 期望每一个阅读了我的文章的开发者都能够有所成长 一 当前 Android Studio 版本 Android Studio 经
  • 【MobaXterm】登录SSH服务器

    登录SSH远程服务器 一 配置用户信息1 打开Session2 打开SSH3 新建用户4 创建用户 二 配置登录SSH服务器信息三 再次登录服务器 一 配置用户信息 1 打开Session 2 打开SSH 3 新建用户 4 创建用户 输入账
  • 【adb】 win11 配置 adb环境 史上最详细

    官网下载 adb官网下载 下载下来的压缩包platform tools r33 0 3 windows zip 我们解压得到一个platform tools 二 配置adb环境 新建系统变量 点击浏览目录选择解压的文件夹 xff0c 然后点
  • 【Dev-c++】美化配置

    概述 一个好的配置能够帮助开发者完成更便捷 更快速的开发书山有路勤为径 xff0c 学海无涯苦作舟 我是秋知叶i 期望每一个阅读了我的文章的开发者都能够有所成长 一 设置语法格式 点击工具 编辑器选项 选择 语法 点击预设这里选择 Plas
  • 嵌入式Linux调试器GDB的使用

    调试一直是程序开发的重中之重 xff0c 使用GDB调试可以帮助我们快速找到程序中的错误 注意 xff1a 在进行GDB调试之前 xff0c 程序在gcc编译时要加上 g 选项 1 进入GDB xff1a gdb 可执行文件名 2 查看GD
  • 华清数据结构项目实训——学生信息管理系统

    模块划分及主要文件 1 主程序模块 主要功能 xff1a 程序的入口 主要文件 xff1a main c 2 菜单模块 主要功能 xff1a 完成菜单的显示以及登录和调用相应功能函数 主要文件 xff1a menu h menu c 3 学
  • sqlite3的安装以及增删改查排序功能的实现

    目录 一 安装sqlite3 1 安装sqlite3数据库 xff1a 2 安装编译依赖库 3 安装可视化界面 4 验证数据库是否安装成功 二 常用数据库指令及SQL数据类型 1 常用数据库指令 2 常用SQL数据类型 三 数据库操作 1
  • C++函数模板

    前言 模板是一个通用框架 xff0c 是C 43 43 泛型编程 思想的主要体现 C 43 43 提供了函数模板 和类模板 两种模板机制 xff0c 本文介绍的是函数模板相关的知识 一 函数模板的作用及语法 作用 xff1a 用一个虚拟的类
  • MQ-2烟雾传感器

    一 MQ 2烟雾传感器简介 MQ 2常用于家庭和工厂的气体泄漏监测装置 xff0c 适宜于液化气 苯 烷 酒精 氢气 烟雾等的探测 故因此 xff0c MQ 2可以准确来说是一个多种气体探测器 MQ 2的探测范围极其的广泛 它的优点 xff
  • PX4姿态解算源码原理理解

    PX4源码原理理解一 xff0e 主要参考资料链接 xff1a 1 1 取PX4源码一小部分姿态解算来进行讲解姿态解算源码中文注释 xff1a https blog csdn net zouxu634866 article details
  • Linux 使用 curl 命令发送带参请求

    1 发送 post 请求 xff08 请求参数为 json 格式 xff09 xff1a curl i X POST H 39 Content type 39 39 application json 39 d 39 34 id 34 34
  • 理解和创建:Anaconda、Jupyterlab、虚拟环境、Kernel

    Anaconda如何创建虚拟环境并作为jupyterlab的内核使用 先明确一波概念一 虚拟环境 1 环境是什么 xff1f 2 虚拟环境是什么 xff1f 3 为什么需要创建虚拟环境 xff1f 4 Anaconda创建 激活 退出 删除
  • 【Windows】六种正确清理C盘的方法,解决你的红色烦恼

    如何正确的清理C盘 前言清理方法1 利用Windows自己附带的磁盘清理工具2 开启自动清理3 通过 配置存储感知或立即运行 来清理4 管理C盘中的程序5 系统文件夹转移6 将C盘现有内容转移到别的盘 参考链接 前言 Windows操作系统
  • 【机器学习】数据增强(Data Augmentation)

    文章目录 一 引言 背景二 为什么需要数据增强 xff1f 三 什么是数据增强 xff1f 定义分类 四 有监督的数据增强1 单样本数据增强 xff08 1 xff09 几何变换类 xff08 2 xff09 颜色变换类 2 多样本数据增强
  • 基于FRFT的雷达辐射源信号特征分析及提取

    信号在FRFT域上表示 xff0c 同时包含了信号的时域信息和频域信息 论文中提出的算法流程如图 xff1a 步骤 xff11 xff1a 提取雷达辐射源信号脉冲序列的脉冲 xff0c 进行相应的预处理 xff0c 包括带宽和能量的归一化
  • 【Linux】查看、激活、退出虚拟环境以及 CommandNotFoundError 错误解决

    文章目录 一 虚拟环境有关命令二 CommandNotFoundError Your shell has not been properly configured to use 39 conda activate 39 参考链接 一 虚拟环
  • 【PyTorch】torch.utils.data.DataLoader 简单介绍与使用

    文章目录 一 torch utils data DataLoader 简介二 实例参考链接 一 torch utils data DataLoader 简介 作用 xff1a torch utils data DataLoader 主要是对

随机推荐

  • 【Python】np.unique() 介绍与使用

    文章目录 一 np unique 介绍二 np unique 原型三 实例参考链接 一 np unique 介绍 对于一维数组或者列表 xff0c np unique 函数 去除其中重复的元素 xff0c 并按元素 由小到大 返回一个新的无
  • 【Pytorch】交叉熵损失函数 CrossEntropyLoss() 详解

    文章目录 一 损失函数 nn CrossEntropyLoss 二 什么是交叉熵三 Pytorch 中的 CrossEntropyLoss 函数参考链接 一 损失函数 nn CrossEntropyLoss 交叉熵损失函数 nn Cross
  • 【Linux】rm 命令:删除文件/文件夹

    文章目录 一 删除文件 文件夹 xff1a rm 命令二 删除文件 xff08 即这个文件被删除 xff09 三 删除文件夹四 注意参考链接 一 删除文件 文件夹 xff1a rm 命令 rm 是强大的删除命令 xff0c 它可以 永久性地
  • 【Pytorch】torch.max() 函数详解

    文章目录 一 一个参数时的 torch max 1 函数介绍2 实例 二 增加指定维度时的 torch max 1 函数介绍2 实例 三 两个输入张量时的 torch max 1 函数介绍2 实例 参考链接 一 一个参数时的 torch m
  • 【机器学习】KNN 算法介绍

    文章目录 一 KNN 简介二 KNN 核心思想实例分析 xff1a K 值的影响 三 KNN 的关键1 距离计算1 闵可夫斯基距离2 曼哈顿距离3 欧氏距离4 切比雪夫距离5 余弦距离总结 2 K值选择 四 KNN 的改进 xff1a KD
  • 【机器学习】Radius Neighbors Classifier(rNN,radius nearest neighbors)

    文章目录 一 半径近邻分类器 简介二 半径近邻分类器算法三 Radius Neighbors Classifier With Scikit Learn参考链接 一 半径近邻分类器 简介 Radius Neighbors Classifier
  • 扫盲:单片机入门分享 晶振 复位电路与电源

    学单片机走过许多弯路 xff0c 挖过许多坑 xff0c 浪费了很多时间 xff0c 做过实际产品后回顾过去的学习经历 xff0c 发现很多坑其实是可以避免的 xff0c 单片机的入门应该可以更轻松一点 xff0c 借CSDN论坛一方宝地
  • VR技术原理分析,【VR原理入门理论篇】

    VR技术原理分析 xff0c VR原理入门理论篇 xff0c 学习研究VR技术必须要了解的理论知识 目录 1 VR沉浸感和交互作用产生的原理 xff1a 2 关于沉浸感和交互作用的定义 3 如何生成符合VR要求的虚拟世界 4 最主流的VR开
  • ST-Link驱动安装不正确,设备管理器黄色感叹号,win10安装stlink驱动

    这是由于驱动没有安装好导致的 xff0c 从该链接下载驱动文件 xff1a http pan baidu com s 1bog5FZ5 我是win10 win7 win8一样的办法 解压缩后 xff0c 直接以管理员身份运行其中的dpins
  • 使用CIDR计算划分子网个数

    概念 CIDR xff08 无类别域间路由 xff0c Classless Inter Domain Routing xff09 是一种IP地址划分的方法 xff0c 其目的是更加有效地使用IPv4地址空间 CIDR的原理是将一个IP地址划
  • 关于字符串的长度和大小的定义

    char a 61 aaaaa 字符串长度为5 xff0c 数组长度 xff08 大小 xff09 为6 xff1b char b 5 61 aaaaa 字符串长度不确定 xff0c 数组长度 xff08 大小 xff09 为5 xff1b
  • 用安卓设备识别ArUco码

    先来看下效果 静态图片中的ArUcon码识别 在之前程序的基础上再添加一个Button和TextView xff0c 点击 识别 按钮检测照片中的ArUco码后 xff0c 在屏幕最下方显示识别到的ArUco的id和四个角点坐标 xff0c
  • VSCode集成Git

    VSCode集成Git流程 一 xff0c 下载git并配置环境变量 1 从git官网下载一个git安装包 xff0c 官网下载地址 git下载 2 下载完成后 xff0c 一路NEXT走下去 xff0c 只需注意下面这几个页面的配置 xf
  • Vscode使用clang-format格式化代码

    使用Vscode格式化代码 使用Vscode格式化代码操作步骤 使用Vscode格式化代码 可以在vscode上使用clang format对C C 43 43 代码自动格式化 xff0c 配置自己想要的格式规范 xff0c 解脱代码格式的
  • 二维数组转稀疏数组的思路

    二维数组转稀疏数组的思路 遍历 原始的二维数组 xff0c 得到有效数据的个数sum根据sum就可以创建稀疏数组sparseArr int sum 43 1 3 将二维数组的有效数据存入到稀疏数组 span class token comm
  • 实例方法和静态方法常识

    1 调用方式上 静态方法依赖于类 xff0c 通过类 静态方法调用 xff1b 实例方法依赖于类的对象 xff0c 需要创建对象后 xff0c 对象 实例方法使用 2 使用上 实例方法内部不能定义静态变量 xff0c 会出现编译错误 xff
  • 设计模式(1)

    设计模式的作用 代码重用性 可读性 可扩展性 可靠性 使程序呈现高内聚 xff0c 低耦合的特性 设计模式常用的七大原则有 单一职责原则 接口隔离原则 依赖倒转原则 里式替换原则 开闭原则OCP 迪米特法则 合成复用原则 单一职责原则 对类
  • windows安装配置zookeeper后启动出现的错误:java.io.IOException: Unable to create data directory

    今天学习zookeeper集群部署在Windows10上出现了很多问题现在一一叙述一下 问题1 再点击zkServer cmd出现闪退 需要用编译工具打开在最后一行加入pause命令 问题2datadir权限问题 在c盘部署是是需要系统管理
  • IDEA 查找接口的实现 的快捷键

    IDEA 风格 ctrl 43 alt 43 B Eclipse 风格 ctrl 43 T 例子
  • WebPack4学习实践笔记(一)

    一 准备 nodejs安装教程 xff1a https blog csdn net FED AF article details 105747632 xff09 二 安装 xff08 1 xff09 全局安装 初始化npm C Users