khoa-pham-async-await

Npm và package


npm

1. Giới thiệu chung

NPM viết tắt của Node Package Manager là một công cụ tạo và quản lý các thư viện lập trình Javascript cho NodeJS. Trong cộng đồng Javascript, các lập trình viên chia sẻ hàng trăm nghìn các thư viện với các đoạn code đã thực hiện sẵn một chức năng nào đó. Nó giúp cho các dự án mới tránh phải viết lại các thành phần cơ bản, các thư viện lập trình hay thậm chí cả các framework.

Nếu bạn vẫn chưa tưởng tượng ra lợi ích của việc sử dụng npm thì ta sẽ lấy ví dụ cụ thể hơn.(Các ví dụ dưới đây đều không bao gồm các trường hợp các bạn sử dụng 1 package manager nào khác, ví dụ như yarn, maven…)

Ví dụ 1: Nếu bạn không sử dụng npm, bạn sẽ phải download toàn bộ các thư viện một cách thủ công, sau đó include vào project của bạn, việc này rất mất thời gian, trong khi với npm, bạn chỉ cần 1 dòng lệnh là xong.

Ví dụ 2: Khi làm 1 dự án, bạn phải chia sẻ code cùng với các cộng sự của mình, nếu không sử dụng npm (hoặc bất kì trình quản lí package nào) thì khi commit code ta phải commit cả thư viện vào, rất nặng. Khi deploy ta cũng phải copy thư viện lên, rất chậm và tốn thời gian.

Bạn đã thấy sử dụng npm tiện như thế nào chưa?


2. Cài đặt và sử dụng Npm

Npm được tích hợp sẵn có trong NodeJS, để kiểm tra xem trên hệ thống của bạn đã được cài npm chưa chúng ta sử dụng lệnh npm -v, nếu một phiên bản hiện ra thì hệ thống của bạn đã được cài đặt npm.

Nếu bạn tạo mới 1 project và muốn sử dụng npm, tốt hơn hết bạn nên bắt đầu với câu lệnh:

npm init

Câu lệnh trên đơn giản là sẽ tạo ra 1 file có tên là package.json – thành phần này được gọi là Local Package Database, lưu trữ thông tin (tên package, phiên bản, các dependencies) mà project của bạn sử dụng.

Sau khi chạy câu lệnh này, Npm sẽ hỏi chúng ta một vài câu hỏi về project của bạn.

Khi kết thúc sẽ hỏi 1 câu là Is this OK: bạn có chắc không, yes hoặc no.

Sau khi kết thúc, project của các bạn sẽ có thêm 1 file có tên là package.json. Khi bạn vào trong đó ban đầu sẽ file hiển thị những thông tin tương tự như dưới đây.

package.json

Các thông tin trong file này ban đầu chính là những thông tin bạn nhập trước đó trong phần npm init. Trong tương lai bạn có thể add rất nhiều thứ vào file này nữa. Và giờ bạn có thể sử dụng npm để cài đặt các package mà mình muốn include vào trong dự án của mình rồi.


3. Phân loại loại package

Dựa theo chức năng mà ta chia package ra làm 2 loại, đó là:

Về sự khác nhau giữa 2 loại này ra sao???

3.1 Simple dependencies

Dependencies là những package bắt buộc phải có trong quá trình chạy sản phẩm, kiểu như một thư viện cung cấp các hàm mà code của bạn cần.

Khi cài đặt dependencies, Npm sẽ tự động cài đặt tất cả các dependencies cần thiết.

Ví dụ như nếu package A phụ thuộc vào package B, package B lại phụ thuộc vào package C thì Npm sẽ cài đặt đồng thời cả A,B,C.

Đó cũng chính là lí do vì sao khi bạn cài đặt 1 package và vào folder node_modules sẽ thấy cả đống các package khác mà bạn không hề cài đặt

3.2 Development dependencies

Còn đối với Development dependencies là những package bắt buộc khi phát triển cũng như phát hành sản phẩm. Kiểu như các trình biên dịch giúp biên dịch đoạn code của bạn về javascript, rồi các framework phục vụ cho việc kiểm thử,…

Khi cài đặt Development Dependencies, Npm sẽ chỉ cài đặt các dependencies mà cần thiết. Chỉ cài Module được chạy lệnh, không cài những Module phụ thuộc.

Ví dụ như nếu package A phụ thuộc vào package B, package B lại phụ thuộc dev vào package C thì Npm sẽ chỉ cài đặt AB.

Giờ chúng ta sẽ xem chúng ta cài đặt các package như thế nào nhé.

3.3 Cài đặt

3.3.1 Cài đặt Simple dependencies package:

Cú pháp như sau: npm install [tên package] hoặc đơn giản hơn là npm i [tên package]

Ví dụ: Simple dependencies package

Khi cài xong, bạn vào file package.json sẽ thấy có thêm 1 trường như này:

Simple dependencies package Ở đây, Slugify là tên package, còn ^1.3.6version của package.

3.3.2 Cài đặt Development dependencies package:

Cú pháp như sau: npm install [tên package] --save-dev hoặc đơn giản hơn là: npm i [tên package] --save-dev

Development dependencies package

Sau khi cài xong, bạn vào file package.json sẽ thấy có thêm 1 trường như này:

Development dependencies package

Cùng với việc thêm file package.json, khi bạn cài đặt package, project của bạn sẽ có thêm 1 folder có tên là node_modules, trong đó sẽ chứa tất cả các package đã được cài đặt.


4. Các loại Node Module Chuẩn

NodeJS Module là một thư viện Javascript, nó là một tập hợp các hàm (function) đối tượng và các biến, mà bạn có thể đưa vào ứng dụng của bạn để sử dụng. Sử dụng Module giúp đơn giản việc viết code, và quản lý code trong ứng dụng của bạn. Thông thường mỗi module sẽ được viết trong một tập tin riêng rẽ.

NodeJS đã xây dựng sẵn khá nhiều Module, nó các các thư viện chuẩn để bạn phát triển ứng dụng. Dưới đây là danh sách:

Module Description
assert Cung cấp tập hợp các assertion tests (Kiểm tra khẳng định)
buffer Để xử lý các dữ liệu nhị phân (binary data).
child_process Để chạy một tiến trình con (child process)
cluster Để tách một tiến trình (process) thành nhiều tiến trình.
crypto Chứa các hàm mã hóa OpenSSL (OpenSSL cryptographic functions)
dgram Cung cấp các thực hiện (implementation) cho UDP sockets
dns Cung cấp các chức năng để tìm kiếm (lookups) và phân giải (resolution) DNS.
events Để xử lý các sự kiện (events)
fs Để xử lý file system
http Để làm cho Node.js hoạt động như một HTTP server.
https Để làm cho Node.js hoạt động như một HTTPS server.
net Để tạo các server và các client.
os Cung cấp các thông tin về hệ điều hành.
path Để xử lý các đường dẫn file (file paths).
querystring Để xử lý URL query strings
readline Để xử lý các luồng dữ liệu (data streams) mà có thể đọc từng dòng (line) dữ liệu.
stream Xử lý các luồng dữ liệu (streaming data)
string_decoder Để giải mã (decode) đối tượng bộ đệm (buffer objects) thành string
timers Hẹn giờ để thực thi một hàm Javascript.
tls Để thực hiện các giao thức TLS & SSL.
tty Cung cấp các lớp được sử dụng bởi text terminal.
url Giúp phân tích (parse) các chuỗi URL (URL strings)
util Cung cấp các hàm tiện ích (Utility functions).
v8 Truy cập vào các thông tin của V8 JavaScript engine.
vm Biên dịch (compile) mã JavaScript trong máy ảo (Virtual machine)
zlib Xử lý nén và giải nén các tập tin.