Node.js开发环境优化:修改NPM默认路径与配置国内镜像源
1. 为什么我们需要动NPM的默认安装路径如果你刚开始接触Node.js开发大概率会直接一路“下一步”安装Node.js然后兴冲冲地打开命令行敲下npm install。很快你就会发现C盘的空间在以肉眼可见的速度减少尤其是当你开始捣鼓像Vue、React这类现代前端框架或者尝试一些包含大量依赖的Node.js后端项目时。那个默认藏在C:\Users\你的用户名\AppData\Roaming\npm和C:\Users\你的用户名\AppData\Roaming\npm-cache里的家伙简直是个“磁盘空间吞噬兽”。这不仅仅是C盘空间告急的问题。更深层次的原因在于项目管理和环境隔离。默认的全局安装路径只有一个当你同时维护多个不同Node.js版本的项目时或者需要为不同项目安装特定版本的全局工具比如不同版本的vue/cli全局路径的冲突就会让你头疼不已。此外在国内网络环境下从默认的npm官方源registry.npmjs.org拉取包速度慢、不稳定甚至频繁超时失败这几乎是每个国内开发者入门时必踩的坑。错误信息诸如npm ERR! request to https://registry.npmjs.org/xxx failed或者直接卡在fetchMetadata阶段一动不动都是家常便饭。因此主动修改NPM的默认安装路径包括全局包安装路径和缓存路径并配置一个稳定高速的国内镜像源如淘宝源不是一个“可选项”而是一个提升开发效率、保障开发环境整洁的“必选项”。它能帮你解决磁盘空间焦虑、规避网络墙带来的安装失败并为后续的多版本管理打下基础。很多人直到遇到了npm : 无法加载文件 ... 因为在此系统上禁止运行脚本或者npm : 无法将“npm”项识别为 cmdlet...这类环境变量问题才意识到路径配置的重要性我们不如从一开始就把它理顺。2. 核心概念拆解prefix、cache与registry在动手之前我们得先搞清楚要修改的几个核心配置项到底是什么以及它们之间的关系。这样在出问题时你才能知道从哪里排查。2.1 全局安装前缀prefix当你执行npm install -g package-name时这个-g代表全局安装。prefix就决定了这个“全局”的具体位置。在Windows下默认的prefix是C:\Users\用户名\AppData\Roaming\npm。这个路径下会存放全局安装的可执行命令.cmd或无后缀文件以及对应的Node模块。修改prefix就等于把全局包的“家”搬到了你指定的新位置。2.2 缓存目录cacheNPM为了提高效率会将下载过的包压缩文件.tgz缓存起来。下次安装相同版本时就直接从缓存读取无需重新下载。默认的缓存路径在C:\Users\用户名\AppData\Roaming\npm-cache。这个目录会随着你安装的包越来越多而变得巨大。修改cache路径可以让你把缓存挪到空间更大的磁盘分区。2.3 包注册表地址registry这是最关键的一个配置。registry就是NPM去哪里下载包的地址。默认是https://registry.npmjs.org/。在国内访问这个地址受网络环境影响速度很慢。淘宝为我们提供了一个完整的npm镜像地址是https://registry.npmmirror.com/旧地址https://registry.npm.taobao.org已停止服务。将registry指向这个镜像下载速度会有质的飞跃。2.4 环境变量PATH这是操作系统用于查找可执行文件的路径列表。当你修改了全局安装路径prefix后必须将新路径下的可执行文件所在目录通常是新prefix\node_modules\.bin和新prefix本身添加到系统的PATH环境变量中。否则你在命令行中输入全局安装的命令如vue --version时系统会找不到它从而报错“xxx”不是内部或外部命令也不是可运行的程序。理顺了这四者的关系修改prefix和cache是为了管理本地文件和空间修改registry是为了优化网络下载而配置PATH是为了让系统能找到你新安装的全局工具。这是一个完整的闭环。3. 一步步修改NPM默认路径与环境变量这里以Windows系统为例Mac/Linux用户操作思路类似主要是路径和命令的差异。我们将把全局安装路径和缓存路径都迁移到D:\nodejs\npm-global。3.1 创建新的目标目录首先在你想要的位置创建新的目录结构。打开文件资源管理器或者直接在命令行操作mkdir D:\nodejs\npm-global mkdir D:\nodejs\npm-global\node_modules mkdir D:\nodejs\npm-global\node_cache mkdir D:\nodejs\npm-global\node_global这里我创建了三个子目录node_modules: 未来全局包的模块存放处NPM会自动管理。node_cache: 用于存放npm缓存。node_global: 用于存放全局安装的可执行命令实际上通过配置node_modules和命令会按规则存放但先创建无妨。3.2 通过NPM命令修改配置打开你的命令行工具CMD或PowerShell建议以管理员身份运行避免权限问题。依次执行以下命令修改全局安装前缀npm config set prefix D:\nodejs\npm-global这条命令将全局包的安装根目录指向我们新建的文件夹。修改缓存路径npm config set cache D:\nodejs\npm-global\node_cache这条命令将缓存目录指向我们新建的缓存文件夹。执行完成后你可以通过以下命令检查配置是否生效npm config get prefix npm config get cache如果输出的路径是你刚刚设置的说明配置成功。3.3 配置系统环境变量PATH这是至关重要的一步遗漏会导致全局命令无法使用。在Windows搜索栏输入“环境变量”选择“编辑系统环境变量”。点击下方的“环境变量(N)...”。在“系统变量”区域如果只想对当前用户生效则在“用户变量”区域找到并选中Path变量点击“编辑”。点击“新建”然后添加你刚刚设置的全局前缀路径D:\nodejs\npm-global。重要还需要添加D:\nodejs\npm-global\node_modules\.bin这个路径吗在现代NPM版本中通常只需要添加prefix路径即D:\nodejs\npm-global即可。因为NPM会在安装全局包时将可执行文件链接或放置到该目录下。但为了兼容性有些教程会建议也添加.bin目录。我的建议是先只添加prefix路径如果后续发现全局命令找不到再尝试添加.bin路径。逐一点击“确定”关闭所有窗口。3.4 验证路径修改结果关闭所有已打开的命令行窗口然后重新打开一个新的命令行这一步必须做否则新的环境变量不生效。验证PATH是否包含新路径echo %PATH%在输出的长长一串路径中查找是否包含D:\nodejs\npm-global。安装一个全局包进行测试npm install -g yarn观察安装过程它应该会将yarn安装到D:\nodejs\npm-global\node_modules下。验证安装位置和命令where yarn这个命令会显示yarn命令所在的位置它应该指向D:\nodejs\npm-global目录下的某个文件可能是yarn.cmd或yarn。yarn --version如果能正确输出版本号说明全局包安装和环境变量配置完全成功。注意如果你遇到了npm : 无法加载文件 ... 因为在此系统上禁止运行脚本这个错误这不是路径问题而是PowerShell的执行策略限制。解决方法是在管理员身份的PowerShell中执行Set-ExecutionPolicy RemoteSigned然后选择Y。这是一个独立的安全策略问题与NPM路径配置无关。4. 配置国内镜像源告别npm install卡住路径问题解决后我们来攻克网络问题。将NPM源切换到国内镜像是提升安装速度最有效的方法。4.1 直接设置淘宝镜像源目前淘宝NPM镜像的官方地址是https://registry.npmmirror.com/。旧地址https://registry.npm.taobao.org已废弃如果还在使用可能会遇到证书错误npm ERR! request to https://registry.npm.taobao.org/... failed, reason: certificate...。设置命令非常简单npm config set registry https://registry.npmmirror.com/设置完成后可以通过以下命令检查npm config get registry如果返回https://registry.npmmirror.com/说明设置成功。4.2 使用nrm工具管理多个源进阶如果你需要经常在官方源、淘宝源、公司私有源等之间切换使用nrm(npm registry manager) 工具会更加方便。首先全局安装nrm注意此时npm源可能还是慢的但nrm包很小npm install -g nrm安装后你可以使用以下命令nrm ls列出所有可用的源带*的是当前使用的源。nrm use taobao切换到淘宝源。nrm use npm切换回官方源。nrm test测试各个源的响应速度。nrm的本质是帮你修改registry配置但它提供了更直观的列表和测速功能。4.3 针对单个项目或特定包设置源有时你可能只想为当前项目使用淘宝源或者某个特定的包需要从其他源安装。为当前项目设置在项目根目录下创建或编辑.npmrc文件内容为registryhttps://registry.npmmirror.com/。该配置优先级高于全局配置。为特定包设置镜像如果某个包在默认源下载有问题可以单独为其设置镜像。这通常通过配置scope:registry或使用像cnpm这样的客户端来实现但更通用的做法是在.npmrc里添加配置例如对于electron包electron_mirrorhttps://npmmirror.com/mirrors/electron/很多常见的、二进制包较大的项目如node-sass, puppeteer, electron都有对应的国内镜像环境变量可以配置。5. cnpm一个可选的镜像客户端解决方案除了修改npm源淘宝还提供了一个名为cnpm的命令行工具。它不是一个单纯的源切换而是一个定制的客户端。5.1 安装cnpm在配置好任意npm源后哪怕还是官方源慢一点而已执行npm install -g cnpm --registryhttps://registry.npmmirror.com这条命令的意思是从淘宝源安装cnpm包。安装后你就有cnpm这个命令可用了。5.2 cnpm与npm命令的对比cnpm的用法和npm几乎完全一致只是把npm换成cnpmnpm install-cnpm installnpm install package-cnpm install packagenpm run dev- 这个不需要变run脚本是项目本地的5.3 cnpm的优缺点与选择建议优点无感切换安装后使用cnpm install默认就走淘宝源无需修改全局npm配置。对于需要在不同源之间切换的场景可以保持npm的registry不变比如仍是公司私有源仅对特定项目使用cnpm。并行下载早期cnpm在下载时会进行更多的并行优化速度可能比单纯换源的npm更快不过现在npm自身也在不断优化。缺点/注意事项潜在的依赖树差异cnpm的安装逻辑和npm并非100%相同在极端情况下可能导致node_modules依赖树结构存在细微差异。虽然99%的项目没问题但如果你遇到一些诡异的、依赖关系导致的bug可以尝试换回npm install试试。多一个工具需要团队成员都安装或者需要在文档中说明。符号链接问题在某些系统上cnpm可能会使用符号链接来组织node_modules这与npm的扁平化或嵌套结构可能不同有时会引起IDE或构建工具识别路径的问题。我的个人建议是对于大多数个人开发者和团队优先使用npm 淘宝源的方案。它更标准问题更少生态工具支持最好比如一些IDE的集成。将cnpm作为一个备选方案当npm安装遇到网络顽固问题时可以用cnpm install来“救急”安装完依赖后后续的npm run等操作照常进行。没有必要完全用cnpm替代npm。6. 疑难杂症与深度排错指南即使按照步骤操作你也可能会遇到一些问题。这里汇总一些常见错误和解决方案。6.1 命令找不到或“不是内部命令”症状配置新路径后安装全局包成功但执行命令时提示xxx 不是内部或外部命令...。排查确认环境变量PATH中是否包含了你的新prefix路径D:\nodejs\npm-global。重启命令行这是最容易被忽略的一点。修改环境变量后必须关闭所有现有的命令行窗口重新打开一个新的新的环境变量才会生效。检查全局包是否真的安装到了新路径。去D:\nodejs\npm-global\node_modules下看看有没有对应的包文件夹去D:\nodejs\npm-global下看看有没有对应的.cmd或可执行文件。如果上述都正确可以尝试将D:\nodejs\npm-global\node_modules\.bin也加入PATH变量。6.2 安装权限错误EACCES, EPERM症状在安装全局包时出现Error: EACCES: permission denied类似的错误。原因在Unix-like系统Mac, Linux或Windows某些目录下没有写入权限。解决Windows确保你的命令行是以管理员身份运行的。检查目标文件夹D:\nodejs\npm-global及其子目录的权限确保你的用户有“完全控制”权。解决Mac/Linux不推荐使用sudo npm install -g这会导致包的文件所有者变成root未来可能引发更多权限问题。推荐使用npm config set prefix ~/.npm-global将路径设置到用户主目录下并按照前面所述将~/.npm-global/bin添加到PATH环境变量通常是~/.bashrc或~/.zshrc文件中的export PATH$PATH:~/.npm-global/bin。6.3 npm脚本执行策略错误PowerShell专属症状在PowerShell中运行任何npm全局命令如npm -v或vue --version报错npm : 无法加载文件 ...\npm.ps1因为在此系统上禁止运行脚本...。原因PowerShell默认的执行策略Execution Policy是Restricted禁止运行任何脚本。解决以管理员身份打开PowerShell。运行Get-ExecutionPolicy查看当前策略。运行Set-ExecutionPolicy RemoteSigned然后输入Y确认。这个策略允许运行本地创建的脚本和来自互联网的已签名脚本。关闭管理员PowerShell重新打开普通PowerShell即可。6.4 镜像源证书错误或失效症状使用旧版淘宝源地址时出现npm ERR! request to https://registry.npm.taobao.org/... failed, reason: certificate...或npm ERR! code CERT_HAS_EXPIRED。解决立即将源更新为最新的官方地址https://registry.npmmirror.com/。npm config set registry https://registry.npmmirror.com/如果问题依旧可以尝试清除npm缓存后重试npm cache clean --force6.5 安装过程卡住不动症状npm install长时间停留在fetchMetadata、idealTree或某个包的下载进度条。排查首先检查网络和源确保已正确切换到淘宝源 (npm config get registry)。增加超时时间和日志可以尝试用以下命令安装获取更多信息npm install --verbose --fetch-retries5 --fetch-retry-mintimeout1000 --fetch-retry-maxtimeout60000删除node_modules和package-lock.json有时候是本地缓存或锁文件导致的依赖解析死锁。rm -rf node_modules package-lock.json npm cache clean --force npm install使用cnpm救急如果怀疑是网络问题直接用cnpm install尝试。检查代理如果你使用了网络代理确保npm的代理配置正确或暂时关闭。检查命令npm config get proxy npm config get https-proxy如果需要清除代理npm config delete proxy和npm config delete https-proxy。7. 将配置固化与团队协作建议个人环境配好了如何保证团队新成员也能快速上手避免每个人重复踩坑7.1 创建项目级的.npmrc文件在项目根目录下创建.npmrc文件可以固化一些配置优先级高于用户全局配置。这对于统一团队环境非常有用。一个常见的.npmrc文件内容registryhttps://registry.npmmirror.com/ sass_binary_sitehttps://npmmirror.com/mirrors/node-sass/ electron_mirrorhttps://npmmirror.com/mirrors/electron/ phantomjs_cdnurlhttps://npmmirror.com/mirrors/phantomjs/ chromedriver_cdnurlhttps://npmmirror.com/mirrors/chromedriver/这样任何克隆该项目的人只要运行npm install就会自动使用淘宝源并且一些常见的、需要下载二进制文件的包也会从国内镜像下载极大提升初始化速度。7.2 编写团队入门文档README/Onboarding Guide在项目的README或专门的内部文档中加入“环境准备”章节清晰地列出步骤安装Node.js指定推荐版本如18.x LTS并提供官方下载链接。配置NPM全局路径与缓存可选但推荐给出具体的命令如本章节所述并说明为什么这么做。设置淘宝镜像源给出设置命令。安装项目依赖npm install或yarn。常见问题附上本章“疑难杂症”中的经典错误解决方案链接或简述。7.3 考虑使用版本管理工具nvm-windows/nvm对于需要切换不同Node.js版本的项目强烈推荐使用Node版本管理工具。Windows使用nvm-windows(https://github.com/coreybutler/nvm-windows)。Mac/Linux使用nvm(https://github.com/nvm-sh/nvm)。使用nvm后每个Node.js版本会有独立的npm和全局包空间天然隔离无需再手动修改prefix。你只需要为每个版本单独配置一次镜像源即可。这是更专业、更彻底的解决方案。整个配置过程从修改路径到切换源再到疑难排错其核心思想是“理解工具掌控环境”。它不是一堆需要死记硬背的命令而是一套管理开发工作流的基础方法。把这些配好之后无论是学习Vue、React还是搭建Node.js后端服务你都会发现环境问题再也无法阻挡你你可以更专注于代码和逻辑本身。

