npm:基础,适用于 React Native 和 Node.js 的包管理器

作者: IT Sectr 发布日期: 2026-02-13 阅读时间: 10 分钟

npm(Node Package Manager)——Node.js 平台的标准包管理器,随 Node.js 安装包提供。npm 管理 JavaScript 和 TypeScript 项目的依赖关系:在 node_modules 中安装库、更新包版本、解决版本冲突。package.json ——包含元数据和依赖列表的中央配置文件。npm Registry ——最大的包注册中心。更多信息请访问 npm Registry

要点

  • npm ——Node.js 的标准包管理器,从 0.6.3 版本起包含在 Node.js 安装中
  • package.json ——项目的配置文件,包含依赖、脚本和元数据
  • npm install ——从 package.json 安装依赖到 node_modules 文件夹的基本命令
  • package-lock.json ——用于在所有环境中进行可重现安装的精确版本锁定文件
  • npm ci ——用于 CI/CD 的命令,严格根据锁定文件安装包而不更新它

什么是 npm ——Node.js 的包管理器?

npm 于 2010 年由 Isaac Schlueter 创建,作为管理 Node.js 依赖关系的解决方案。自 2014 年起,npm 由 npm, Inc. 公司管理,该公司于 2020 年被 Microsoft/GitHub 收购。该工具由两部分组成:用于安装和管理包的 CLI(命令行)以及 Registry ——位于 registry.npmjs.org 的所有已发布模块的中央存储库。

npm Registry ——最大的包注册中心:超过 200 万个包,每月超过 100 亿次下载。每个包都有 SemVer 版本、描述、依赖关系、许可证和作者信息。发布自己的包通过 npm publish 完成。npm 支持组织的范围包(@scope/package)、私有注册中心和内置安全审计。

Node.js 18+ 版本包含 npm 9+,具有改进的性能、用于多仓库的 workspaces 和重新设计的 peer dependencies 机制。npm 生态系统涵盖服务器端 JavaScript、前端(React、Vue、Angular)、移动开发(React Native)、构建工具(Webpack、Vite)和 CLI 实用程序。npm 是 JavaScript 库的主要分发渠道。

npm 的主要功能

npm install ——主命令,读取 package.json 和 package-lock.json 以将所有依赖安装到 node_modules。首次运行时,npm 计算依赖图,解决版本冲突并生成 package-lock.json。npm install <package> 命令安装特定包;--save-dev 标志添加到 devDependencies,--global ——全局安装。

npx ——包执行器,从 npm 5.2 版本开始包含。npx 允许在无需全局安装的情况下运行 CLI 实用程序:npx react-native initnpx create-react-app my-app。npx 将包下载到临时缓存中运行,完成后清除。npx 也适用于运行特定版本的工具。

npm audit 扫描依赖树以查找来自 npm 数据库的已知漏洞。该命令显示带有严重级别(critical、high、moderate)的报告,并建议 npm audit fix 以自动更新易受攻击的包。npm cache 在本地存储下载的包。npm cache clean --force 在安装出现问题时清除缓存。npm outdated 显示过时的包。

bash
# npm 主要命令
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# 无需全局安装运行
$ npx react-native init MyApp
# 安全审计
$ npm audit --fix

package.json 的结构和依赖管理

package.json ——是项目根目录中的一个 JSON 文件,描述其元数据、依赖关系和配置。必填字段:name(包的唯一名称)和 version(SemVer 版本,例如 1.0.0)。该文件通过 npm init -y 命令快速初始化或手动创建。

Semantic Versioning(SemVer)——MAJOR.MINOR.PATCH 版本控制标准。主版本在 API 不兼容更改时更改,次版本在添加功能时更改(向后兼容),补丁在修复错误时更改。版本前的 ^ 符号允许更新次版本和补丁版本,~ 仅允许补丁版本。

json
{
  "name": "my-app",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios"
  },
  "dependencies": {
    "react": "^18.3.0",
    "react-native": "^0.76.0"
  },
  "devDependencies": {
    "typescript": "^5.5.0",
    "@types/react": "^18.3.0"
  }
}
字段用途示例值
scripts用于 npm run 的运行命令"start": "node index.js"
dependencies应用程序的生产依赖"react": "^18.3.0"
devDependencies开发和测试工具"jest": "^29.7.0"
peerDependencies库的主机依赖"react": ">=17.0.0"
enginesNode.js 版本要求{"node": ">=18.0.0"}

