Tệp package-lock.json

Tệp package-lock.json được tạo tự động khi cài đặt các gói nút. Tìm hiểu nội dung của nó

In version 5, npmgiới thiệupackage-lock.jsontập tin.

Cái gì vậy? Bạn có thể biết vềpackage.jsontập tin, phổ biến hơn nhiều và đã tồn tại lâu hơn.

Mục tiêu của tệp là theo dõi phiên bản chính xác của mọi gói được cài đặt để sản phẩm có thể tái tạo 100% theo cùng một cách ngay cả khi người bảo trì của họ cập nhật gói.

Điều này giải quyết một vấn đề rất cụ thểpackage.jsoncòn lại chưa được giải quyết. Trong package.json, bạn có thể đặt phiên bản nào bạn muốn nâng cấp lên (bản vá hoặc bản nhỏ), bằng cách sử dụngsemverký hiệu, ví dụ:

  • nếu bạn viết~0.13.0, bạn chỉ muốn cập nhật các bản vá lỗi:0.13.1được, nhưng0.14.0không phải.
  • nếu bạn viết^0.13.0, bạn muốn cập nhật bản vá và các bản phát hành nhỏ:0.13.1,0.14.0và như thế.
  • nếu bạn viết0.13.0, đó là phiên bản chính xác sẽ được sử dụng, luôn luôn

Bạn không cam kết Git thư mục node_modules của mình, thư mục này thường rất lớn và khi bạn cố gắng sao chép dự án trên một máy khác bằng cách sử dụngnpm installlệnh, nếu bạn đã chỉ định~cú pháp và bản vá lỗi của một gói đã được phát hành, gói đó sẽ được cài đặt. Giống với^và các bản phát hành nhỏ.

Nếu bạn chỉ định phiên bản chính xác, như0.13.0trong ví dụ, bạn không bị ảnh hưởng bởi vấn đề này.

Đó có thể là bạn hoặc một người khác đang cố gắng khởi tạo dự án ở bên kia thế giới bằng cách chạynpm install.

Vì vậy, dự án ban đầu của bạn và dự án mới khởi tạo thực sự khác nhau. Ngay cả khi một bản vá hoặc bản phát hành nhỏ không nên đưa ra những thay đổi đột phá, chúng ta đều biết lỗi có thể (và do đó, chúng sẽ) trượt vào.

Cácpackage-lock.jsonđặt phiên bản hiện đã cài đặt của bạn của từng góitrong đá, vànpmsẽ sử dụng các phiên bản chính xác đó khi chạynpm install.

Khái niệm này không phải là mới và các trình quản lý gói ngôn ngữ lập trình khác (như Composer trong PHP) sử dụng một hệ thống tương tự trong nhiều năm.

Cácpackage-lock.jsontệp cần được cam kết với kho lưu trữ Git của bạn, để người khác có thể tìm nạp tệp, nếu dự án là công khai hoặc bạn có cộng tác viên hoặc nếu bạn sử dụng Git làm nguồn triển khai.

Các phiên bản phụ thuộc sẽ được cập nhật trongpackage-lock.jsontập tin khi bạn chạynpm update.

Một ví dụ

Đây là một cấu trúc ví dụ của mộtpackage-lock.jsontệp chúng tôi nhận được khi chúng tôi chạynpm install cowsaytrong một thư mục trống:

{
  "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>
}

} }

Chúng tôi đã cài đặtcowsay, điều này phụ thuộc vào

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

Đổi lại, các gói đó yêu cầu các gói khác, như chúng ta có thể thấy từrequirestài sản mà một số có:

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

Chúng được thêm theo thứ tự bảng chữ cái vào tệp và mỗi cái có mộtversionlĩnh vực, mộtresolvedtrường trỏ đến vị trí gói và mộtintegritychuỗi mà chúng tôi có thể sử dụng để xác minh gói.

Tải xuống miễn phí của tôiSổ tay Node.js


Các hướng dẫn nút khác: