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

[具身智能-603]:Node.js详解以及对应的包管理器(npm)

Node.js 是一个基于 Chrome V8 引擎的JavaScript 运行时环境,它让 JavaScript 能够脱离浏览器,在服务端运行。而 npm (Node Package Manager) 是随 Node.js 一起安装的官方包管理器,是全球最大的 JavaScript 软件生态系统和注册表。

下面将从核心原理、模块系统和包管理器三个方面为你详细解读。

🚀 Node.js 核心原理

Node.js 的核心设计理念是事件驱动非阻塞 I/O,这使得它特别擅长处理高并发、I/O 密集型的应用,如实时聊天、API 网关等。

单线程与事件循环 (Event Loop)

Node.js 采用单线程主线程模型,但这并不意味着它不能处理并发任务。其高性能的秘密武器就是事件循环

  • 主线程:负责执行 JavaScript 代码。
  • libuv 库:一个用 C 语言编写的跨平台库,它提供了一个线程池来处理耗时的操作(如文件读写、网络请求、DNS 查询等)。

当主线程遇到一个耗时的 I/O 操作时,它不会傻等,而是将这个任务交给 libuv 的线程池去处理,然后主线程继续执行后面的代码。当 libuv 完成 I/O 任务后,会将对应的回调函数放入一个队列中。事件循环会不断地检查这个队列,一旦主线程空闲下来,就取出队列中的回调函数来执行。

这个机制让 Node.js 能够用很少的系统资源处理成千上万的并发连接。

模块系统

Node.js 支持两种模块规范,用于组织和管理代码。

  1. CommonJS (Node.js 原生规范)

    • 导出:使用module.exportsexports
    • 导入:使用require()函数,这是一个同步加载的过程。
    • 示例:javascript
      1// utils.js (导出) 2const sum = (a, b) => a + b; 3module.exports = { sum }; 4 5// main.js (导入) 6const { sum } = require('./utils.js');
  2. ECMAScript Modules (ESM, 现代标准)

    • 导出:使用export
    • 导入:使用import
    • 示例:javascript
      1// utils.js (导出) 2export const sum = (a, b) => a + b; 3 4// main.js (导入) 5import { sum } from './utils.js';

📦 包管理器 npm 详解

npm 是 Node.js 开发中不可或缺的工具,它管理着项目的依赖、脚本和配置。

核心文件
  • package.json:项目的“说明书”或“身份证”。它记录了项目的元数据(名称、版本、作者等)、依赖列表(dependencies) 和脚本命令(scripts)。
  • package-lock.json:依赖锁定文件。它记录了项目中所有依赖包(包括依赖的依赖)的确切版本和下载地址,确保在任何环境下安装依赖的结果都完全一致。
  • node_modules:存放所有已安装包代码的文件夹。注意:这个文件夹体积庞大,不应提交到 Git 仓库,通常会在.gitignore文件中将其忽略。
常用命令速查
功能命令说明
初始化项目npm init -y快速生成一个默认的package.json文件。
安装依赖npm install <包名>安装包,并记录到dependencies
安装开发依赖npm install <包名> -D安装包,并记录到devDependencies(如测试、构建工具)。
全局安装npm install <包名> -g将包安装到全局,使其可在命令行任何位置使用。
运行脚本npm run <脚本名>执行package.jsonscripts字段定义的命令。
卸载依赖npm uninstall <包名>卸载包,并从package.json中移除记录。
依赖类型

package.json中,依赖通常分为两类:

  • dependencies:项目在生产环境中运行所必需的包,例如expressmongoose
  • devDependencies:仅在开发和测试阶段需要的包,例如单元测试框架jest、代码检查工具eslint
语义化版本控制 (SemVer)

npm 使用语义化版本控制来管理包的版本,格式为MAJOR.MINOR.PATCH(例如1.2.3)。

  • MAJOR (主版本号):不兼容的 API 修改。
  • MINOR (次版本号):向下兼容的功能性新增。
  • PATCH (修订号):向下兼容的问题修正。

在安装包时,你经常会看到版本前缀:

  • ^(插入符号):例如^1.2.3,表示允许自动更新到1.x.x的最新版本(即允许更新 MINOR 和 PATCH)。
  • ~(波浪号):例如~1.2.3,表示只允许自动更新到1.2.x的最新版本(即只允许更新 PATCH)。
http://www.jsqmd.com/news/772397/

相关文章:

  • 别再乱用SVC了!手把手教你用Cortex-M7的PendSV实现RTOS零中断延迟切换
  • ConvNeXt 系列改进:2026 多模态融合:ConvNeXt 结合 CLIP 文本塔,实现视觉语言对齐分类器
  • MAA智能辅助工具:如何用开源技术实现游戏自动化的三大突破?
  • 嵌入式系统分布式处理架构演进与实践
  • 初次使用Taotoken从注册到获得第一个API响应的全过程
  • TexTeller公式识别技术深度剖析:从8000万数据训练到生产级部署
  • SWE-FFICIENCY:系统化性能优化与基准测试实践
  • 5--1--1.3网络安全架构(base64编码:U0VDNTExIOaMgee7reebkeaOp+S4juWuieWFqOi/kOe7tA==)
  • 2026年4月AI圈最炸裂的5件事:Token经济爆发、MCP协议战争、超级入口争夺战
  • 如何在浏览器中实现专业级图像处理:OpenCV.js完整指南
  • AMD显卡驱动瘦身完全指南:三步告别臃肿,性能提升70%
  • 3步掌握B站视频转文字:让你的学习效率翻倍
  • 告别命令行!用Qt Creator 10.0.1 + ROS Noetic搭建机器人开发环境(保姆级避坑指南)
  • ConvNeXt 系列改进:引入 SMFA(稀疏多尺度频域注意力),以更小代价捕获全局上下文
  • 观察在流量高峰时段通过Taotoken调用大模型API的稳定性表现
  • CloudCone VPS 如何绑定自定义域名并配置 SSL 证书
  • 2026年江苏珍珠岩粉厂家直供热线,品质保证速来咨询 - GrowthUME
  • Mac电脑详细养小龙虾教程
  • OpenAI披露低延迟语音AI技术架构,新架构解决关键技术难题
  • Linux Core Dump 分析
  • DeFlowSLAM 基于自监督场景运动分解的动态稠密 SLAM
  • Linux时间编程避坑指南:localtime线程安全问题与localtime_r的正确使用姿势
  • Unity点云数据处理完整实战指南:Pcx插件高效工作流解析
  • 从CPU到密码学:聊聊逻辑门(AND/OR/XOR)在真实项目里的那些“神操作”
  • 送你一份价值10W的非专业的面试技巧
  • ASUS Tinker Edge R开发板:边缘AI计算的硬件解析与实践
  • Windows Batch (.bat) 脚本语法详解:从入门到实战
  • 软件生命周期基本过程支持过程组织过程
  • BepInEx终极指南:5分钟学会安装和使用开源游戏插件框架
  • ConvNeXt 系列改进:无缝兼容下游:ConvNeXt + FPN 构建特征金字塔,直接用于实例分割