Bài viết được dịch từ: javascript.tutorialhorizon.com

Lệnh npm shrinkwrap giúp khóa số phiên bản của tất cả các package và các package con, cháu trong thư mục node_modules. Bài viết này sẽ giải thích tại sao và khi nào nên sử dụng lệnh này trong ứng dụng của bạn.

Trình quản lý package npm giúp duy trì và cài đặt các dependencies cho tất cả các package mà dự án của bạn yêu cầu. Nó làm việc đó bằng cách cài đặt một hệ thống phân cấp các package trong thư mục node_modules.

Có 2 vấn đề chính với cách npm install hoạt động:

  1. Mặc dù npm khuyến khích sử dụng semver (sementic version) để quản lý phiên bản của các package trong ứng dụng, nhưng nó hoàn toàn phụ thuộc vào tác giả của package có tuân thủ nguyên tắc này hay không. Nếu một package trong ứng dụng của bạn không tuân theo semver, thì một phiên bản mới của package này có thể gây ra lỗi. Thậm chí, ngay cả khi tác giả của package tuân theo semver, thì lỗi vẫn có thể xảy ra trong một phiên bản được giới thiệu là tương thích.
  2. Một vấn đề khác là cách npm install hoạt động. Khi chạy npm install nó cài đặt một hệ thống thứ bậc các package, nếu bạn muốn cài đặt chính xác số phiên bản của các package, bạn có thể sử dụng chính xác số phiên bản của các package trong file package.json. Tuy nhiên nó chỉ giải quyết vấn đề cho các package cha, mà không giúp bạn kiểm soát phiên bản của các package lồng trong package cha và hơn thế nữa.

Điều này có thể quan trọng trong mỗi lần triển khai sản phẩm (production), vì bạn cần đảm bảo luôn luôn cài đặt cùng phiên bản của các package trong mỗi lần triển khai.

Đây là lúc bạn cần sử dụng npm shrinkwrap. Khi bạn chạy lệnh npm shrinkwrap sau khi chạy lệnh npm install, nó sẽ tạo ra một file gọi là npm-shrinkwrap.json, cái liệt kê chính xác phiên bản của tất cả các package đã được cài đặt trong toàn bộ hệ thống phân cấp của các package. Nếu bạn đẩy source tới một hệ thống quản lý phiên bản (VD: git, ...), khi đồng nghiệp của bạn clone source code về và chạy lệnh npm install, nó sẽ cài đặt chính xác phiên bản của các package trong toàn bộ hệ thống phân cấp, như đã được chỉ định trong file npm-shrinkwrap.json.

Để cập nhật file npm-shrinkwrap.json, bạn sẽ cần chạy npm update <package_name>, sau đó chạy lệnh npm shrinkwrap để cập nhật fle npm-shrinkwrap.json.

Nếu bạn cần tìm các package đã lỗi thời (outdated), chỉ cần chạy:

npm outdated

Lệnh trên sẽ thông báo với bạn các package bị lỗi thời. Bạn có thể kiểm tra chúng và quyết định liệu có hay không đưa chúng vào sản phẩm sau khi đã kiểm tra kỹ lưỡng.

Cũng cần chú ý rằng mặc định npm shrinkwrap không bao gồm devDependencies trừ khi bạn chạy với cờ --dev:

npm shrinkwrap --dev

Đọc thêm:

https://techmaster.vn/posts/34378/yarn-vs-npm-moi-thu-ban-can-biet