Npm shrinkwrap là gì và cần sử dụng khi nào?

Lệnh npm shrinkwrap cho phép bạn khóa tất cả phiên bản của các package và các package “hậu duệ” 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 npm shrinkwrap trong quá trình phát triển ứng dụng của bạn.

Npm shrinkwrap là gì và cần sử dụng khi nào?

Trình quản lý package npm hoạt động khá tốt trong việc duy trì và cài đặt các gói phụ thuộc 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 thiết lập hoạt động của npm:

1. Mặc dù npm khuyến khích sử dụng semver để quản lý phiên bản ứng dụng của các package, nhưng nó hoàn toàn phụ thuộc vào việc tác giả của package tuân thủ theo nguyên tắc này. Điều này có thể là vấn đề nếu một package trong ứng dụng của bạn không tuân theo semver, 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 phát sinh là do cách thiết lập hoạt động npm. Khi chạy một thiết lập npm 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 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, điều đó chỉ giải quyết vấn đề cho các package phụ thuộc trực tiếp mà không giúp bạn kiểm soát phiên bản của các package lồng trong package và hơn thế nữa.

Điều này có thể rất quan trọng đối với bạn trong môi trường sản xuất bởi vì bạn cần phải đảm bảo rằng mỗi lần tái triển khai sản phẩm luôn cài đặt cùng một phiên bản của package như các triển khai khác.

Đây là lúc bạn cần sử dụng npm shrinkwrap. Khi bạn chạy lệnh npm shrinkwrap trong một dự án sau khi chạy lệnh thiết lập 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ác package. Nếu bạn di chuyển tới một hệ thống quản lý phiên bản 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á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 đó xác định chính xác package cần chạy lệnh npm shrinkwrap để cập nhật fle npm-shrinkwrap.json.

Nếu cần tìm các package đã lỗi thời (outdated), bạn 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 xem liệu có nên hay không nên đưa chúng vào sản phẩm sau khi đã kiểm tra kỹ lưỡng.

Ngoài ra, bạn 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

Tham khảo thêm một số bài viết:

Chúc các bạn vui vẻ!

Thứ Tư, 20/12/2017 15:06
51 👨 224