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

2024 年最新前端ES-Module模块化、webpack打包工具详细教程(更新中)

模块化概述

什么是模块?模块是一个封装了特定功能的代码块,可以独立开发、测试和维护。模块通过导出(export)和导入(import)与其他模块通信,保持内部细节的封装。

前端 JavaScript 模块化是指将代码拆分为独立的模块,每个模块负责特定的功能或逻辑。模块化的主要目的是提高代码的可维护性、可复用性和可扩展性。模块化让开发者能够组织代码,使之更加清晰、结构化,并且可以减少命名冲突和全局变量污染。

模块化优势

提高可维护性:模块的分离使代码更易于管理,修改或调试时只需专注于特定模块。
防止命名冲突:模块有自己的作用域,避免了全局作用域的污染。
重用性:可以将模块在不同的项目或文件中重复使用,提高开发效率。
依赖管理:模块化工具可以处理模块之间的依赖关系,确保按顺序加载。

模块化演变过程

前端 JavaScript 模块化从最早的无组织结构,到 IIFE、CommonJS、AMD,再到现代的 ES6 模块和打包工具,经历了不断演变。如今,ES6 模块已经成为标准,配合现代的打包工具,前端开发更加模块化和高效。

1. 没有模块化阶段 (ES3、ES3 之前)
在最早的 JavaScript 开发中,所有的代码都是通过 <script> 标签加载的。所有的脚本文件被直接插入 HTML 页面,并且依赖的加载顺序需要手动管理。这样容易导致命名冲突和全局变量污染。

2. 命名空间模式
前端开发者开始使用命名空间(Namespace)的方式组织代码,将相关功能模块封装在一个对象内,从而避免全局污染。

var MyModule = {foo: function() {console.log('foo');},bar: function() {console.log('bar');}
};MyModule.foo();

3. 立即调用函数表达式(IIFE)
IIFE 是一个自执行的函数,它创建了一个局部作用域,从而避免了全局变量污染。IIFE 成为了一种非常流行的模块化模式。

var MyModule = (function() {var privateVar = 'I am private';function privateMethod() {console.log(privateVar);}return {publicMethod: function() {privateMethod();}};
})();MyModule.publicMethod();

4. CommonJS (2009)
CommonJS 是 Node.js 中的模块化标准,也是服务器端 JavaScript 模块化的主要方式。它的特点是使用 require 导入模块,使用 module.exports 导出模块。

通过 module.exports 导出模块

module.exports = {foo: function() {console.log('foo');}
};
myModule.foo();

通过 require 导入模块

var myModule = require('./myModule');

5. AMD(Asynchronous Module Definition, 2010)
AMD 是一种用于浏览器的异步模块加载标准,最著名的实现是 RequireJS。AMD 的设计目标是解决浏览器环境中异步加载模块的问题。

定义模块

define('myModule', ['dependency'], function(dependency) {return {foo: function() {console.log('foo');}};
});

使用模块

require(['myModule'], function(myModule) {myModule.foo();
});

6.UMD(Universal Module Definition)

UMD 是为了兼容 CommonJS 和 AMD 而提出的一个模块化标准。UMD 模块可以同时运行在服务器端和浏览器端,解决了模块化标准不统一的问题。

(function (root, factory) {if (typeof define === 'function' && define.amd) {define(['dependency'], factory);} else if (typeof exports === 'object') {module.exports = factory(require('dependency'));} else {root.myModule = factory(root.dependency);}
}(this, function (dependency) {return {foo: function() {console.log('foo');}};
}));

7. ES6 模块(2015)
ECMAScript 2015 (ES6) 引入了官方的模块化系统,成为前端模块化的标准。它支持静态分析和编译时优化,模块以 importexport 进行导入和导出:

通过 export 导出模块

export function foo() {console.log('foo');
}

通过 import 导入模块

import { foo } from './myModule.js';
foo();

ES6 模块系统特点:

- 静态引入:模块依赖在编译时解析,能够优化打包体积和性能。
- 作用域独立:每个模块都有自己的作用域,防止命名冲突。
- 支持异步加载:通过 `import()` 动态导入模块。

8. 模块打包工具

随着 JavaScript 项目规模的扩大和模块化需求的增加,模块打包工具应运而生,它们允许开发者使用各种模块化标准,并将它们打包为浏览器兼容的文件。

- Browserify:最早的工具之一,允许在浏览器中使用 CommonJS 模块。
- Webpack:目前最流行的打包工具之一,支持 CommonJS、ES6 模块以及插件扩展。
- Rollup:专注于 ES6 模块的打包工具,生成的文件更为轻量。
- Parcel:零配置的打包工具,支持多种模块标准,且性能优异。

9. ES Module 在浏览器中的原生支持

现代浏览器现在已经支持原生的 ES6 模块化系统,开发者可以直接在浏览器中使用 type="module"<script> 标签。这让开发者可以直接在浏览器环境中使用 ES6 模块,而无需通过打包工具进行预处理。

<script type="module">import { foo } from './myModule.js';foo();
</script>

ES6 Module 特性

ES Module(ESM)是 ECMAScript 2015(ES6)引入的官方 JavaScript 模块系统,专门用于解决现代开发中模块化需求。它的特性包括静态分析、作用域隔离、支持异步加载等。它提高了代码的可维护性、性能和开发效率,并得到了浏览器和服务器环境的广泛支持。

1. 静态加载(静态分析)

ESM 的依赖关系在编译时就能确定,因此可以进行静态分析。这意味着模块依赖在代码执行前已被解析,编译器和打包工具可以在构建时进行优化和错误检查。

import { foo } from './myModule.js';

由于导入语句是静态的,工具可以提前检测哪些模块被使用,未使用的代码可以在构建过程中进行“树摇”(tree-shaking)优化,从而减小打包体积。

2. 作用域隔离

每个 ES 模块都有自己的独立作用域,模块内部的变量和函数不会泄露到全局作用域。这种封装避免了不同模块之间的命名冲突,确保代码安全。模块内部的 secret 变量是私有的,外部无法访问,只有 publicVar 通过 export 导出,供其他模块使用。

module.js

let secret = "I'm private";
export const publicVar = 'I am public';

3. import 和 export

ESM 使用 exportimport 关键字进行模块的导出和导入,有两种导出方式:命名导出默认导出

命名导出(Named Export):可以导出多个变量、函数或类,并且在导入时需要按名字导入。

module.js

export const foo = () => console.log('foo');
export const bar = () => console.log('bar');

main.js

import { foo, bar } from './module.js';
foo();
bar();

默认导出(Default Export):每个模块只能有一个默认导出,导入时可以自定义导入的名称。

module.js

export default function() {console.log('default export');
}

main.js

import myFunction from './module.js';
myFunction(); // 输出 'default export'

4. 模块是单例的

ES 模块是单例的,意味着每个模块只会被加载和执行一次,后续的导入都引用相同的模块实例。这保证了模块的状态在多个导入中是共享的。

module.js

let count = 0;
export const increment = () => count++;
export const getCount = () => count;

main.js

import { increment, getCount } from './module.js';
increment();
console.log(getCount()); // 1
increment();
console.log(getCount()); // 2

5. 严格模式

所有的 ES 模块默认处于严格模式(use strict),这意味着无法使用一些松散的 JavaScript 语法(如隐式全局变量、删除未定义属性等),从而提高代码的安全性和性能。

模块中自动使用严格模式

x = 10; // ReferenceError: x is not defined

6. 支持异步动态导入

除了静态导入,ES 模块还支持动态导入。通过 import() 函数,可以在代码执行时按需加载模块,动态导入返回一个 Promise。这个特性非常适合代码拆分和按需加载,尤其是在大型应用中提高性能。

main.js

document.getElementById('loadModule').addEventListener('click', async () => {const module = await import('./module.js');module.foo(); // 动态加载模块后调用
});

7. 浏览器原生支持

现代浏览器支持原生 ES 模块,开发者可以直接在浏览器中使用模块功能,无需额外的打包工具。通过 <script type="module"> 标签,浏览器可以异步加载模块,并自动管理模块的依赖关系。

<script type="module">import { foo } from './module.js';foo();
</script>

8. 文件路径和后缀

在使用 import 时,模块的文件路径必须是相对路径或绝对路径,并且需要指定 .js 后缀。这与 Node.js 的 CommonJS 模块系统不同,后者可以省略文件扩展名。

import { foo } from './module.js'; // 必须加 .js 扩展名

9. 兼容性 与 Polyfill

为了支持旧版浏览器和环境,开发者通常使用 Babel 等工具将 ES 模块转换为 CommonJS 或其他模块格式,同时结合 Webpack 等打包工具来处理依赖关系。

Polyfill 是一种用于在旧版本浏览器或不支持某些新特性环境中实现现代 JavaScript 功能的技术。它通常是指一个库或代码片段,用来提供尚未被原生支持的功能,让开发者能够使用最新的语言特性,同时保证在较旧环境中的兼容性。

随着 JavaScript 语言和浏览器技术的发展,新功能和 API 被不断引入,而这些功能可能不会立即在所有浏览器或环境中得到支持。Polyfill 使开发者可以在旧环境中使用这些新功能,而不必等待所有用户的浏览器升级。

早期浏览器不支持 Promise、fetch、Array.prototype.includes 等功能,但通过 Polyfill,开发者仍可以在这些浏览器中使用这些特性。
在 IE 浏览器中,许多 ES6(如 Map、Set)或 HTML5 API 都不被支持,Polyfill 可以帮助实现这些功能。

webpack 打包工具

Webpack 是一个非常流行的 JavaScript 模块打包工具,主要用于将前端项目中的各种资源(包括 JavaScript、CSS、图片等)打包成浏览器可以直接加载的文件。它支持模块化开发,并通过配置文件允许高度定制打包过程。

在这里插入图片描述

Webpack 工作原理

读取入口文件:Webpack 从配置文件中指定的入口文件开始,递归地读取文件中的依赖(如 import 和 require)。
构建依赖图:通过解析每个模块的依赖,Webpack 构建出一个完整的依赖图。
应用 Loaders:根据配置,Webpack 使用不同的 Loader 处理非 JavaScript 文件(如 CSS、图片、SASS 等)。
应用 Plugins:Webpack 在打包的不同阶段执行插件进行优化或特定的处理,如压缩代码、生成 HTML 文件等。
输出文件:Webpack 根据依赖图,生成打包后的文件,通常是一个或多个 JavaScript 文件,以及其他的静态资源(CSS、图片等)。

Webpack 优点

高度可配置:Webpack 提供了灵活的配置方式,可以根据项目需求进行高度定制。
强大的社区支持:Webpack 拥有丰富的插件和 loader 生态,几乎能满足所有类型的前端打包需求。
优化性能:通过代码拆分、Tree Shaking 等技术,Webpack 能够有效优化前端代码的加载速度和性能。

更新中······

相关文章:

2024 年最新前端ES-Module模块化、webpack打包工具详细教程(更新中)

模块化概述 什么是模块&#xff1f;模块是一个封装了特定功能的代码块&#xff0c;可以独立开发、测试和维护。模块通过导出&#xff08;export&#xff09;和导入&#xff08;import&#xff09;与其他模块通信&#xff0c;保持内部细节的封装。 前端 JavaScript 模块化是指…...

【深度学习】服务器常见命令

