Node.js与npm安装配置全攻略:从环境变量到镜像源优化
1. 项目概述为什么Node.js和npm的安装配置如此重要如果你刚接触前端开发、后端JavaScript或者任何现代JavaScript生态的工具那么“Node.js安装及npm配置”就是你绕不开的第一步。这听起来像是一个基础到不能再基础的操作但恰恰是这一步卡住了无数新手也埋下了许多老手日后“玄学报错”的祸根。我见过太多人包括我自己早期都是随便下载一个安装包一路“下一步”然后兴冲冲地打开命令行输入npm install结果迎面而来的就是一堆“不是内部或外部命令”、“无法加载脚本文件”之类的红色错误。那一刻的挫败感足以让学习热情熄灭一半。所以这篇内容的目的不是简单地告诉你“点这里点那里”。我会从一个有多年踩坑经验的开发者角度带你彻底理解Node.js和npm到底是什么它们在你的系统里是如何运作的以及如何通过一次正确、清晰的安装和配置为你后续所有JavaScript项目搭建一个稳定、高效且“听话”的基础环境。我们会覆盖Windows、macOS和Linux三大主流平台深入环境变量、权限策略、镜像源配置等核心细节并附上我处理过上百次的常见报错解决方案。相信我花半小时把地基打牢未来能省下无数个排查环境的下午。2. 核心概念解析Node.js与npm的关系在动手之前我们必须先搞清楚我们在安装什么。很多人会把Node.js和npm混为一谈其实它们是两个独立但又紧密关联的东西。Node.js本质上是一个JavaScript的运行时环境。你可以把它理解为一个“翻译官”“执行器”。在Node.js出现之前JavaScript只能被浏览器里的“引擎”比如Chrome的V8解释执行。Node.js把Chrome的V8引擎拿了出来做成了独立软件让JavaScript从此可以脱离浏览器在你的电脑上直接运行。这意味着你可以用JavaScript来写服务器程序后端、命令行工具、桌面应用等等。我们安装Node.js主要就是为了获得这个强大的JavaScript运行能力。npm则是Node.js的“官方钦定”包管理器。它的全称是 Node Package Manager。想象一下你要盖房子开发项目不可能从烧砖、炼铁开始。npm就是一个巨大的、全球共享的“建材超市”。里面存放了数百万个由其他开发者封装好的功能模块我们称之为“包”或“package”比如处理时间的moment、发送网络请求的axios、构建工具的webpack等等。npm这个工具的作用就是让你能非常方便地从超市npm仓库里查找、下载、安装、更新和卸载这些“建材”并管理它们之间的依赖关系。关键点当你从官网安装Node.js时安装程序会自动捆绑安装对应版本的npm。所以通常我们说的“安装Node.js”实际上是把运行时Node.js和包管理器npm这一套组合拳都装上了。这也是为什么安装后你既能在命令行用node -v也能用npm -v查看版本。2.1 版本选择背后的考量LTS vs Current访问Node.js官网你会看到两个主要的下载选项LTS和Current。这可不是随便选选的。LTS长期支持版。这是为生产环境准备的版本。它意味着更长的支持周期通常是30个月、更严格的稳定性要求、以及只接收关键的错误修复和安全更新。对于企业项目、需要长期维护的系统或者你只是想有一个稳定环境来学习无脑选择LTS版本。这是最稳妥、最推荐的选择。Current当前最新版。这里包含了所有最新的JavaScript特性、性能改进和API更新。它更激进迭代更快每6个月一个大版本但可能包含未完全稳定的特性。适合喜欢尝鲜、希望使用最新语言特性的开发者或者为下一个LTS版本做前期技术调研。我的建议除非你有明确的理由需要使用某个Current版本独有的特性否则永远优先选择LTS版本。稳定压倒一切。很多第三方库的兼容性也是优先保证LTS版本。3. 跨平台安装实操详解不同操作系统的安装方式和注意事项差异很大我们分开来讲。3.1 Windows系统安装避开权限与路径的坑Windows是问题最多的平台主要因为其用户权限管理和命令行环境的复杂性。步骤一下载与运行安装程序前往Node.js官网下载Windows Installer (.msi) 的LTS版本。右键点击下载好的msi文件选择“以管理员身份运行”。这一步非常重要可以避免因权限不足导致安装或环境变量设置失败。安装向导启动后直接点击“Next”。步骤二接受协议与选择安装路径勾选接受许可协议点击“Next”。选择安装路径。这里有个关键决策默认路径是C:\Program Files\nodejs\。我强烈建议不要修改就使用默认路径。原因有三第一这是Windows软件的标准安装位置符合系统规范第二路径中不要包含中文或空格可以避免无数潜在的编码和解析问题第三所有教程和问题排查都基于这个默认路径你改了会增加不必要的麻烦。步骤三自定义安装选项关键点击“Next”后会进入“Custom Setup”页面。这里你需要关注一个选项Automatically install the necessary tools...这个复选框不要勾选它会尝试安装Chocolatey、Python、Visual Studio Build Tools等一堆编译工具过程漫长且容易出错。这些工具我们通常在需要编译原生模块比如node-sass时才手动安装而且有更可控的安装方式。步骤四环境变量配置安装程序自动完成继续“Next”你会看到安装程序将执行两项操作Node.js runtime安装核心运行时。npm package manager安装npm。Add to PATH自动将Node.js和npm的安装目录添加到系统的PATH环境变量中。这是整个安装过程最核心的一步。PATH的作用是告诉系统当你在命令行输入node或npm时应该去哪个目录找这些可执行文件。安装程序帮你做了省去了手动配置的麻烦。点击“Next”开始安装完成后点击“Finish”。验证安装按下Win R输入cmd或powershell打开命令行窗口。分别输入以下命令并回车node -v npm -v如果正确显示出版本号例如v18.20.0和10.7.0恭喜你安装成功。注意在Windows PowerShell中执行npm脚本可能会遇到执行策略限制的报错。这与安装无关是PowerShell的安全策略。我们会在后续的“问题排查”章节专门解决。3.2 macOS系统安装推荐使用HomebrewmacOS上有两种主流安装方式官网pkg安装包和通过Homebrew安装。我强烈推荐使用Homebrew它是macOS上事实上的包管理器能让你未来管理所有开发工具如Git, Python, Redis等变得极其简单和统一。前提确保你已经安装了Homebrew。如果没安装打开终端执行以下命令/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)使用Homebrew安装Node.js打开终端。执行以下命令brew install nodeHomebrew会自动下载、编译或下载二进制包并安装Node.js及其捆绑的npm同时自动配置好环境变量。验证安装 同样在终端里执行node -v和npm -v查看版本。Homebrew的优势一键更新未来升级Node.js只需brew upgrade node。多版本管理如果需要可以轻松配合n或nvm工具管理多个Node.js版本。路径统一所有通过Homebrew安装的软件都在/usr/local/bin或/opt/homebrew/bin下管理清晰。3.3 Linux系统安装使用NodeSource仓库Linux发行版众多这里以最流行的Ubuntu为例。不推荐直接使用系统自带的apt install nodejs因为官方仓库的版本通常非常老旧。推荐使用NodeSource维护的仓库它能提供最新的LTS版本。更新系统包索引sudo apt update安装必要的依赖sudo apt install -y curl添加NodeSource仓库以Node.js 18.x LTS为例curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -提示你可以访问NodeSource的GitHub页面将上述命令中的18.x替换为任何你需要的LTS主版本号如20.x。安装Node.jssudo apt install -y nodejs这个命令会同时安装Node.js和npm。验证安装node -v npm -v对于其他Linux发行版如CentOS, FedoraNodeSource也提供了对应的仓库安装脚本具体命令请查阅其官方文档。4. npm的深度配置与优化安装成功只是第一步对npm进行符合国情的配置才能让你的开发效率飞起。4.1 配置国内镜像源解决下载慢和超时问题默认的npm仓库服务器在国外国内直接访问速度慢且不稳定经常导致npm install失败或等待时间极长。将源切换到国内镜像站是必做操作。查看当前源npm config get registry切换为淘宝镜像源国内最常用的npm config set registry https://registry.npmmirror.com/淘宝镜像旧地址registry.npm.taobao.org已弃用请使用新地址npmmirror.com其他可选国内源腾讯云https://mirrors.cloud.tencent.com/npm/华为云https://mirrors.huaweicloud.com/repository/npm/切换回官方源如果需要npm config set registry https://registry.npmjs.org/实操心得我习惯在安装完Node.js后第一件事就是换源。对于公司内网环境有时还会搭建私有的npm镜像如使用Verdaccionpm config set registry命令同样可以指向内网地址实现更快的依赖安装。4.2 全局安装路径与权限配置通过npm install -g package-name安装的包被称为“全局包”通常是命令行工具比如vue-cli,create-react-app,nodemon等。问题在Unix系统macOS, Linux或Windows上非管理员安装时可能会因权限不足导致安装失败EACCES错误。解决方案更改npm的全局安装目录到一个你有完全读写权限的路径。创建新的全局目录以macOS/Linux为例mkdir ~/.npm-global配置npm使用新路径npm config set prefix ~/.npm-global将新目录加入系统PATHmacOS/Linux编辑你的shell配置文件如~/.zshrc或~/.bashrc添加一行export PATH~/.npm-global/bin:$PATH然后执行source ~/.zshrc使配置生效。Windows在“系统属性” - “环境变量”中修改用户变量的PATH添加%USERPROFILE%\AppData\Roaming\npm这是npm默认的全局路径如果改了prefix就添加你自定义的路径。验证配置完成后重新打开终端尝试安装一个全局包如npm install -g nodemon应该能成功安装且可以直接在命令行使用nodemon命令。4.3 npm基础命令与工作流配置好环境后我们来熟悉一下最核心的npm命令它们构成了日常开发的工作流。初始化项目npm init或npm init -y-y选项跳过问答直接使用默认配置生成package.json文件。这个文件是项目的“身份证”和“清单”记录了项目信息、依赖包等。安装依赖npm install package-name安装包到当前项目的node_modules文件夹并添加到package.json的dependencies。npm install package-name --save-dev安装包到node_modules并添加到devDependencies仅开发阶段需要的工具如测试框架、构建工具。npm install根据当前目录下的package.json文件安装所有列出的依赖。这是克隆一个新项目后要做的第一件事。更新与卸载npm update package-name更新指定包。npm uninstall package-name卸载指定包。运行脚本在package.json的scripts字段里定义自定义命令例如start: node app.js然后通过npm run start或简写npm start来执行。5. 高频问题排查与解决方案实录即使按照步骤安装也难免会遇到问题。这里记录了我遇到和解答过最多的几个“坑”。5.1 “npm不是内部或外部命令”或“command not found: npm”现象安装完成后在命令行输入npm -v提示找不到命令。原因Node.js的安装路径没有成功添加到系统的PATH环境变量中。解决方案Windows确认Node.js安装路径默认是C:\Program Files\nodejs\。右键“此电脑” - “属性” - “高级系统设置” - “环境变量”。在“系统变量”或“用户变量”中找到Path变量双击编辑。检查列表中是否包含C:\Program Files\nodejs\。如果没有点击“新建”添加它。重要添加后必须关闭所有已打开的命令行窗口CMD、PowerShell、VSCode终端等并重新打开新的PATH环境变量才会生效。macOS/Linux如果使用Homebrew安装通常会自动配置。可以检查echo $PATH是否包含/usr/local/bin。如果手动安装需要确保将Node.js的bin目录如/usr/local/nodejs/bin添加到你的shell配置文件的PATH中。5.2 PowerShell中执行策略错误现象在Windows PowerShell中运行npm install或任何以npm run开头的脚本时出现红色错误npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1因为在此系统上禁止运行脚本...原因PowerShell默认的执行策略Execution Policy是Restricted禁止运行任何脚本包括npm的PowerShell脚本。解决方案三种推荐第一种以管理员身份运行PowerShell执行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser这条命令将当前用户的执行策略设置为RemoteSigned允许运行本地脚本和来自互联网的已签名脚本。输入Y确认。这是最常用且相对安全的方案。使用CMD如果你不想改动PowerShell策略可以直接使用命令提示符CMD来执行npm命令CMD不受此策略影响。修改VSCode默认终端在VSCode中按CtrlShiftP输入“终端: 选择默认配置文件”然后选择“Command Prompt”。这样VSCode内置终端就会默认使用CMD。5.3 npm install 报错网络、权限、依赖冲突现象npm install过程中失败错误信息五花八门。通用排查思路检查网络和镜像源首先npm config get registry确认是否已切换到国内镜像。可以尝试ping registry.npmmirror.com测试连通性。清理npm缓存有时缓存损坏会导致安装失败。npm cache clean --force然后重试npm install。删除node_modules和lock文件依赖树混乱是常见问题。rm -rf node_modules package-lock.json # 或Windows命令提示符下rd /s /q node_modules del package-lock.json然后重新执行npm install。package-lock.json会重新生成它能锁定确切的依赖版本保证团队协作和环境一致性。检查权限在Unix系统或Windows非管理员运行时如果遇到EACCES权限错误请回顾4.2章节配置自定义的全局安装路径。查看详细日志在npm install命令后添加--verbose参数可以输出极其详细的安装日志帮助定位问题点。5.4 如何彻底卸载与重装当环境混乱到无法修复时彻底重装是最终手段。Windows从“控制面板” - “程序和功能”中卸载Node.js。手动删除残留目录如果存在C:\Program Files\nodejs\C:\Users\你的用户名\AppData\Roaming\npmC:\Users\你的用户名\AppData\Roaming\npm-cache检查系统环境变量Path删除与Node.js/npm相关的条目。重启电脑然后重新安装。macOS (Homebrew)brew uninstall node # 如果需要彻底清理可以运行 brew cleanup # 然后重新安装 brew install nodemacOS/Linux (手动安装)使用安装时的卸载脚本如果有。手动删除安装目录如/usr/local/node。从shell配置文件.bashrc,.zshrc等中删除Node.js相关的PATH配置。删除用户目录下的npm相关文件夹~/.npm,~/.npm-global等。6. 进阶配置与工具推荐基础环境搭好后这里有一些能极大提升你开发体验的进阶配置和工具。6.1 使用nvm管理多版本Node.js你可能会同时维护多个项目它们可能要求不同版本的Node.js。直接在系统上安装和切换版本非常麻烦。nvm或n就是解决这个问题的神器。这里以nvm为例。安装nvmmacOS/Linux通过curl或wget脚本安装具体命令请查阅nvm的GitHub仓库。Windows请使用nvm-windows项目这是一个独立的移植版本。从它的GitHub发布页面下载安装程序。常用命令nvm list available # 查看所有可安装的远程版本 nvm install 18.20.0 # 安装指定版本的Node.js nvm use 18.20.0 # 在当前终端切换到指定版本 nvm alias default 18.20.0 # 设置默认版本新打开的终端将自动使用此版本使用nvm后每个版本的Node.js和其附带的npm都是完全隔离的你可以轻松地在不同项目间切换运行环境。6.2 优化npm安装体验设置默认行为让npm install默认保存依赖信息到package.json。npm config set savetrue npm config set save-exacttrue # 保存精确版本号而不是语义化版本范围有利于环境一致使用npm-check-updates这是一个全局工具可以检查并更新package.json中所有依赖到最新版本。npm install -g npm-check-updates ncu # 检查更新 ncu -u # 升级package.json文件中的版本描述 npm install # 安装新版本6.3 集成到编辑器VSCode如果你使用Visual Studio Code安装Node.js后可以安装一些必备插件来提升效率ESLint代码质量检查。Prettier代码自动格式化。npm Intellisense在package.json中自动补全npm包名。Auto Rename Tag自动重命名配对的HTML/XML标签。在VSCode的集成终端里你可以直接运行所有Node.js和npm命令无需再切换窗口。环境配置从来不是一劳永逸的事情随着Node.js和npm的版本更新以及你项目复杂度的增加可能还会遇到新的挑战。但只要你理解了上述的核心原理——环境变量、包管理、权限和镜像源你就具备了解决大部分环境问题的能力。记住遇到报错不要慌仔细阅读错误信息它通常已经给出了线索再结合搜索引擎和官方文档绝大多数问题都能迎刃而解。一个好的开发环境是高效编码的开始。

