package.json的全面详解
在 Node.js 的世界里,package.json
文件占据着举足轻重的地位。它就像项目的“大脑”,掌控着项目的各种信息和依赖管理。下面,我们就深入剖析 package.json
文件,让你全面了解它的奥秘。
一、创建 package.json
在正式开始使用 package.json
之前,我们需要先创建它。在项目的根目录下,打开终端并执行以下命令:
npm init
这个命令会启动一个交互式的过程,它会问你一系列关于项目的问题,比如项目名称、版本号、描述等。你可以根据实际情况依次输入相应的信息,输入完成后,npm
就会为你生成 package.json
文件。
如果你不想一步步回答这些问题,想快速生成一个默认的 package.json
文件,可以使用以下命令:
npm init -y
使用 -y
参数后,npm
会使用默认值快速生成 package.json
文件,后续你可以根据需要手动修改其中的内容。
二、常见属性配置说明
1. name
name
属性用于定义项目的名称,它是项目的唯一标识符。这个名称必须遵循一定的规则:只能包含小写字母、数字、连字符(-
)或下划线(_
),并且不能包含空格。以下是一个示例:
{"name": "my-utils-project"
}
需要注意的是,如果你打算将项目发布到 npm
上,这个名称必须是全局唯一的,否则会导致发布失败。
2. version
version
属性记录了项目的版本号,它遵循语义化版本规范(Semantic Versioning),格式为 MAJOR.MINOR.PATCH
,也就是“主版本号.次版本号.补丁版本号”。
- 主版本号(MAJOR):当你进行了不兼容的 API 修改时,需要增加主版本号。例如,你彻底重构了项目的核心功能,导致之前的 API 无法正常使用,这时就需要提升主版本号。
- 次版本号(MINOR):当你增加了新功能,并且保持了向后兼容性时,需要增加次版本号。比如,你为项目添加了一个新的模块,但这个模块不会影响现有功能的使用,那么就可以提升次版本号。
- 补丁版本号(PATCH):当你进行了向后兼容的 bug 修复时,需要增加补丁版本号。例如,你修复了一个小的逻辑错误,使得程序运行更加稳定,这时就可以提升补丁版本号。
示例如下:
{"version": "1.2.3"
}
3. description
description
属性是对项目的简要描述,它的作用是让其他开发者在看到项目时,能够快速了解项目的用途和主要功能。这个描述通常会显示在 npm
上项目的介绍页面,帮助其他开发者判断是否需要使用你的项目。示例如下:
{"description": "这是一个用于处理用户登录和注册的 Node.js 模块,提供了安全可靠的认证功能。"
}
4. main
main
属性指定了项目的入口文件,当其他项目引用你的项目时,默认会加载这个文件。例如,如果你有一个 Node.js 模块,其他开发者通过 require('your - module')
来引入你的模块,那么 require
函数会首先查找 main
属性指定的文件。示例如下:
{"main": "src/index.js"
}
在这个例子中,当其他项目引用该项目时,会加载 src/index.js
文件。
5. scripts
scripts
属性定义了一系列可以通过 npm
运行的脚本命令。它是一个对象,对象的键是脚本的名称,值是要执行的命令。通过 npm run <script - name>
可以执行相应的脚本。以下是一些常见的脚本示例:
{"scripts": {"start": "node index.js","dev": "nodemon index.js","test": "jest","build": "webpack --config webpack.config.js"}
}
npm start
:会执行node index.js
命令,通常用于启动项目。npm run dev
:会执行nodemon index.js
命令,nodemon
是一个工具,它可以在代码修改时自动重启 Node.js 应用,方便开发。npm test
:会执行jest
命令,用于运行测试用例。npm run build
:会执行webpack --config webpack.config.js
命令,使用webpack
进行项目打包。
6. keywords
keywords
属性是一个数组,用于列出项目的关键词。这些关键词可以帮助其他开发者在 npm
上更容易搜索到你的项目。例如:
{"keywords": ["nodejs", "web", "authentication", "login", "registration"]
}
当其他开发者在 npm
上搜索与“Node.js”、“web”、“认证”等相关的项目时,你的项目就有可能被搜索到。
7. author
author
属性用于指定项目的作者信息,它可以包含作者的姓名、邮箱和网址。常见的格式有以下几种:
{"author": "懒羊羊"
}
{"author": "懒羊羊 <lanyangyang@qq.com>"
}
在这些示例中,你可以根据实际情况选择合适的格式来填写作者信息。
8. license
license
属性指定了项目的开源许可证,它表明了其他开发者可以如何使用、修改和分发你的项目。常见的开源许可证有 MIT
、Apache - 2.0
、GPL - 3.0
等。以下是一些常见许可证的介绍和示例:
- MIT 许可证:是一种非常宽松的许可证,它允许用户自由使用、修改和分发代码,只需要保留原有的版权声明和许可声明。示例:
{"license": "MIT"
}
- Apache - 2.0 许可证:除了允许自由使用、修改和分发代码外,还提供了一定的专利授权保护。示例:
{"license": "Apache - 2.0"
}
- GPL - 3.0 许可证:是一种具有传染性的许可证,如果你使用了基于 GPL - 3.0 许可证的代码,那么你自己的项目也必须使用 GPL - 3.0 许可证进行开源。示例:
{"license": "GPL - 3.0"
}
三、依赖管理
1. dependencies
dependencies
属性记录了项目运行时所依赖的包。当你在项目中安装一个包时,如果使用 --save
或 -S
选项,这个包就会被添加到 dependencies
中。例如,安装 express
框架:
npm install express --save
安装完成后,package.json
文件会更新为:
{"dependencies": {"express": "^4.17.1"}
}
当其他开发者克隆你的项目并执行 npm install
时,npm
会自动下载 dependencies
中列出的所有包。
2. devDependencies
devDependencies
属性记录了项目开发时所依赖的包,这些包通常用于开发环境,如测试框架、打包工具等。当你安装一个开发依赖包时,使用 --save - dev
或 -D
选项,这个包就会被添加到 devDependencies
中。例如,安装 jest
测试框架:
npm install jest --save - dev
安装完成后,package.json
文件会更新为:
{"devDependencies": {"jest": "^26.6.3"}
}
devDependencies
中的包不会在生产环境中使用,当你将项目部署到生产环境时,可以使用 npm install --production
命令只安装 dependencies
中的包。
四、依赖版本升级标识
在 package.json
中,依赖的版本号前面通常会有一些特殊的符号,这些符号表示了依赖的升级规则。
1. ^
(脱字符)
^
符号允许更新次版本号和补丁版本号,但不允许更新主版本号。例如,^1.2.3
表示允许升级到 1.x.x
中最新的版本,但不会升级到 2.0.0
。这是因为主版本号的更新可能会引入不兼容的 API 变化,使用 ^
可以在保证项目兼容性的前提下,及时获取次版本和补丁版本的更新。示例:
{"dependencies": {"lodash": "^4.17.21"}
}
在这个例子中,lodash
可以升级到 4.x.x
系列的最新版本,但不会自动升级到 5.0.0
及以上版本。
2. ~
(波浪号)
~
符号允许更新补丁版本号,但不允许更新次版本号和主版本号。例如,~1.2.3
表示允许升级到 1.2.x
中最新的版本,但不会升级到 1.3.0
。~
通常用于当你希望只获取 bug 修复更新,而不引入新功能的情况。示例:
{"dependencies": {"axios": "~0.21.1"}
}
这里 axios
可以升级到 0.21.x
系列的最新版本,但不会自动升级到 0.22.0
及以上版本。
3. *
(星号)
*
符号表示允许更新到任意版本。例如,*
表示可以升级到最新的版本。这种方式比较激进,可能会引入不兼容的变化,一般不建议在生产环境中使用。示例:
{"dependencies": {"moment": "*"}
}
在这个例子中,moment
会在 npm install
时被更新到最新版本。
4. 固定版本号
直接指定具体的版本号,如 1.2.3
,表示不会自动升级。这种方式可以确保每次安装的依赖版本都是固定的,避免因版本更新导致的兼容性问题。示例:
{"dependencies": {"react": "17.0.2"}
}
这里 react
会一直安装 17.0.2
版本。
五、版本控制
在团队协作开发中,为了保证所有开发者使用的依赖版本一致,package - lock.json
文件起到了关键作用。当你执行 npm install
时,npm
会根据 package.json
中的依赖信息下载相应的包,并生成 package - lock.json
文件。这个文件会精确记录每个依赖的版本号、下载地址以及依赖之间的嵌套关系。
当其他开发者克隆项目并执行 npm install
时,npm
会优先按照 package - lock.json
中的记录下载依赖,从而保证所有开发者使用的依赖版本完全一致。这样可以避免因依赖版本不同而导致的开发环境差异和兼容性问题。
六、将项目通过 npm 发布到 npm 上
1. 注册 npm 账号
首先,你需要在 npm 官方网站 上注册一个账号。注册完成后,打开终端,输入以下命令登录到你的 npm 账号:
npm login
接着按照提示输入你的用户名、密码和邮箱,登录成功后即可进行后续的发布操作。
2. 检查 package.json
文件
在发布项目之前,要确保 package.json
文件中的各项信息准确无误,尤其是 name
和 version
属性。
name
属性:如前文所述,它必须全局唯一。如果名称已被占用,发布时会报错。你可以在 npm 官网搜索你的项目名称,确认是否可用。version
属性:每次发布时,版本号都必须是唯一且递增的。若使用相同的版本号进行重复发布,npm 会拒绝。你可以使用npm version
命令来更新版本号,例如:
npm version patch # 增加补丁版本号
npm version minor # 增加次版本号
npm version major # 增加主版本号
3. 编写 .npmignore
文件(可选但推荐)
.npmignore
文件的作用类似于 .gitignore
,用于指定在发布项目时需要忽略的文件和目录。这样可以避免将不必要的文件(如开发时的临时文件、日志文件等)发布到 npm 上,减小包的体积。例如:
node_modules
.idea
*.log
上述配置表示忽略 node_modules
目录、.idea
目录以及所有的日志文件。
4. 进行测试
在发布之前,务必对项目进行充分的测试,确保代码的稳定性和功能的正确性。你可以运行之前在 package.json
中定义的测试脚本,例如:
npm test
5. 发布项目
当以上步骤都完成后,在项目根目录下打开终端,输入以下命令进行发布:
npm publish
如果一切顺利,你的项目就会成功发布到 npm 上。其他开发者就可以通过 npm install your - package - name
来安装和使用你的项目。
6. 更新项目
如果你对项目进行了修改并需要更新到 npm 上,首先要更新 package.json
中的 version
属性,然后再次执行 npm publish
命令即可。
综上所述,package.json
文件是 Node.js 项目开发中不可或缺的一部分,它涵盖了项目的各种元信息和依赖管理。掌握 package.json
文件的各个属性、版本控制方法以及项目发布流程,对于高效开发和维护项目至关重要。希望通过本文的介绍,你能对 package.json
文件有更深入的理解和应用。
相关文章:
package.json的全面详解
在 Node.js 的世界里,package.json 文件占据着举足轻重的地位。它就像项目的“大脑”,掌控着项目的各种信息和依赖管理。下面,我们就深入剖析 package.json 文件,让你全面了解它的奥秘。 一、创建 package.json 在正式开始使用 …...
Linux、Docker与Redis核心知识点与常用命令速查手册
Linux、Docker与Redis核心知识点与常用命令速查手册 一、Linux基础核心 1. 核心概念 文件系统:采用树形结构,根目录为/权限机制:rwx(读/写/执行)权限,用户分为owner/group/others软件包管理: …...
通过TDE工业通讯网关解决设备通讯问题
设备通讯现状 在现代工业环境中,设备的通讯已成为提高生产效率和实现智能化管理的关键。随着工业4.0时代的到来,越来越多的智能设备被投入到生产运营中,这些设备通过集成特定的通信模块,形成了各自独立的自组网子系统。然而&…...
CI/CD(二)docker-compose安装Jenkins
1、docker-compose.yml version: 3.8services:jenkins:image: jenkins/jenkins:lts # 使用官方的 Jenkins LTS 镜像container_name: jenkinsuser: root # 如果需要以 root 用户运行ports:- "8080:8080" # Jenkins Web 界面端口- "50000:50000" # 用于 Jen…...
Linux操作系统3-文件与IO操作5(动态库与静态库的建立与加载)
上篇文章:Linux操作系统3-文件与IO操作4(软硬链接的建立与使用, 文件的三种时间)-CSDN博客 本篇代码Gitee仓库:myLerningCode/l21 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点:动态库与静态库 目录 一. 静…...
同步异步日志系统-日志器的实现
该模块是针对于前几个模块的整合,也是直接面向客户所使用的,对于该模块的实现,我们基于:继承建造者设计模式来实现; 因此我们需要抽象出一个日志器抽象基类; 该基类提供的接口如下: 1、 debug();//站在用户的角度来说就是我只需要…...
webpack 项目优化(一)
一、构建速度优化 缩小文件处理范围 module: {rules: [{test: /\.js$/,exclude: /node_modules/, // 排除第三方库include: path.resolve(__dirname, src), // 限定处理范围use: babel-loader}] }利用缓存 Webpack 5 内置持久化缓存(直接配置)࿱…...
【撰写技巧】基金项目撰写跟踪交流会
基金申请书撰写完成后,提交前的审查是一个非常关键的步骤,这决定了你提交的材料是否符合要求,是否具备足够的说服力,以及是否能够通过专家评审。审查主要可以分为自我审查和团队审查两个层面。以下是基金申请书审查的主要内容和注…...
vue学习笔记
结合目录,点击阅读 文章目录 案例1:第一行vue代码App.vue引入Person.vue案例:改变变量的值案例:改变对象属性值案例:toRefs进行解包案例:给名字首字母大写案例:监视变量值的变化案例࿱…...
前端构建工具——Webpack和Vite的主要区别
目录 1. 设计理念2. 性能表现3. 使用场景4. 配置复杂度5. 生态系统6. 性能对比总结7. 选择建议 1. 设计理念 Webpack 设计理念:Webpack是一个通用的模块打包工具,它将项目中的各种资源(如JavaScript、CSS、图片等)视为模块&…...
Letsencrypt+certbot为域名免费配置ssl
1、基础概念 Let’s Encrypt 是一个提供免费 SSL/TLS 证书的认证机构,它的目标是让互联网上的通信更加安全,特别是普及 HTTPS。通过 Let’s Encrypt 提供的证书,网站可以使用加密连接,保护用户的数据传输。 Certbot 是一个由电子…...
达梦数据库针对慢SQL,收集统计信息清除执行计划缓存
前言:若遇到以下场景,大概率是SQL走错了执行计划: 1、一条SQL在页面上查询特别慢,但拿到数据库终端执行特别快 2、一条SQL在某种检索条件下查询特别慢,但拿到数据库终端执行特别快 此时,可以尝试按照下述步…...
IDEA通过Contince接入Deepseek
Deepseek 的出色表现,上期【Deepseek得两种访问方式与本地部署】 安装Continue插件 第一步、下载插件 在编辑栏【File】->设置【Settiings】或快捷键【CtrlAltS】,弹窗的左侧导航树,选择【plugins】,在marketplace 搜索【Continue】,点…...
Windows 10 ARM工控主板CAN总线实时性能测试
在常规的Windows系统中支持CAN总线应用,需要外接CAN总线适配器,通常为USB转CAN模块或PCI接口CAN卡。实时性本身是CAN总线的显著特性之一,但由于Windows并非实时操作系统,应用程序容易受到系统CPU负载影响,导致调度周期…...
深入理解无锁队列与C++原子操作
文章目录 深入理解无锁队列与C原子操作引言原子操作基础什么是原子操作?内存顺序(Memory Order) 无锁队列实现环形缓冲区队列(单生产者/单消费者)链表式无锁队列(多生产者/多消费者) 关键问题与…...
OpenGL: QOpenGLShaderProgram
一、QOpenGLShaderProgram 编译过程的封装 1、bool addShaderFromSourceCode(QGLShader::ShaderType type, const char * source); 2、bool addShaderFromSourceFile(QGLShader::ShaderType type, const QString & fileName); 3、virtual bool link(); 4、bool bind(); 5、…...
【网络编程】之数据链路层
【网络编程】之数据链路层 数据链路层基本介绍基本功能常见协议 以太网什么是以太网以太网协议帧格式数据链路层的以太网帧报文如何封装/解封装以及分用以太网通信原理传统的以太网与集线器现代以太网与交换机碰撞域的概念 Mac地址基本概念为什么要使用Mac地址而不是使用IP地址…...
HTTP 和 TCP/IP-傻傻分不清
HTTP 和 TCP/IP 是计算机网络中不同层次的协议,它们的核心区别在于功能和所属的网络层次。以下是详细对比: 1. 所属网络层次 TCP/IP 定位:TCP/IP 是一个协议族(包含多个协议),涵盖网络通信的传输层和网络层…...
【SQL】SQL约束
🎄约束 📢作用:是用于限制存储再表中的数据。可以再创建表/修改表时添加约束。 📢目的:保证数据库中数据的正确、有效性和完整性。 📢对于一个字段可以同时添加多个约束。 🎄常用约束: 约束分类 约束 描述关键字非…...
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑧】
ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase08 作者:车端域控测试工程师 更新日期:2025年02月17日 关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-008测试用例 用例ID测试场景验证要点参考条款预期结果TC…...
解决vue-awesome-swiper 4.x + swiper 5.x 分页pagination配置不生效问题
这次给的需求需要实现几个轮播图,我打算用swiper来做。刚开始我参照同事之前实现的swiper,复制到我的新页面中,是可用的。但是这次的需求需要有底下的分页pagination,而且因为版本比较老,比较难找到配置项。这里说一下…...
Spring Boot 开发入门
文章来源:开发您的第一个 Spring Boot 应用程序 (Developing Your First Spring Boot Application) _ Spring Boot3.4.0中文文档(官方文档中文翻译)|Spring 教程 —— CADN开发者文档中心 本节介绍如何开发一个小型的 “Hello World!” Web 应用程序&…...
MATLAB算法实战应用案例精讲-【数模应用】空间插值(附MATLAB、R语言和python代码实现)
目录 前言 算法原理 什么是插值? 为什么要插值? 常见插值方法 插值方法选择 GIS中常用的空间分析方法 一、空间插值 二、缓冲区分析 三、空间统计 四、领域分析 五、网络分析 六、多标准决策 插值分析 插值应用示例 空间插值的类型 不同工具箱中的空间插值工…...
碰一碰发视频@技术原理与实现开发步骤
碰一碰发视频系统:技术原理与实现方案解析 引言 近年来,随着移动支付和近场通信技术(NFC)的普及,“碰一碰”功能逐渐成为商家与用户交互的新入口。通过“碰一碰加盟”模式,企业可以快速赋能线下商户&…...
14.学成在线开发小结
1.统计两张表的数据,表1和表2是一对多的关系,如果既要统计表1又要统计表2的数据,要分开进行统计,否则表1一条数据在表2中可能有多条数据对应,导致表1的数据被多次统计。 2.nacos配置文件的数据读取不到可能原因有&…...
图像处理之CSC
CSC 是 Color Space Conversion(色彩空间转换)的缩写,它涉及图像处理中的亮度、饱和度、对比度和色度等参数的调整。这些参数是图像处理中的核心概念,通常用于描述和操作图像的颜色信息。 以下是亮度、饱和度、对比度和色度与 CS…...
数据结构:顺序表(Sequence List)及其实现
什么是顺序表? 顺序表是一种最简单的数据结构,它就像一排连续的小房子,每个房子里都住着一个数据元素。这些房子是按顺序排列的,每个房子都有一个门牌号(下标),我们可以通过门牌号快速找到对应…...
微信云开发小程序音频播放踩坑记录 - 从熄屏播放到iOS静音
在开发小程序冥想功能时,我们遇到了几个棘手的问题:用户反馈手机熄屏后音频停止、iOS设备播放没声音、冥想音频没有访问计数和CDN缓存优化等。本文将分享这些问题的解决过程和实践经验。 微信小程序简称:Moodo 微信小程序全程:AIMoodo心情日记系统 简…...
Python基础
https://www.w3schools.com/https://docs.python.org/3/ Python 介绍 Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。 要开始学习Python编程,首先就得把Python安装…...
基于Go语言 XTA AI聊天界面实现
项目开源地址: XTA-AI-SDK 人工智能技术的迅速发展,AI聊天应用变得越来越流行。本文将介绍如何使用Go语言和LCL库( Lazarus Component Library)创建一个功能丰富的AI聊天界面。项目主要包含以下模块: 项目背景 本项目旨在为开发…...
线上项目报错OOM常见原因、排查方式、解决方案
概述 OutOfMemoryError(OOM)是 Java 应用程序中常见的问题,通常是由于应用程序占用的内存超过了 JVM 分配的最大内存限制。在 Spring Boot 项目中,OOM 问题可能由多种原因引起。 1. OOM 的常见原因 OOM 通常由以下几种情况引起&…...
AI大模型零基础学习(6):多模态大模型实战——让AI看懂世界
从“文字交互”到“全感官认知”的维度突破 一、多模态大模型:AI的“五感觉醒” 1.1 基础概念重塑 单模态局限:传统大模型仅处理文本(如ChatGPT) 多模态进化: 输入:支持文本、图像、音频、视频、3D模型 …...
基于Spring Boot+Vue的宠物服务管理系统(源码+文档)
项目简介 宠物服务管理系统实现了以下功能: 基于Spring BootVue的宠物服务管理系统的主要使用者分为用户管理模块,由于系统运行在互联网络中,一些游客或者病毒恶意进行注册,产生大量的垃圾用户信息,管理员可以对这些…...
简要分析LeetCode树经典题目(Java)
目录 开场白 实战环节 准备工作 遍历问题 LeetCode144. 二叉树的前序遍历 方法一 方法二 LeetCode94. 二叉树的中序遍历 LeetCode145. 二叉树的后序遍历 方法一 方法二 LeetCode102. 二叉树的层序遍历 LeetCode103. 二叉树的锯齿形层序遍历 LeetCode107. 二叉树的…...
vue3开发打年兽功能
1.效果 WeChat_20250217192041 2.代码 2.1 index.vue <template><div class"pages"><TopNavigationYleftTitle"打年兽"ruleIconColor"#fff"backgroundImage""svgIpcn"backIcon4"gradientBackgroundColor&q…...
动手学Agent——Day2
文章目录 一、用 Llama-index 创建 Agent1. 测试模型2. 自定义一个接口类3. 使用 ReActAgent & FunctionTool 构建 Agent 二、数据库对话 Agent1. SQLite 数据库1.1 创建数据库 & 连接1.2 创建、插入、查询、更新、删除数据1.3 关闭连接建立数据库 2. ollama3. 配置对话…...
如何在 GitHub 中创建一个空目录 ?
GitHub 是开发人员必不可少的工具,它提供了存储、共享和协作代码的平台。一个常见的问题是如何在 GitHub 存储库中创建一个空目录或文件夹。GitHub 不支持直接创建空目录。但是,有一种解决方法是使用一个虚拟文件,通常是一个 .gitkeep 文件。…...
3. 导入官方dashboard
官方dashboard:https://grafana.com/grafana/dashboards 1. 点击仪表板 - 新建 - 导入 注:有网络的情况想可以使用ID,无网络情况下使用仪表板josn文件 2. 在官方dashboard网页上选择符合你现在数据源的dashboard - 点击进入 3. 下拉网页选…...
前端知识速记--HTML篇:HTML5的新特性
前端知识速记–HTML篇:HTML5的新特性 一、语义化标签 HTML5引入了许多新的语义化标签,如 <header>、<footer>、<article>、<section> 等。这些标签不仅提高了网页的可读性和结构性,还有助于SEO(搜索引擎…...
【数据分享】1929-2024年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站…...
鸿蒙面试题
1.0penHarmony的系统架构是怎样的? 2.电话服务的框架? 3.OpenHarmony与HarmonyOS有啥区别?...
pdf-extract-kit paddle paddleocr pdf2markdown.py(效果不佳)
GitHub - opendatalab/PDF-Extract-Kit: A Comprehensive Toolkit for High-Quality PDF Content Extraction https://github.com/opendatalab/PDF-Extract-Kit pdf2markdown.py 运行遇到的问题: 错误: -------------------------------------- C Tra…...
基于STM32、HAL库、RX8025T(I2C接口)驱动程序设计
一、简介: RX8025T 是一款低功耗、高精度的实时时钟芯片,具有以下特性: I2C 接口通信 内置 32.768 kHz 晶振 提供秒、分、时、日、月、年等时间信息 支持温度补偿,提高时间精度 低功耗设计,适合电池供电的应用 二、I2C初始化: #include "stm32l4xx_hal.h&…...
基于Ubuntu+vLLM+NVIDIA T4高效部署DeepSeek大模型实战指南
一、 前言:拥抱vLLM与T4显卡的强强联合 在探索人工智能的道路上,如何高效地部署和运行大型语言模型(LLMs)一直是一个核心挑战。尤其是当我们面对资源有限的环境时,这个问题变得更加突出。原始的DeepSeek-R1-32B模型虽…...
【Go语言快速上手】第二部分:Go语言进阶之并发编程
文章目录 一、并发编程1. goroutine:创建和调度 goroutine2. channel:无缓冲 channel、有缓冲 channel、select 语句2.1 无缓冲 channel2.2 有缓冲 channel2.3 select 语句 3. sync 包:Mutex、RWMutex、WaitGroup 等同步原语3.1 Mutex&#x…...
《机器学习数学基础》补充资料:四元数、点积和叉积
《机器学习数学基础》第1章1.4节介绍了内积、点积的有关概念,特别辨析了内积空间、欧几里得空间;第4章4.1.1节介绍了叉积的有关概念;4.1.2节介绍了张量积(也称外积)的概念。 以上这些内容,在不同资料中&…...
蓝桥杯篇---IAP15F2K61S2矩阵键盘
文章目录 前言简介矩阵键盘的工作原理1.行扫描2.检测列状态3.按键识别 硬件连接1.行线2.列线 矩阵键盘使用步骤1.初始化IO口2.扫描键盘3.消抖处理4.按键识别 示例代码:4x4矩阵键盘扫描示例代码:优化后的矩阵键盘扫描注意事项1.消抖处理2.扫描频率3.IO口配…...
通过小型语言模型尽可能简单地解释 Transformer
介绍 在过去的几年里,我阅读了无数关于 Transformer 网络的文章,观看了许多视频。其中大部分都非常好,但我很难理解 Transformer 架构,而其背后的主要直觉(上下文敏感嵌入)则更容易掌握。在做演讲时&#…...
GcExcel
GcExcel 简述:GcExcel Java 是一款基于 Java 平台,支持批量创建、编辑、打印、导入/导出Excel文件的服务端表格组件,能够高性能处理和高度兼容 Excel。功能特性(图1)文档查询(图2)...
封装红黑树实现map和set
" 喜欢了你十年,却用整个四月,编织了一个不爱你的谎言。 " 目录 1 源码及其框架分析 2 模拟实现map和set 2.1 实现出复用红黑树的框架 2.2 支持iterator迭代器的实现 2.2.1 代码实现和--这两个运算符 2.3 map支持[ ] Hello,大家…...