1、虚拟环境的安装位置 先进入虚拟环境 which python2、升序查看文件内容 ls -ltr3、查看服务器主机空间使用情况 df -hdf -h .4、查看本地空间使用情况 du -sh ./*du -sh * | sort -nr5、查找并删除进程 # 查找 ps aux# 删除 kill -KILL pid6、查看服务器配置 lscpuuna…...

C++小白实习日记——Pollnet,Efvi,UDP,数据类型转换(下)

内容太多了&#xff0c;这篇记录UDP接收端 一&#xff0c;UDP接收端接收数据 有了pollnet这个开源项目的支持&#xff0c;接收端的步骤为&#xff1a;1&#xff09;初始化硬编码的参数&#xff1a;接口&#xff0c;IP和端口 2&#xff09;创建接收文件.csv 3&#xff09;读…...

pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。

### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要结构&#xff1a; ![title](sources/bilstm.png) pytorch bilstm crf的教程&#xff0c;注意 这里不支持批处理 Python version…...

C# OpenCV机器视觉:畸变矫正

在一个阳光明媚的早晨&#xff0c;阿强决定去拍照。他拿起相机&#xff0c;穿上他最喜欢的羊毛大衣&#xff0c;准备记录下生活中的美好瞬间。可是&#xff0c;当他兴奋地查看照片时&#xff0c;发现自己拍的每一张都像是被外星人用变形金刚的力量扭曲过一样&#xff01;“这是…...

Java 密封类 (Sealed Classes) 深度解析

文章目录 语法说明定义密封类定义子类 使用场景探讨实际应用示例与其他语言特性的结合使用 Java 作为一种面向对象编程语言&#xff0c;提供了继承机制来实现代码复用和扩展。然而&#xff0c;无限制的继承可能导致代码库变得难以维护&#xff0c;甚至引入安全隐患。为了应对这…...

conda和pip源

conda 地址 ~/.condarc中科大源 channels:- conda-forge- https://mirrors.ustc.edu.cn/anaconda/pkgs/main/- https://mirrors.ustc.edu.cn/anaconda/pkgs/r/- https://mirrors.ustc.edu.cn/anaconda/pkgs/msys2/- defaults show_channel_urls: true查看 conda config --s…...

【c++数学】解一元一次方程

注意&#xff1a;没有合并多项式的功能&#xff0c;且未知数必须只在左边&#xff0c;右边是常数&#xff01;&#xff01;&#xff01; 好用记得点赞&#xff01; 代码如下&#xff1a; #include<iostream> #include<stdio.h>using namespace std;string q,f;d…...

【超详细实战攻略】Jmeter逻辑控制器中if控制器、模块控制器、测试片段的使用方法

【超详细实战攻略】Jmeter逻辑控制器中if控制器、模块控制器、测试片段的使用方法 1 搭建测试对象1.1 禅道下载1.2 禅道安装1.3 运行禅道1.4 接口查看1.5 接口选择 2 Jmeter前置操作2.1 创建Jmeter线程组2.2 创建信息头管理器和请求默认值2.3 添加获取token接口2.4 添加监听器 …...

采用qL-MPC技术进行小型固定翼无人机的路径跟随控制

来自论文"Predictive Path-Following Control for Fixed-Wing UAVs Using the qLMPC Framework in the Presence of Wind Disturbances" 控制架构 采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#…...

比特币是否会取代美元(以及其他主权货币)

上图是 Olivier Blanchard 宏观经济学第八版的英文版内容。这里用中文解释。 1. 背景与现状&#xff1a; 比特币的规模与美元相比仍然很小&#xff1a; 截至 2018 年 12 月&#xff0c;比特币的总流通量为 1730 万枚&#xff0c;每枚价值 $3,900&#xff0c;总市值约 $670 亿…...

safe area helper插件

概述 显示不同机型的必能显示的区域 实现步骤 引入safearea&#xff0c;引入其中的safearea的csharp 为cancas加入gameobject gameobject中加入safearea脚本 将UI作为这个gameobject的子物体&#xff0c;就可以完成显示...

融云分享基于 Rust 的鸿蒙 SDK 开发实践

12 月 5 日&#xff0c;以“同心聚力&#xff0c;共建共享鸿蒙新生态”为主题的“鸿蒙生态伙伴 SDK 开发者论坛”在京举行。 融云凭借对鸿蒙生态的率先适配和创新贡献&#xff0c;荣获华为鸿蒙生态“HarmonyOS NEXT SDK 星河奖”。 本次论坛邀请了多位行业领导者参与&#xff…...

golang中的值传递与引用传递,如何理解结构体的方法?

先从一个例子说起 type Counter struct {count int }func (c Counter) Inc() {c.count }func test1() {c : Counter{}do : func() {for i : 0; i < 10; i {c.count}fmt.Println("done")}go do()go do()time.Sleep(3 * time.Second)fmt.Println(c.count) }func te…...

TON游戏现状一览:区块链与Telegram的完美融合

TON&#xff08;The Open Network&#xff09;作为一款基于区块链的开放平台&#xff0c;因其超高的交易处理速度和与Telegram的紧密集成&#xff0c;成为游戏开发者和用户的新兴乐土。TON不仅仅是一个去中心化的网络&#xff0c;它还通过其核心加密货币——Toncoin&#xff0c…...

《变分法·吴迪光1987年》复习汇总

目录 第一章 变分法的概念1 泛函和泛函的极值例1 捷线&#xff08;最速降线&#xff09;问题例2 等周问题例3 极小曲面问题极值必要条件 2 基本引理&#xff08;考反证法&#xff09;基本引理1基本引理2 第二章 固定边界的变分问题 ♠ \spadesuit ♠ 欧拉方程&#xff08;一&am…...

使用IP自签名SSL证书

最近需要创建WebSocket服务器并使用SSL证书&#xff0c;由于是内网测试&#xff0c;所以需要使用指定IP的自签SSL证书。 其实笔者前面博文 使用nexus3作为Docker镜像仓库 解决nexus3登录x509: certificate has expired or is not yet valid 中有创建过相应的证书&#xff0c;这…...

如何持续优化呼叫中心大模型呼出机器人的性能?

如何持续优化呼叫中心大模型呼出机器人的性能&#xff1f; 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 持续优化呼叫中心大模型呼出机器人的性能是一个复杂而持续的过程&#xff0c;涉及多个层面的策略和措…...

3D,点云平滑法线估计

需要平滑的情况 1、用激光扫描仪等设备扫描物体(尤其是比较小的物体)时,往往会有测量误差。这些误差所造成的不规则数据如果直接拿来曲面重建的话,会使得重建的曲面不光滑或者有漏洞,而且这种不规则数据很难用统计分析等滤波方法消除; 2、后处理过程中,对同一个物体从…...

windows下pyenv与宝塔python冲突解决

windows下安装pyenv后与宝塔python环境冲突 1、将C:\Program Files\python\Scripts中的pip3.exe改名(pip3-.exe) 2、将C:\用户\{用户名}\.pyenv\pyenv-win\shims中的pip、pip.bat、python、python.bat改名(pip-、pip-.bat、python-、python-.bat)&#xff0c;然后使用pip3和p…...

C# 探险之旅:第二十五节 - 类型class之字段Fields大冒险

嘿&#xff0c;探险家们&#xff01;欢迎再次搭乘C#的魔法列车&#xff0c;今天我们要深入探索class里的宝藏——字段&#xff08;Fields&#xff09;&#xff01;想象一下&#xff0c;字段就像是类里的秘密小房间&#xff0c;里面藏着对象的小秘密和宝藏。我们不仅要看看这些小…...

如何更新项目中的 npm 或 Yarn 依赖包至最新版本

要升级 package.json 文件中列出的包&#xff0c;你可以使用 npm&#xff08;Node Package Manager&#xff09;或 yarn。以下是两种工具的命令来更新你的依赖项&#xff1a; 使用 npm 更新所有包到最新版本 npm update如果你想将所有依赖项更新到其各自最新的大版本&#xf…...

【Linux系列】使用 watch 命令实时查看容器状态

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

电脑技巧:Everything 1.5 版本重大更新​支持拼音搜索+全文搜索

目录 一、软件介绍 二、主要更新亮点 更快的搜索速度和拼音搜索 全文搜索功能 智能推荐功能 增强的过滤选项 改进的用户界面 更好的多语言支持 增强的安全性和隐私保护 三、总结 Everything 作为一款备受推崇的文件搜索工具&#xff0c;以其卓越的性能和简洁的用户界…...

MySQL八股-全局锁,表级锁,表锁,元数据锁,意向锁,行级锁,行锁,间隙锁,临键

文章目录 全局锁表级锁表锁(表级锁)元数据锁(MDL&#xff0c;Meta Data Lock&#xff0c;表级锁)元数据锁演示元数据锁兼容的情况元数据锁互相阻塞的情况 意向锁&#xff08;Intention lock&#xff0c;表级锁&#xff09;意向锁分类意向锁演示&#xff1a;意向共享锁(**IS**)与…...

电子应用设计方案-53:智能AI打印机系统方案设计

智能 AI 打印机系统方案设计 一、引言 随着人工智能技术的不断发展&#xff0c;将其应用于打印机系统可以显著提升打印效率、优化打印质量&#xff0c;并提供更智能化的用户体验。本方案旨在设计一款融合 AI 技术的智能打印机系统。 二、系统概述 1. 系统目标 - 实现高精度、…...

docker—私有仓库搭建

docker—私有仓库搭建 HTTP 部署 docker run -d \-p 5000:5000 \--restartalways \--name registry \-v /opt/data/registry:/var/lib/registry \registry:2使用官方的 registry​ 镜像来启动私有仓库。默认情况下&#xff0c;仓库会被创建在容器的 /var/lib/registry​ 目录…...

马斯克Neuralink:未来的人机交互先锋,将会挑战传统通讯方式

Neuralink&#xff0c;由埃隆马斯克于2016年创立&#xff0c;专注于研发脑机接口技术。该技术通过植入大脑的芯片&#xff0c;实现人类与机器的“无缝连接”。2024年&#xff0c;Neuralink取得了突破性进展&#xff0c;成功在人体中植入了脑芯片。首位植入者Noland Arbaugh通过…...

[Maven]IDEA父工程创建子工程后父工程不可运行

IDEA在使用maven构建项目时&#xff0c;如果你在当前工程下创建一个子工程&#xff0c;那么原有的工程(变为父工程的工程)原有的代码通常会变得不可运行。 这是因为&#xff0c;使用maven创建父子工程关系后&#xff0c;IDEA会自动变更项目的模块相关配置。 比如这是我maven工程…...

Linux DNS 协议概述

1. DNS 概述 互联网中&#xff0c;一台计算机与其他计算机通信时&#xff0c;通过 IP 地址唯一的标志自己。此时的 IP 地址就类似于我们日常生活中的电话号码。但是&#xff0c;这种纯数字的标识是比较难记忆的&#xff0c;而且数量也比较庞大。例如&#xff0c;每个 IPv4 地址…...

Web前端技术宝典:期末冲刺指南

本文将为大家整理一份 Web 前端期末复习资料&#xff0c;内容涵盖 HTML、CSS、JavaScript 和常用的前端框架等方面的知识&#xff0c;帮助大家高效复习。 Web前端技术宝典&#xff1a;期末冲刺指南 1. HTML基础2. CSS基础3. JavaScript基础4. 前端框架5. 常见考试题型结语 1. …...

JVM 双亲委派模型以及垃圾回收机制

目录 1. JVM 内存区域划分 2. JVM 中类加载的过程 1) 类加载的基本流程 2) 双亲委派模型 3. JVM 中垃圾回收机制 1) 找到垃圾 a) 引用计数 b) 可达性分析 2) 释放垃圾 1. JVM 内存区域划分 一个运行起来的 Java 进程&#xff0c;其实就是一个 JVM 虚拟机。 而进程是…...

Linux编译Kernel时的文件zImage、文件dtb(dtbs)、核心模块分别是什么东西?

zImage文件的介绍 在编译Linux内核时&#xff0c;zImage 是一种内核映像文件&#xff0c;它是内核的压缩版本&#xff0c;通常用于引导嵌入式设备或其他资源有限的环境。 zImage 的具体含义 zImage 是 “Compressed Kernel Image” 的缩写。它是通过压缩原始的内核映像&…...

《计算机视觉证书:开启职业发展新航道》

一、引言 在当今科技飞速发展的时代&#xff0c;计算机视觉技术正以惊人的速度改变着我们的生活和工作方式。从智能手机的人脸识别解锁到自动驾驶汽车的环境感知&#xff0c;计算机视觉技术的应用无处不在。而计算机视觉证书作为这一领域的专业认证&#xff0c;其作用愈发凸显…...

4.Python 数字类型

Python 数字类型总结 文章目录 Python 数字类型总结1. 数字类型概述特点 2. 数字类型的创建与赋值3. 数字类型转换4. 数学运算与函数math 模块cmath 模块 5. 随机数生成6. 三角函数7. 数学常量 总结 Python 提供了多种数字类型来存储和操作数值数据。这些类型包括整数、浮点数、…...

火焰传感器与C++编程:精准检测火灾的技术实现

火灾是我们日常生活中一个不可忽视的安全隐患&#xff0c;而火灾报警系统的实现可以大大提高我们的安全保障。通过嵌入式技术和传感器&#xff0c;我们能够在第一时间识别火灾隐患并发出警报。火焰传感器作为一种专门用于火灾监测的传感器&#xff0c;能高效地通过红外线&#…...

纯前端实现一个精致的中英文挖空提示功能

前言 这两天给我的学习卡盒小程序新增了一个提示功能&#xff0c;在卡片正面的时候&#xff0c;点击左下角的小灯泡&#xff0c;就会弹出背面内容的提示&#xff0c;这个提示是挖了空的&#xff0c;这种方式可以帮助我们循序渐进的回忆内容&#xff0c;而不是直接看答案。 实现…...

秘塔搜索AI多线程批量生成TXT原创文章软件

秘塔AI搜索是秘塔科技旗下的搜索产品&#xff0c;其产品是简单、无广告、直接的搜索答案。 秘塔AI搜索写出来的文章无AI味及无AI痕迹&#xff0c;在如今AI文章泛滥时代&#xff0c;搜索引擎喜欢抓取收录这样无AI味原创文章。 秘塔搜索AI多线程批量生成TXT原创文章软件介绍&am…...

鸿蒙生态的崛起:开发实践、认证路径与激励策略

目录 前言 鸿蒙生态能力和行业解决方案 1、鸿蒙创新能力 2、鸿蒙行业解决方案 中软鸿蒙生态业务布局 1、深度参与鸿蒙生态建设 2、提供一站式鸿蒙生态服务 &#xff08;1&#xff09;服务目录 &#xff08;2&#xff09;改造过程的关键点 &#xff08;3&#xff09;鸿…...

python调用matlab函数(内置 + 自定义) —— 安装matlab.engine

文章目录 一、简介二、安装matlab.engine2.1、基于 CMD 安装2.2、基于 MATLAB 安装&#xff08;不建议&#xff09; 三、python调用matlab函数&#xff08;内置 自定义&#xff09; 一、简介 matlab.engine&#xff08;MATLAB Engine API for Python&#xff09;&#xff1a;…...

【数据分享】2014-2024年我国POI兴趣点数据(免费获取/来源于OSM地图)

POI是Point of Interest的简称&#xff0c;意为“兴趣点”&#xff0c;是互联网电子地图中用于表示特定位置的地理实体的核心数据类型。POI通常用于标注具体地点&#xff0c;例如餐厅、商场、学校、医院、景点等。这些数据以点的形式呈现&#xff0c;并附带详细属性信息&#x…...

【设计模式】如何用C++实现观察者模式【发布订阅机制】

【设计模式】如何用C实现观察者模式【发布订阅机制】 一、问题背景 代码质量影响生活质量。最近工作中频繁接触各种设计模式&#xff0c;深刻体会到优秀的设计模式不仅能显著降低后续维护的压力&#xff0c;还能提升开发效率。观察者模式作为一种降低耦合度、提高扩展性的利器…...

Qt编写RK3588视频播放器/支持RKMPP硬解/支持各种视音频文件和视频流/海康大华视频监控

一、前言 用ffmpeg做硬解码开发&#xff0c;参考自带的示例hw_decode.c即可&#xff0c;里面提供了通用的dxva2/d3d11va/vaapi这种系统层面封装的硬解码&#xff0c;也就是无需区分用的何种显卡&#xff0c;操作系统自动调度&#xff0c;基本上满足了各种场景的需要&#xff0…...

深入了解IPv6——光猫相关设定:DNS来源、DHCPv6服务、前缀来源等

光猫IPv6设置后的效果对比图&#xff1a; 修改前&#xff1a; 修改后&#xff1a; 一、DNS来源 1. 网络连接 来源&#xff1a; 从上游网络&#xff08;如运营商&#xff09;获取 IPv6 DNS 信息&#xff0c;通过 PPPoE 或 DHCPv6 下发。 特点&#xff1a; DNS 服务器地址直…...

Deepmotion技术浅析(五):运动追踪

运动追踪是 DeepMotion 动作捕捉和 3D 重建流程中的核心模块之一。该模块的主要任务是在视频序列中跟踪人体的运动轨迹&#xff0c;捕捉人体各部分随时间的变化&#xff0c;并生成连续的 3D 运动数据。DeepMotion 的运动追踪技术结合了计算机视觉、深度学习和物理模拟等方法&am…...

【html网页页面012】html+css制作品牌主题宏宝莱网页含视频、留言表单(7页面附效果及源码)

品牌主题宏宝莱网页制作 &#x1f964;1、写在前面&#x1f367;2、涉及知识&#x1f333;3、网页效果完整效果(7页)&#xff1a;代码目录结构&#xff1a;page1、首页page2、衍生品page3、包装设计page4、视频介绍page5、留言板page6、联系我们page7、详情页&#xff08;三层页…...

Java的栈与队列以及代码实现

Java栈和队列 栈的概念&#xff08;Stack&#xff09;栈的实现代码队列&#xff08;Queue&#xff09;模拟实现队列(双链表实现)循环队列&#xff08;循环数组实现&#xff09;用队列实现栈用栈来实现队列总结 栈的概念&#xff08;Stack&#xff09; 栈是常见的线性数据结构&…...

华为HarmonyOS NEXT 原生应用开发:鸿蒙中组件的组件状态管理、组件通信 组件状态管理小案例(好友录)!

文章目录 组件状态管理一、State装饰器1. State装饰器的特点2. State装饰器的使用 二、Prop装饰器&#xff08;父子单向通信&#xff09;1. Prop装饰器的特点2. Prop装饰器的使用示例 三、Link装饰器&#xff08;父子双向通信&#xff09;1. Link装饰器的特点3. Link使用示例 四…...

LeetCode:150. 逆波兰表达式求值

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;150. 逆波兰表达式求值 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表…...

LLM模型的generate和chat函数区别

在 Hugging Face 的 transformers 库中&#xff0c;GPT&#xff08;Generative Pre-trained Transformer&#xff09;类的模型有两个常用的生成文本的方法&#xff1a;generate 和 chat。这两个方法在使用上有一些区别。通常公司发布的 LLM 模型会有一个基础版本&#xff0c;还…...