相关新闻

块存储、文件存储与对象存储:核心原理、场景选择与实战避坑指南

块存储、文件存储与对象存储:核心原理、场景选择与实战避坑指南

1. 存储江湖三剑客:从“存什么”到“怎么存”如果你是一名后端开发者,或者正在搭建自己的应用,那么“存储”这个词对你来说一定不陌生。但当你面对“块存储”、“文件存储”、“对象存储”这三个选项时,是不是感觉有点懵&#xff…

2026/10/15 16:55:05 阅读更多 →
网络基础:IP地址、子网掩码、网关与DNS详解

网络基础:IP地址、子网掩码、网关与DNS详解

1. 网络基础概念解析:IP地址、子网掩码、网关与DNS 刚接触网络配置时,这四个名词就像天书一样让人头疼。记得我第一次给服务器配静态IP时,把网关填成了DNS地址,结果整个部门断网半小时。今天我们就用最直白的方式,把这…

2026/10/15 7:48:10 阅读更多 →
网络空间安全考研择校指南:从院校梯队到备考策略

网络空间安全考研择校指南:从院校梯队到备考策略

1. 网络空间安全考研:从“热门”到“合适”的深度抉择 又到了一年考研季,后台和私信里关于“网络空间安全考研选什么学校”的咨询又多了起来。看着大家发来的问题,从“哪个学校最好考”到“XX大学和XX大学哪个更强”,我能深切感受…

2026/10/12 18:43:26 阅读更多 →

最新新闻

基于S7-200 PLC的智能照明控制系统设计与调试全解析

基于S7-200 PLC的智能照明控制系统设计与调试全解析

做自动化这些年,用PLC点亮一盏灯大概是门槛最低、见效最快的入门项目。但别小看一套基于西门子S7-200 PLC的智能照明控制系统——从电路图、IO分配表、源程序到单机调试,每一步都藏着不少坑。这篇文章就围绕一套已经在厂区跑起来的照明控制系统&#xff…

2026/10/15 23:15:37 阅读更多 →
从零构建轻量级命令行工具rea:架构设计与性能优化实战

从零构建轻量级命令行工具rea:架构设计与性能优化实战

1. 从“rea”这个标题说起:一个极简命名背后的完整项目思维第一次看到“rea”这个标题的时候,我脑子里蹦出来的第一反应是——这大概率又是一个被随手命名的内部项目。做技术的人都有这个毛病,项目文件夹建得太快,名字起得随意&am…

2026/10/15 23:15:37 阅读更多 →
TensorFlow核心机制与工程实战:从张量、计算图到模型部署

TensorFlow核心机制与工程实战:从张量、计算图到模型部署

1. TensorFlow到底是什么,为什么值得花时间搞懂它先说结论:TensorFlow不是某个“库文件”那么简单,它是一整套用于数值计算和机器学习模型落地的生态体系。很多人第一次接触它,是在教材里看到一行import tensorflow as tf&#xf…

2026/10/15 23:15:37 阅读更多 →
西门子S7-200 PLC智能照明控制系统设计与调试实战

西门子S7-200 PLC智能照明控制系统设计与调试实战

接手这个项目的时候,我手头正好有一套老掉牙的 S7-200 CPU226,还有一堆拆机件。把“西门子S7-200 PLC”和“智能照明”放一起,很多人第一反应是杀鸡用牛刀——楼道灯用个声光控开关不就行了?但如果控制对象是一栋多层办公楼、一个…

2026/10/15 23:15:37 阅读更多 →
context-mode:用目录感知终端环境,自动切换项目配置

context-mode:用目录感知终端环境,自动切换项目配置

如果你也像我一样,终端永远同时挂着好几个项目——上午在 Java 的老项目里改接口,下午切到 Node 的前端仓库调样式,晚上还要去 Python 的训练脚本里调参——那你大概率也经历过这种尴尬:刚在 A 项目export了一堆环境变量&#xff…

2026/10/15 23:15:36 阅读更多 →
Multisim仿真方波三角波正弦波发生器:从原理到避坑指南

Multisim仿真方波三角波正弦波发生器:从原理到避坑指南

简介:这份文档面向电子信息、通信工程等专业的课程设计学习者,围绕Multisim仿真环境下的方波、三角波与正弦波发生器展开,帮助读者掌握集成运算放大器与晶体管差分放大器的实际应用。内容从设计目的、设计要求到设计原理逐层展开,…

2026/10/15 23:14:35 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →