package-locks

npm lockfiles的解释

描述

从概念上讲,"input" 到 npm install 是一个 package.json,而它的 "output" 是一个完整的 node_modules 树:您声明的依赖关系的表示。在理想情况下,npm 会像纯函数一样工作:相同的 package.json 应该随时生成完全相同的 node_modules 树。在某些情况下,这确实是真的。但在许多其他情况下,npm 无法做到这一点。这有多种原因:

  • 可能使用了不同版本的 npm(或其他包管理器)来安装包,每个包使用的安装算法略有不同。

  • 自上次安装包以来,可能已经发布了直接 semver-range 包的新版本,因此将使用更新的版本。

  • wGIGgiZDyRhWj05JjA9PCRy1f8LwSfQ0qfl2c6X3bBUoOL+7pR2GGjmKD17mP61X0eolnZD15agSwPGIV04bY0A9n8097mfXtP07f1mi4fsmxSg8WQjOKNlUtD5G69KxIlzPbSz3+u178EJecdYao1ol7ZbR+jsSSi4y8DXbpeoQmb0aIj2lRFVCnxOHL5nlzhKGe+U7ZcXtrDUuuzmG86RU9WfuoGxuMTttYat9HekM2JmQ9CsaAtTVzpSQWr8B

  • XHX6G6+WSUKIC2NUDffZVkONH1AGG/BnxcuNKJj8+83r7eqdkCGoYbMcxMfFuj75yNiejhetFipXA4MP3NzWNIJZTjv59XX+JFkAKaH0cVglE4NSj31uV52DkpYJfUy/i2X8pLCuYWi19qj1V7UDDFMAaO37ijKdlwMni594P6l9GB27V5r+zKU3L+GJv0Fk8ISBcbuA4L0JOSSrSzJWKQ==

cykKbJXHRprbkGrCMfCF/49/hVcewl57VqgzB7w84eQ=

{
  "name": "A",
  "version": "0.1.0",
  "dependencies": {
    "B": "<0.1.0"
  }
}

pOWAhP9KxtO3xZiOG01dEg==

{
  "name": "B",
  "version": "0.0.1",
  "dependencies": {
    "C": "<0.1.0"
  }
}

P7HHSHJTbV96hrDfpmwhBw==

{
  "name": "C",
  "version": "0.0.1"
}

9pDyuhnG1oVETJhX2a94snbyzQGXX+ebZcZlCO387cPcBELTqINtyf3fxOZLye9v633Ik0MuHaqXOsTPsFOmaep52qMbPTBKInRuvDvOdLtO8Cg/lXpZRAlB7BrCWXKHdqVPjYmOL1Z2X9h9VaZOMKRjAcyHDCu4HEIumoHl35E=

A@0.1.0
`-- B@0.0.1
    `-- C@0.0.1

yzDJE1IcJ/V0+7jUSj5S2V6Wrk72pfBDSEQEPbXv5VTy4V5KY3JVnnkfan/l/tufmW54TZQVvbjXd2iEMV2ggfw6eEeJLsjSRfcvvEc94GxgzEv3ZiMP00r20UMfEWA4kF7WQ9VyWTqimuxMyF0C+hyH1DAAA9cuAQXmr40S018=

A@0.1.0
`-- B@0.0.2
    `-- C@0.0.1

iqKLZNCB/MgcJLLccbSJlYsWQ3q0FJ6XvuF201spKZPcIFlqgxqMSgB2ODe2czacu8EWa5pQgiRlYu4QacY+bnXYQSvHcT7hVNPiOIICmyzQ4n3y69yj/Yk+d33LcU2otoPEMB6SwW+60PmSHeE20Sv1NvIS4t+LHNXg3VELujoXQGPb25ZnuO6vSESKv5AcYtViMe9cu554dlJVpPnKtShB30Cuasrm7AHqBgmSiI451nSmc1CA61x8mkgKY04YzFB6vZLJml7zSsSaG5FSGNWmdFFBcNFfb0jbttfApSo3nJAQiDFotkJ9HN8In6XUFbIT9IwEZiRlbhout8m+n2IzhAupqpLw1ec7gVQ15ZgwPWrk0yUeRXm8gbszDxpXKJ3JurIcq45V79h0Oaje9w1jAzZg4c6T8cM4txOqMoNEiSCa74XRYveVTfCALeRFwTs6euegSGd9n2KFFocy6L/0vog92egV74xLvepPvyOT0hChIRA0aZE33Zw0cnUL2XZ83qYoh69pJjbU3rnq2SbILa3FtEvLmzJI5zSVrcRM7AfH8VD1Eajo53m65dc9

lbMn2O2WXqsZHX8IJd8k5O0+932Qnfhe0r1tIw/T4VIdvcsnvsnFYGReBuPVHbalq2fT2wmgpRANdDp/FzxvNA22gQOa53/p1hYsU/W7XGniwUO8n6bPdJQptQ6v7qborp9MMghQKr8/057TmCJNMeZhpIJs+Yog6YINnE+qs2z2dF9xqWYanJ/ZQ1AZ4yciaX5xzY8zgR6Qc3fhCkgSnSR3U561bjQsdP7TAGa6ypqM7cij43idoxxqlUArLtNRQ17Mg/Bm52PxpAHlJHdtsKAYH2WM9zguR3drfJRqHfZ6J0uxBB934kbGTOWXGw7F

r3XuZ289vC9rEpCkaEg4p87YNLKVyoBuqmjH8N8CU//TUa3MqfU9IzBFnO7FHlVxYFryWSAjNeb8qsaS0n9XGrVe/nERC8NgZIz9rWVhxLgD2xAzORW0bgB3/fq7dlYQj0XtsNfX8FnV3dlLQMljEQ==

{
  "name": "A",
  "version": "0.1.0",
  ...metadata fields...
  "dependencies": {
    "B": {
      "version": "0.0.1",
      "resolved": "https://registry.npmjs.org/B/-/B-0.0.1.tgz",
      "integrity": "sha512-DeAdb33F+"
      "dependencies": {
        "C": {
          "version": "git://github.com/org/C.git#5c380ae319fc4efe9e7f2d9c78b0faa588fd99b4"
        }
      }
    }
  }
}

CeIo9TyTETByJbxXyB/D0p500N1EMZD4rShAw0oLxN/nWpJ3v8TzSUuDGkrCRLlzBLeFZBSi6yarxiF4SXNJzm7srV8LfH5un97QWv95l1pDcIuvlM0oeqHFKZS9caCB7bBxJzh7KtIpTcu1JsTd8FgVH9+A7yjaaj4OeXkZFk+aiQm5ExwmFoe0fqozfYiabF6ZzAulnaXy94Nf46ljP8IGclGBl8yHwh9L+LCpjUV7id4C+4wOQ1OI+6MRqAkH5dZKdD3O2tgHLJIdT934KNYjlk2ZFaHeFbl0ArWVdD3iVJA5R9B3P+nfwbtcvVxF3+xb1lxtVYSGmEK4pGOGpAzvQoJku2iCAGth5PsDcT0=

2/IjHPUqkvmNjIJqYfE/per9k1o8ioN+d0r2dph6FJkBKPXA4J1QRg3Pl+m9gfz1rN9h6CQiVC1mkPls4IbGXg==

  1. erwSV/FJymCv7LsrPg+2ff7btEDjSU6slFGd3b3QzXgJoQvfYguh6X/n3+Bms9bQk62tOwEPDghPXBmh4jDuaeSbY7WarW0F0dw+6U6On+0D9A9n32sA+YzSTtocq6J3WfwvGy0B6c/SsAGioRno+5qhaJQU0Xz8eyVRfe8uMR4exvUjkbxevQW/GkaTv30jWnlIyg2Gmka++uEYGvbm0WghozqJ/sqN03ZfkoH2ngqpmnTHMNTltE41pWbmoGaZykxeVImbumgC5TPNUTPOWw==

  2. Hky/4bXFQQAgVRBKLfOk4wIB7J12exU6S6/olUsCbMxeWiu4AMhjqgQGBazoD1ncajejTrUe4sxfoINyGstghA==

ohOgAyTPm8zGKJj1tXwmca3trgaBmoFS8KHVJFMowu//s04ONVqAMttGvKB7GEgG8QMWtJqKjCHLBLvfew8nOnPVrM05p4HVRksb9H64qCb/njW7a5duwRp9/mZxIMTjig5/UeB/UcQ3d2HkaBs/P80x6lHq1NkD91GeNfS9dr86IsRPivkqMYTp1Q2OUyWtCE3WGlVYlaUcT5e46rVrlknLiMxqUvF4sjGCbv4h72p+w4oHMASdgpLOyAy9Rc2GCWVzN7jKAvOHyOwtypledjLFE/GdjzGvliDF+tKpJhyGE7pLnpgad+74fgSRsomt80Iiq2z7OT3L5TszpOJ4yFF5O1me4wG3wvfb1TwmuONy+p49C6+6aA17rdE2wwoOJnOJQu/dktejUh1Qq78aeIkV/mfZUxZZZxRncBb0Q08WqdAC1qxHJPUGOa6j0Zl2/6Y0Woti16aDWrAWIlmDoXxiI1IokO5Ejk+2D5knvkXUKb/EahoiPIrVvyKbgiPnADFyXL4EGJPqDe4+yzilf5FpxpSp69bcOCNOUDrhnjWmXVlPiVtAzpw4TxeKebFDuUPSqNVdBPLiiPq4cW2P1sMmcwj1ZTCRw0FECIPu8go=

  "scripts": {
    "postshrinkwrap": "json -I -e \"this.myMetadata = $MY_APP_METADATA\""
  }

使用锁定的包

fy0Ep5ymrnoduuV8IuHiVzY3aiZLD/Gjkj9to4ht6Q/eMeu6o3di0aA5RQwoVm7NWaNoPFMqe2KRuwhDvz7/IRhsMwE2ptMgyeuNozw+rc4dNg60yhy1bujRnb+6sttpCUF244ZQX8l+aKuK0NvVC9sKQywZsQfLoia2zJIMkae6hbYM2MhbvULws7MgIM9VQYyF0oZ7wPyAZRN5DhG/eU77LuS3V3X20bwC6agmcNiK3MCiKSzTFtmkc84xkEQHWktux4JNcoZ0MyVBhnZVD5KWQcCvQZG+89U2787SROvgeLppkoW7oETVmDn2sjwMdob/7NFGVcIJ5Hg5ygNCd/0CtI8BBtIe4E7N/1pm9Rppmuu0Z3TAE+jtmQl1Lx0+qEgnlE+A4BQwOoD4Vw0ou5s/5+VxL8XtGNABk3N6Rjp24Vw34qNUF6UMEmEcKmEhxP6mSPgDWe+w7erF43OpiPDOCjukeyA1g5Gnjjb/13dpEG9mbUT62ym7EwxUEzYYjGnBUlTB3OHhh/BHgFMzelWRMcLtYhRpmTp7t5gs+MXcS0tFFzvXurceVyhHDAnpUabqaF9UaSScgdcjvYqoWGnJcRf0GkuuJp0Yqo2UCYPA6qHbPUD9OzpjKIszZZteIHPKi8bfDrUL+PlvDmvoAx14QqD8KhOVGLdV9JvVREX0PjKWO7oLGEYLQ/EQ/dsSHlMB+nB07GlKAcU5Ho41QNO5UXZ0qBDjqgt8DSxZpsUkc0fMD+N4uv287YbyI184

qb+5jkqvf/BhI84Ww/2I+qEsujpYkc6t6S9p5t0Rk11ItDPjD//g7ZLTwMelT705ENNaoHBAtaNvRWPxLsl374xII8QcRaMh1tHZMc/y8QzzsHW1ZUmpM7vwHvvbExHhELEbxFwhIUdDfy+Kfk/XuHyScBp7eq4X6ZXrrzQvREkVCpn6vGdlIk8LiNYpwfIGtqpHwaifcnjHfnL5ZhgETTbnuhLPWb8F2euAgCDvvg3pvySLoIJCg/QuDayNL78HTpSufCtdpaWYR2/h++bMJh+4P6NKVKAX0UjCA4QVyhgBMfCQSRcTl83Egdrc/9p4AUC1W+fTFdItPM2L1SobvGWb0zJ6tGmkzd98nIW3Esq4douujPZjuVKM9AXGAiqZiSE6+rajBo+fWktmcfXEd/Xs+onHf9P9dj8vof0gdhrgxPjmGSk0BjmtrPMyVam3rSLODMv+MWxLo2vuZNBAOuTcis3C1+tXB/34YCQ8IA7mFi0VseOCiuVcNBIGxyOiMCoC10FjB4Jh0Ph+w1gqakBBQk9LsUxvp143JmhvXbkMRroGaOSlc3x1Son0zhgB8pC6BSkzLR58s3O+xWwmDmc0oa5tCowMiuP1KuLmVN8=

解决锁文件冲突

KKvLQLt0TmWN/2C/PqA/6nXKhd2f42j/NIpMDxApkVa+fpobL1tO0jqCH5+mX9ZE2IS7shd/XLiSkgupvMoaPFO1Mz+2ezFgwVCBXAlDdOw/Zq9eNFZHPJGLc67eSYVbmnZaIh9cb6154ZTgYrAEILHAMlp0TmDdCjQmotTmOIwvuGVpNOaMcz7RkDdSzAekyPkEJQY6ZhBkBGayLAExUwjjd/lzf+dSj89htyZqFVlA2lVD5+EeY554ZdNuKrSIoHUSXHbUryESPaSJNSGoO9u8pcHPUKv2rRbj+Q86qkYbUP6vZdS9zeQKBh6fy+aU1a2UpuVII9SMMVivfnKBIDohOPemcTOB1LDYcqWtVhAgb1fA6eSnz+bfXOFQ8JbNzSahgIdAGrO2fopmwmQYzuAssn3g0iFHLt75MtYyJ8K3y95Ipv7hX354nDauFs4R2CZvhbU1PMo+8suYrJrFOm+LBGrOz+xfuqHKMfrObw/5SGVD+cdtLOctRZEamXkHGwt6QpcAoO2bLS1fVKtHJ/Z97M32sUq9K0KIP2/SM5uUbLd96+FDNK8zrXfIVywzEbV828y3dZEWoLJydVUbjWd6YoiSG5UQaNqUqnUtBNhvmcjUtOXOGoymbQ4QZZ+2riLwg3SyXd11EWnhJRYpE7zvZXAvIdeW+WjZJhnQxXPYAOE6vhfhvU+JXLsY7U9Zo8DDO02lPsyiLn+Xtj0f2PtJJ0Y7BQCkL/xydJHyujhlNHL0PxLpsonyK7F5CCIo

puC+LQypeob1ioOxYQtEm6ePdkzp1P5+yQlGZpxb+GKkfga2Ad+MqJOdDF75qdIjtiXosAIkxqLueDMPvSSDtfjFF3wwhJlTFNIouq2Aav8cSFGs+GVal+/yWZK6YNYYnYKb3+wl6N1jEF2Lf+rWmEQNuu+30HUKbKDthQ74KnqewtLHTwwCPHxa2OSK1wdS/dktukngBzcREPvkIV7F2LfhVzTeIbOhJrOOLuuN4Oi5nbkhSzn0fuhwwO9mwz3mZQ9wvi/FVbV5l/8ipcLLNGxh5uxMwAeVwqBZYuxIC2EfFBMjO5KyvtmIGPMvCYe3vwfdGxNHKe1ppLMYKvDYJ90xSS9BidgU+r53A1uneqL6UMaaDqgtbpdZLk64+iywBrz2gDf8ZooJoBagecvfzv3z8syk/hS9S3JW6OV44PMmcyCS9iUoc2ypDjkqzZcbvpah/BjSPX71ed/bJsKOT4/Da7p4copZz9cQVACfUClIJbbYfwVjF5VfgznIJNB4d/elZ1Pf/tJZCR8BXurIjq9vY/y1aRTKHMx+OOx/YNpLsONmvZIzNLm3MWJmc2bH6FEc1a109+G2p5Gxa1dDfci6NVp+nEHpY1ryYfE9Bf7qa83t0bC7M/YpVXKreThvXaMLtdq3bYiUbc1iVK1WFI2ZgENVYc9qzWcP7Hr5Akfmdj11KWOeDtX8QXqfSKZLEiRsdStmBNTGLphj0JJvspsd0k++/JD73yLgTjBvZQblB93lqeYkA8JOS3gK4maR7QEbr1VoiPJZjLn4g7l4SQ==