package-lock.json文件

安裝節點軟件包時會自動生成package-lock.json文件。了解它的含義

In version 5, npm介紹了package-lock.json文件。

那是什麼?您可能知道package.json文件,這種情況更為常見,而且已經存在了更長的時間。

該文件的目標是跟踪所安裝的每個軟件包的確切版本,以便即使軟件包的維護者更新了軟件包,產品也可以以相同的方式100%複製。

這解決了一個非常具體的問題package.json懸而未決。在package.json中,您可以使用塞姆弗表示法,例如:

  • 如果你寫~0.13.0,您只想更新補丁程序版本:0.13.1可以,但是0.14.0不是。
  • 如果你寫^0.13.0,您要更新補丁程序和次要版本:0.13.10.14.0等等。
  • 如果你寫0.13.0,即始終使用的確切版本

您不必提交給Git您的node_modules文件夾,該文件夾通常很大,並且當您嘗試通過使用npm install命令,如果您指定了~語法和軟件包的修補程序版本已發布,即將安裝。相同的^和次要版本。

如果您指定確切的版本,例如0.13.0在示例中,您不受此問題的影響。

可能是您,或者另一個人試圖通過運行來初始化世界另一端的項目npm install

因此,您的原始項目和新初始化的項目實際上是不同的。即使補丁程序或次要發行版不應該引入重大更改,我們都知道錯誤可以(因此,它們也會)潛入其中。

package-lock.json設置每個軟件包的當前安裝版本在石頭上, 和npm在運行時將使用那些確切的版本npm install

這個概念並不新鮮,其他編程語言包管理器(例如PHP中的Composer)使用類似的系統已有多年了。

package-lock.json該文件需要提交到您的Git存儲庫中,這樣,如果項目是公共的或您有協作者,或者如果您使用Git作為部署源,則可以由其他人獲取。

依賴項版本將在package-lock.json運行時文件npm update

一個例子

這是一個示例結構package-lock.json運行時得到的文件npm install cowsay在一個空文件夾中:

{
  "requires": true,
  "lockfileVersion": 1,
  "dependencies": {
    "ansi-regex": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.
0.0.tgz",
      "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
    },
    "cowsay": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz"
,
      "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkM
Ajufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",
      "requires": {
        "get-stdin": "^5.0.1",
        "optimist": "~0.6.1",
        "string-width": "~2.1.1",
        "strip-eof": "^1.0.0"
      }
    },
    "get-stdin": {
      "version": "5.0.1",
      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.
1.tgz",
      "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="
    },
    "is-fullwidth-code-point": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/
is-fullwidth-code-point-2.0.0.tgz",
      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
    },
    "minimist": {
      "version": "0.0.10",
      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10
.tgz",
      "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
    },
    "optimist": {
      "version": "0.6.1",
      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
  <span style="color:#f92672">"requires"</span>: {
    <span style="color:#f92672">"minimist"</span>: <span style="color:#e6db74">"~0.0.1"</span>,
    <span style="color:#f92672">"wordwrap"</span>: <span style="color:#e6db74">"~0.0.2"</span>
  }
},
<span style="color:#f92672">"string-width"</span>: {
  <span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"2.1.1"</span>,
  <span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz"</span>,
  <span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="</span>,
  <span style="color:#f92672">"requires"</span>: {
    <span style="color:#f92672">"is-fullwidth-code-point"</span>: <span style="color:#e6db74">"^2.0.0"</span>,
    <span style="color:#f92672">"strip-ansi"</span>: <span style="color:#e6db74">"^4.0.0"</span>
  }
},
<span style="color:#f92672">"strip-ansi"</span>: {
  <span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"4.0.0"</span>,
  <span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz"</span>,
  <span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha1-qEeQIusaw2iocTibY1JixQXuNo8="</span>,
  <span style="color:#f92672">"requires"</span>: {
    <span style="color:#f92672">"ansi-regex"</span>: <span style="color:#e6db74">"^3.0.0"</span>
  }
},
<span style="color:#f92672">"strip-eof"</span>: {
  <span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"1.0.0"</span>,
  <span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz"</span>,
  <span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="</span>
},
<span style="color:#f92672">"wordwrap"</span>: {
  <span style="color:#f92672">"version"</span>: <span style="color:#e6db74">"0.0.3"</span>,
  <span style="color:#f92672">"resolved"</span>: <span style="color:#e6db74">"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz"</span>,
  <span style="color:#f92672">"integrity"</span>: <span style="color:#e6db74">"sha1-o9XabNXAvAAI03I0u68b7WMFkQc="</span>
}

} }

我們安裝了cowsay,取決於

  • get-stdin
  • optimist
  • string-width
  • strip-eof

反過來,這些包也需要其他包,如我們從requires一些具有的屬性:

  • ansi-regex
  • is-fullwidth-code-point
  • minimist
  • wordwrap
  • strip-eof

它們按字母順序添加到文件中,每個都有一個version場,一個resolved指向包裹位置的字段,以及一個integrity我們可以用來驗證軟件包的字符串。

免費下載我的Node.js手冊


更多節點教程: