package-lock.json

    package-lock.json 文件是由 npm 自动生成的一个文件,它在安装包的过程中被创建。这个文件的主要目的是锁定安装时的包的版本,以确保在不同的环境中能够安装相同版本的依赖,从而使项目更加稳定和一致。

    package-lock.json 与 npm 的缓存机制是有关联的。当 package-lock.json 文件存在时,npm安装依赖的过程会更快,部分原因在于 npm 可以利用本地缓存。npm会将下载的包存储在本地的缓存中,当再次安装相同版本的包时,npm可以直接从缓存中获取,而不是重新从远程仓库下载,因此加快了安装速度。

    package-lock.json文件的作用:

    1. 确保团队成员和部署环境中的依赖项版本一致

    2. 提供一个完整的依赖树信息,包括每个包的精确版本和来源

    3. 间接地加快了依赖安装的速度,因为 npm 可以利用该文件中的信息来使用本地缓存中的包,避免不必要的网络请求。

    • version:安装的依赖包的具体版本号
    • resolved:一个完整的URL,指定了当前包的下载地址
    • integrity:一个字符串,通常是一个 SHA-512 校验和,用于验证包的完整性。当从缓存中获取包时,npm会使用这个校验和来确保包的数据没有被篡改。
    • dev:指定了当前包是否为开发依赖包
    • bin:指定了当前包中可执行文件的路径和名称
    • engines:指定了当前包所依赖的Node.js版本范围

    package-lock.json 的缓存

    通过 name + version + integrity 信息生成一个唯一的key,这个key能找到对应的 index-v5 下的缓存记录,这个目录记录了 content-v2的索引的一个位置,如果能对上就去 content-v2 中找到缓存的文件,找到则放到node_modules下

    1# 执行 npm config list -l 命令查看npm cache的目录地址
    2npm config list -l

    ![image-20240610182800987](/Users/dongxu/Library/Application Support/typora-user-images/image-20240610182800987.png)

    1{
    2  "name": "xiaosu",
    3  "version": "1.0.0",
    4  "lockfileVersion": 3,
    5  "requires": true,
    6  "packages": {
    7    "node_modules/@babel/parser": {
    8      "version": "7.24.7",
    9      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
    10      "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
    11      "dev": true,
    12      "bin": {
    13        "parser": "bin/babel-parser.js"
    14      },
    15      "engines": {
    16        "node": ">=6.0.0"
    17      }
    18    },
    19    "node_modules/@jridgewell/sourcemap-codec": {
    20      "version": "1.4.15",
    21      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
    22      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
    23      "dev": true
    24    },
    25    "node_modules/@vue/compiler-core": {
    26      "version": "3.4.27",
    27      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz",
    28      "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==",
    29      "dev": true,
    30      "dependencies": {
    31        "@babel/parser": "^7.24.4",
    32        "@vue/shared": "3.4.27",
    33        "entities": "^4.5.0",
    34        "estree-walker": "^2.0.2",
    35        "source-map-js": "^1.2.0"
    36      }
    37    },
    38    "node_modules/@vue/compiler-dom": {
    39      "version": "3.4.27",
    40      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz",
    41      "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==",
    42      "dev": true,
    43      "dependencies": {
    44        "@vue/compiler-core": "3.4.27",
    45        "@vue/shared": "3.4.27"
    46      }
    47    },
    48    "node_modules/@vue/compiler-sfc": {
    49      "version": "3.4.27",
    50      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz",
    51      "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==",
    52      "dev": true,
    53      "dependencies": {
    54        "@babel/parser": "^7.24.4",
    55        "@vue/compiler-core": "3.4.27",
    56        "@vue/compiler-dom": "3.4.27",
    57        "@vue/compiler-ssr": "3.4.27",
    58        "@vue/shared": "3.4.27",
    59        "estree-walker": "^2.0.2",
    60        "magic-string": "^0.30.10",
    61        "postcss": "^8.4.38",
    62        "source-map-js": "^1.2.0"
    63      }
    64    },
    65    "node_modules/@vue/compiler-ssr": {
    66      "version": "3.4.27",
    67      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz",
    68      "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==",
    69      "dev": true,
    70      "dependencies": {
    71        "@vue/compiler-dom": "3.4.27",
    72        "@vue/shared": "3.4.27"
    73      }
    74    },
    75    "node_modules/@vue/reactivity": {
    76      "version": "3.4.27",
    77      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz",
    78      "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==",
    79      "dev": true,
    80      "dependencies": {
    81        "@vue/shared": "3.4.27"
    82      }
    83    },
    84    "node_modules/@vue/runtime-core": {
    85      "version": "3.4.27",
    86      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz",
    87      "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==",
    88      "dev": true,
    89      "dependencies": {
    90        "@vue/reactivity": "3.4.27",
    91        "@vue/shared": "3.4.27"
    92      }
    93    },
    94    "node_modules/@vue/runtime-dom": {
    95      "version": "3.4.27",
    96      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz",
    97      "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==",
    98      "dev": true,
    99      "dependencies": {
    100        "@vue/runtime-core": "3.4.27",
    101        "@vue/shared": "3.4.27",
    102        "csstype": "^3.1.3"
    103      }
    104    },
    105    "node_modules/@vue/server-renderer": {
    106      "version": "3.4.27",
    107      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz",
    108      "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==",
    109      "dev": true,
    110      "dependencies": {
    111        "@vue/compiler-ssr": "3.4.27",
    112        "@vue/shared": "3.4.27"
    113      },
    114      "peerDependencies": {
    115        "vue": "3.4.27"
    116      }
    117    },
    118    "node_modules/@vue/shared": {
    119      "version": "3.4.27",
    120      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz",
    121      "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==",
    122      "dev": true
    123    },
    124    "node_modules/csstype": {
    125      "version": "3.1.3",
    126      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
    127      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
    128      "dev": true
    129    },
    130    "node_modules/entities": {
    131      "version": "4.5.0",
    132      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
    133      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
    134      "dev": true,
    135      "engines": {
    136        "node": ">=0.12"
    137      },
    138      "funding": {
    139        "url": "https://github.com/fb55/entities?sponsor=1"
    140      }
    141    },
    142    "node_modules/estree-walker": {
    143      "version": "2.0.2",
    144      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
    145      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
    146      "dev": true
    147    },
    148    "node_modules/magic-string": {
    149      "version": "0.30.10",
    150      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
    151      "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
    152      "dev": true,
    153      "dependencies": {
    154        "@jridgewell/sourcemap-codec": "^1.4.15"
    155      }
    156    },
    157    "node_modules/nanoid": {
    158      "version": "3.3.7",
    159      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
    160      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
    161      "dev": true,
    162      "funding": [
    163        {
    164          "type": "github",
    165          "url": "https://github.com/sponsors/ai"
    166        }
    167      ],
    168      "bin": {
    169        "nanoid": "bin/nanoid.cjs"
    170      },
    171      "engines": {
    172        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
    173      }
    174    },
    175    "node_modules/picocolors": {
    176      "version": "1.0.1",
    177      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
    178      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
    179      "dev": true
    180    },
    181    "node_modules/postcss": {
    182      "version": "8.4.38",
    183      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
    184      "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
    185      "dev": true,
    186      "funding": [
    187        {
    188          "type": "opencollective",
    189          "url": "https://opencollective.com/postcss/"
    190        },
    191        {
    192          "type": "tidelift",
    193          "url": "https://tidelift.com/funding/github/npm/postcss"
    194        },
    195        {
    196          "type": "github",
    197          "url": "https://github.com/sponsors/ai"
    198        }
    199      ],
    200      "dependencies": {
    201        "nanoid": "^3.3.7",
    202        "picocolors": "^1.0.0",
    203        "source-map-js": "^1.2.0"
    204      },
    205      "engines": {
    206        "node": "^10 || ^12 || >=14"
    207      }
    208    },
    209    "node_modules/source-map-js": {
    210      "version": "1.2.0",
    211      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
    212      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
    213      "dev": true,
    214      "engines": {
    215        "node": ">=0.10.0"
    216      }
    217    },
    218    "node_modules/vue": {
    219      "version": "3.4.27",
    220      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz",
    221      "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==",
    222      "dev": true,
    223      "dependencies": {
    224        "@vue/compiler-dom": "3.4.27",
    225        "@vue/compiler-sfc": "3.4.27",
    226        "@vue/runtime-dom": "3.4.27",
    227        "@vue/server-renderer": "3.4.27",
    228        "@vue/shared": "3.4.27"
    229      },
    230      "peerDependencies": {
    231        "typescript": "*"
    232      },
    233      "peerDependenciesMeta": {
    234        "typescript": {
    235          "optional": true
    236        }
    237      }
    238    }
    239  }
    240}