相关新闻

一个传感器,决定你手表是“玩具”还是“医疗级”?

一个传感器,决定你手表是“玩具”还是“医疗级”?

不少智能手表或手环用户可能遇到过这样的情形:静坐时心率读数在120和80之间来回跳动,运动时数值更是飘忽不定。摘要本文从工程实践角度分析智能手表PPG(光电容积描记法)心率传感器的信号采集原理与常见工程问题。以LC09A、VC32S、…

2026/10/16 13:03:40 阅读更多 →
手机里藏着一双“隐形眼睛”:既看得见光,也感觉得到距离

手机里藏着一双“隐形眼睛”:既看得见光,也感觉得到距离

现象背后不是“猜”,是一颗双功能传感器你拿起手机接电话,屏幕贴近耳朵瞬间熄灭;移开,屏幕重新点亮。夜晚屏幕自动变暗,阳光下迅速拉高亮度。这些体验过于自然,以至于很少有人去想:手机到底靠什…

2026/10/14 8:15:45 阅读更多 →
7.3.2.5 竞争性随机接入和非竞争性随机接入

7.3.2.5 竞争性随机接入和非竞争性随机接入

课程视频前面几个小节,我们围绕随机接入信道PRACH本身——它的时域、频域、码域特性,以及小区规划中的具体考量——进行了系统而深入的讨论。本节我们将视角从“信道本身的属性”转向“随机接入这一完整过程”,来回答一个更贴近实际业务的问题…

