npm install读取文件优先级package.json package-lock.json node_modules

解释

  1. 核心机制说明

    当你执行 npm install 时,npm 会依次判断以下文件:
    1.1 **package.json**:

    • 这是主要的依赖声明文件
    • npm 会读取其中的 "dependencies""devDependencies" 字段,确定需要安装哪些包。
    • 如果没有 node_modules 目录或 package-lock.json 文件,npm 就会直接根据 package.json 下载依赖的最新匹配版本

    1.2 **package-lock.json**:

    • 这是锁定依赖的精确版本文件
    • 如果存在此文件,npm 会优先读取它,确保安装的每个依赖版本与上次完全一致(包括嵌套依赖)。
    • 这保证了不同机器、环境中的依赖一致性。

    1.3 **node_modules**:

    • 这是实际安装的依赖包目录。
    • 如果目录中已有依赖且版本匹配,npm 会跳过重新安装或只补充缺失部分。

  1. 执行逻辑顺序

    1
    2
    3
    4
    5
    6
    7
    npm install
    ├── 检查 package-lock.json 是否存在
    │ ├── 存在 → 按锁定版本安装
    │ └── 不存在 → 按 package.json 的版本范围安装最新匹配版本
    ├── 安装包到 node_modules/
    ├── 更新或生成 package-lock.json
    └── 更新 node_modules 结构

优先级:package-lock.json > package.json


  1. 简短总结

    • 主配置来源:package.json
    • 精确版本控制:package-lock.json
    • 实际存放目录:node_modules

要进一步控制行为:

  • 完全按锁定版本安装(生产环境常用)可执行:

    1
    npm ci

    它会严格按 package-lock.json 安装,并在安装前清空 node_modules