npm 在 React Native 开发中的应用

React Native 项目积极使用 npm 管理依赖。标准套件包括 reactreact-native、导航库(React Navigation)、HTTP 请求(axios)、状态管理(Redux、Zustand)和 UI 组件。npm 允许从注册中心安装数千个兼容包。

npx pod-install ——在 React Native 中为 iOS 安装原生模块后的必需命令。npm 根据 package-lock.json 自动生成 Podfile.lock。在 Expo 项目中,使用 expo install 代替 npm install,因为它选择与当前 Expo SDK 版本兼容的版本。

版本冲突 ——React Native 中的常见问题:react-native-reanimated、react-native-gesture-handler 和 react-native-safe-area-context 需要协调的版本。解决方案 ——将所有包更新到最新的兼容版本或使用 --legacy-peer-deps。package-lock.json 对于通过 CocoaPods 和 Gradle 编译的原生模块至关重要。

npm 与替代管理器的比较

npm ——随 Node.js 提供的标准包管理器。主要替代品:yarn(由 Facebook 于 2016 年创建)和 pnpm(快速,使用硬链接)。从 npm 5 开始,npm 和 yarn 之间的速度和功能差异微乎其微。npm 7+ 添加了 workspaces,使其对多仓库具有竞争力。

特性npmyarnpnpm
创建年份201020162017
锁定文件package-lock.jsonyarn.lockpnpm-lock.yaml
安装顺序(npm 5+)并行并行
磁盘空间标准标准最小(链接)
Workspaces是(npm 7+)
Plug'n'Play

根据 State of JS 2025:62% 的开发者使用 npm,yarn ——35%(主要是旧项目和 PnP 爱好者),pnpm ——3%。对于 React Native 项目,两种工具相当,但 npm 在 Expo SDK 50+ 项目和新 React Native 初始化中更常见。

yarn 由于更成熟的 workspaces 和 Plug'n'Play 实现,在超大多仓库(100+ 个包)中保持优势。pnpm 通过指向全局存储的硬链接在磁盘空间节省方面胜出。管理器的选择取决于团队偏好和基础设施。

常见问题

npm install 和 npm ci 有什么区别?

npm install 更新 package-lock.json,并可以在语义范围内安装新的次版本。npm ci(Clean Install)删除 node_modules 并严格根据 package-lock.json 安装包而不更新它。npm ci 更快,用于 CI/CD,并确保所有机器上环境一致。如果缺少 package-lock.json,npm ci 会返回错误。

如何修复 npm 中的 peer dependencies 冲突?

从 npm 7 开始,peer dependencies 冲突会导致构建错误。解决方案:通过 npm update 将所有包更新到兼容版本,使用 --legacy-peer-deps 标志进入 npm 6 模式,或在 package.json 中添加 overrides 部分以强制锁定特定包的版本。最佳方案 ——将依赖更新到兼容版本。

什么是 npm audit,为什么需要它?

npm audit 扫描依赖树以查找来自 npm Security Advisory 数据库的已知漏洞。该命令显示带有严重级别(critical、high、moderate、low)的报告,并建议 npm audit fix 以自动将易受攻击的包更新到安全版本。定期运行 npm audit ——JavaScript 项目的基本安全实践。

npm workspaces 如何简化多仓库?

npm workspaces 允许在单个存储库中管理多个包。在根 package.json 中添加 "workspaces": ["packages/*"] 字段。优势:所有依赖统一安装到共享的 node_modules、本地包之间自动符号链接、从根目录为所有包运行脚本、消除版本重复。

为什么将 package-lock.json 提交到存储库?

package-lock.json 锁定所有依赖及其传递包的精确版本。没有它,不同的开发者和 CI 服务器可能会在语义范围内获得不同的库版本,导致「在我的机器上能运行」的错误。提交锁定文件可确保可重现的构建和所有环境中一致的行为。

总结

  • npm ——Node.js 的标准包管理器,从 0.6.3 版本起包含在 Node.js 安装中
  • package.json ——项目的配置文件,包含依赖、脚本和元数据
  • npm install ——依赖安装,npm ci ——根据 package-lock.json 为 CI/CD 锁定
  • package-lock.json ——精确版本锁定,可重现构建所必需
  • npm Registry ——最大的包注册中心,拥有超过 200 万个模块
  • npm audit ——依赖安全审计,自动修复漏洞
  • npm workspaces ——使用共享 node_modules 管理多仓库的机制

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读