2026/10/11 21:38:05 阅读更多 →

最新新闻

Spring事务完整解析:@Transactional失效场景与排查技巧

Spring事务完整解析:@Transactional失效场景与排查技巧

做Java后端开发的,Spring事务可以说是绕不开的一道坎。平时加个Transactional注解好像很轻松,但真到了线上出问题,事务不生效、回滚没触发、死锁频繁,这些坑能让你排查到怀疑人生。我自己就踩过大坑:某转账服务里一个方…

2026/10/16 13:04:03 阅读更多 →
Spring事务从注解到原理:传播行为、隔离级别与事务失效的完整剖析

Spring事务从注解到原理:传播行为、隔离级别与事务失效的完整剖析

Spring事务(Transaction)这个话题,看起来谁都会用,但真正出了生产事故能把责任分清楚的人,永远是那些把原理吃透的人。我在一线写了快十年的业务系统,见过太多线上数据错乱、订单状态对不上、用户被重复扣款…

2026/10/16 13:04:03 阅读更多 →
AI课堂分析架构:多模态数据与CEED标准如何让教学评价可计算

AI课堂分析架构:多模态数据与CEED标准如何让教学评价可计算

简介:这份资源是华东师范大学课程与教学研究所杨晓哲副教授撰写的学术论文《基于人工智能的课堂分析架构:一种智能的课堂教学研究》,面向教育研究者、教研员、中小学教师及教育技术方向的学习者,聚焦大规模课堂分析难以落地、传统…

2026/10/16 13:04:03 阅读更多 →
DeepSeek V3 + AnythingLLM 本地知识库搭建实战与避坑指南

DeepSeek V3 + AnythingLLM 本地知识库搭建实战与避坑指南

简介:这份PDF教程面向希望搭建个人知识库的知识管理爱好者与效率工具用户,以DeepSeek V3为核心,讲解从零构建本地化知识库的完整流程。内容涵盖注册DeepSeek账号并获取API密钥、安装AnythingLLM客户端、配置AI提供商与模型选择、创建工作区、…

2026/10/16 13:04:03 阅读更多 →
机器视觉工业缺陷检测全流程指南:光源、相机与经典算法解析

机器视觉工业缺陷检测全流程指南:光源、相机与经典算法解析

简介:机器视觉工业缺陷检测是智能制造中质量控制的关键环节,涵盖硬件选型、图像处理算法与算法库应用等多个层面。这份PDF文档系统梳理了相关知识点:光源方面,介绍了LED、萤光灯、卤素灯等常见类型及背向、前向、结构光、频闪光等…

2026/10/16 13:04:03 阅读更多 →
FlexPipe:LLM推理流水线在碎片化GPU集群中的动态换挡实践

FlexPipe:LLM推理流水线在碎片化GPU集群中的动态换挡实践

跑过LLM推理服务的人大概都见过这个场景:一张A100上排了几百个请求,旁边一张3090的利用率却只有个位数,流水线里某个前置stage像血栓一样把整条链路卡死。GPU集群从来不是机房规划图上的整齐划一,而是日积月累拼出来的“百家被”—…

2026/10/16 13:02:59 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战: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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →