Yarn và Npm chắc chắn sẽ không còn xa lạ với bất kì lập trình viên Javascript nào. Tuy vậy với những bạn mới học hoặc chưa từng làm việc với Node.js thì có lẽ khá bỡ ngỡ. Cũng như các bạn mình khi mới học cũng thắc mắc không hiểu sao có Yarn rồi còn Npm? 2 cái này khác gì nhau? Và khi nào thì nên dùng?
Trong bài viết này CodeTuTam sẽ cùng bạn đi tìm hiểu kỹ thêm về Yarn và Npm nhé.
Giới thiệu về yarn và npm
Npm là gì?
Npm (Node Package Manager) là một công cụ quản lý package mặc định của Node.js. Đây là một trong những công cụ quản lý package phổ biến nhất của Node.js. Công cụ này được tích hợp sẵn vào Node.js ngay khi cài đặt.
Nếu bạn đã từng làm PHP thì Npm cũng giống như là Composer trong PHP vậy. NPM hỗ trợ người dùng tải xuống và cài đặt các package cho dự án Node.js. Nói cách khác Npm hỗ trợ quản lý dependencies và devDependencies của 1 dự án.
Các package được tải xuống từ kho lưu trữ chính thức của npmjs.com. Bạn có thể tìm kiếm, tải xuống và đóng góp các package cho cộng đồng Node.js thông qua npmjs.com.
Ngoài ra Npm cũng cung cấp các tính năng như publish và update package. Thông qua đó người dùng có thể chia sẻ và cập nhật các package của mình. Cũng giống như composer thì npm cũng hỗ trợ các package với nhiều phiên bản khác nhau. Điều này rất quan trọng, nó giúp chúng ta có thể lựa chọn package phù hợp với yêu cầu dự án và môi trường phát triển của mình.
Mặc dù phổ biến là vậy, nhưng Npm cũng có 1 số hạn chế nhất định. Ví dụ như vấn đề liên quan tới tốc độ tải package, xử lý xung đột giữa các phiên bản của package. Tuy vậy thì trong các bản cập nhật mới của Npm vấn đề này đã được giải quyết.
Ngoài npm bạn có thể tìm hiểu thêm về Yarn, một công cụ mạnh mẽ được sinh ra để khắc phục các điểm yếu của npm.
Yarn là gì?
Không cần nhắc thì chúng ta cũng biết rằng, Yarn là một công cụ quản lý package phổ biến trong cộng đồng phát triển Node.js. Về lịch sử, thì Yarn được phát triển bởi Facebook và giới thiệu năm 2016. Bản thân Yarn được phát triển với mục đích giải quyết một số vấn đề liên quan đến npm – công cụ quản lý package mặc định của Node.js mà chúng ta đã tìm hiểu trong phần trên.
Một trong những tính năng nổi bật nhất của Yarn là tốc độ tải package nhanh hơn so với npm. Cũng giống như package-json.lock của npm, thì yarn sử dụng file yarn.lock để lưu thông tin các package đã tải về. Điều này đảm bảo rằng các package được tải về đúng phiên bản và không bị phá vỡ bởi các version mới hơn của các package. Các file lock này giúp Yarn tải các package nhanh hơn và hiệu quả hơn so với npm. (Cơ chế này Yarn ra mắt và áp dụng trước Npm)
Yarn có thể lưu trữ các thông tin package đã cài đặt trước đó. Điều này giúp cho tiết kiệm thời gian khi cài đặt lại các package cho dự án mới. Bản chất việc này là lưu cache bộ nhớ các package đã cài đặt. Tuy vậy đây cũng là một trong các nguyên nhân mà máy tính của bạn nhanh đầy ổ C (window). Ngoài ra Yarn cũng hỗ trợ cả proxy cho 1 số trường hợp cài đặt ở môi trường công ty doanh nghiệp.
Sự khác biệt giữa yarn và npm
Mặc dù Yarn và npm đều là các công cụ quản lý package cho Node.js. Đồng thời 2 công cụ này liên tục cải tiến để tăng cạnh tranh mang lại giá trị tốt hơn cho người dùng nhưng chúng cũng có một số sự khác biệt.
Tốc độ tải package
Tài thời điểmYarn được giới thiệu – năm 2016, Yarn đã có tốc độ tải xuống và xử lý dependencies nhanh hơn so với npm. Điều này có được là do Yarn sử dụng một thuật toán tối ưu hơn để tải xuống các dependencies. Ngoài ra còn là cơ chế lưu cache các package đã tải để giúp tối ưu tốc độ. Tuy nhiên, kể từ phiên bản npm 5.0 được ra mắt vào năm 2017, npm đã cải thiện tốc độ tải xuống và cache dependencies của mình, giúp giảm khoảng cách về tốc độ giữa hai công cụ này.
Một ví dụ tham khảo cho việc này
Chúng ta thử cài đặt thư viện lodash bằng npm và yarn để đo lường thời gian
Đối với linux bạn có thể chạy lệnh sau:
time npm install lodash
Trên window, bạn sử dụng power shell để chạy lệnh
Measure-Command { npm install lodash }
Kết quả thu được khi CodeTuTam chạy lệnh trên window
Days : 0 Hours : 0 Minutes : 0 Seconds : 3 Milliseconds : 115 Ticks : 31156488 TotalDays : 3.606075E-05 TotalHours : 0.000865458 TotalMinutes : 0.05192748 TotalSeconds : 3.1156488 TotalMilliseconds : 3115.6488
Tương tự với Yarn
Measure-Command { yarn add lodash }
Kết quả thu được như sau
Days : 0 Hours : 0 Minutes : 0 Seconds : 1 Milliseconds : 160 Ticks : 11605863 TotalDays : 1.34327118055556E-05 TotalHours : 0.000322385083333333 TotalMinutes : 0.019343105 TotalSeconds : 1.1605863 TotalMilliseconds : 1160.5863
Bỏ qua các yếu tố về đường truyền không ổn định thì chúng ta thấy rằng Yarn được tải xuống nhanh hơn tương đối so với npm.
Quản lý dependencies bằng file lcok
Cả Yarn và npm đều sử dụng file lock để đảm bảo các dependencies được tải xuống đúng phiên bản. Yarn sử dụng file yarn.lock để lưu trữ thông tin về dependencies và các phiên bản của chúng. Trong khi đó npm sử dụng file package-json.lock.
Quản lý packages bị deprecated
Yarn có khả năng hiển thị các dependencies bị deprecated còn npm không cung cấp chức năng này. Điều này có nghĩa là Yarn sẽ hiển thị cảnh báo khi bạn cài đặt một package đã bị deprecated. Điều này giúp bạn có thể tính toán tới phương án thay thể để đảm bảo ổn định của hệ thống đang phát triển.
Cách tái sử dụng dependencies
Đối với Npm, các dependencies được tải xuống và lưu trữ trong thư mục node_modules của project. Khi bạn tạo một project mới và cài đặt các dependencies giống nhau, npm sẽ tải xuống các dependencies đó một lần nữa và lưu trữ chúng trong thư mục node_modules của project mới. Trong khi đó, Yarn có khả năng tái sử dụng các dependencies đã được tải xuống trước đó, giúp giảm thời gian tải xuống và lưu trữ.
Các lệnh đi kèm
Yarn và npm có một số lệnh giống nhau, nhưng cũng có một số lệnh khác nhau. Ví dụ như yarn workspaces cho phép bạn quản lý các package trong một project lớn, trong khi npm không có tính năng tương tự. Trong khi đó, npm có lệnh npm audit giúp bạn kiểm tra bảo mật báo cáo về bất kỳ lỗ hổng bảo mật nào mà các phụ thuộc đó có thể gây ra. Tính năng này giúp đảm bảo rằng các phụ thuộc của dự án được cập nhật và không có lỗ hổng bảo mật đã biết.
Ngoài những khác biệt trên còn một số khác biệt khác giữa Npm và Yarn. Tuy vậy thì việc sử dụng một trong 2 công cụ này đều là điều không bắt buộc, đa phần dựa vào sở thích, kinh nghiệm của lập trình viên, hoặc là đơn giản là phụ thuộc yêu cầu của dự án.
Hi vọng với bài viết này có thẻ giúp các bạn hiểu phần nào về Yarn và Npm. Nếu các bạn thấy bài viết này hay và ý nghĩa đừng quên like và chia sẻ bài viết này bạn nhé.
Tìm hiểu thêm:
2 thoughts on “Yarn và Npm là gì? Chúng có gì khác biệt nhau?”