0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

31 gói npm có thể thay thế bằng API Node.js

Đăng vào 3 tháng trước

• 5 phút đọc

Giới thiệu

Khi tôi bắt đầu làm việc tại Lingo.dev, tôi nhận thấy rằng một số phụ thuộc của chúng tôi là thừa thãi và có thể được thay thế bằng các API Node.js gốc. Điều này khiến tôi tự hỏi có những gói nào khác không còn cần thiết trong các mã nguồn hiện đại, vì vậy tôi đã tổng hợp danh sách lớn các gói mà bạn có thể không cần.

Lưu ý: Các API gốc không phải lúc nào cũng là sự thay thế trực tiếp cho các gói hiện có, vì vậy như với bất kỳ quyết định kỹ thuật nào, lựa chọn đúng phụ thuộc vào ngữ cảnh.

1. chalk (319.8M lượt tải tuần)

Hàm util.styleText() của Node thêm màu sắc và kiểu dáng cho đầu ra console. Nó hỗ trợ các kiểu ANSI tiêu chuẩn như đậm, gạch chân và màu sắc. API này đơn giản và không cần phụ thuộc.

javascript Copy
import { styleText } from 'node:util';

console.log(styleText('green', '✔ done'));
console.error(styleText('bold', styleText('red', 'error')));

Để tìm hiểu thêm, xem util.styleText().

2. readable-stream (185.6M lượt tải tuần)

Module stream cốt lõi là ổn định và đầy đủ tính năng. Nó hỗ trợ các iterator bất đồng bộ và bao gồm các trợ giúp dựa trên Promise trong stream/promises. Hầu hết các vấn đề tương thích với stream đã được giải quyết.

javascript Copy
import { pipeline } from 'node:stream/promises';
import { createReadStream, createWriteStream } from 'node:fs';

await pipeline(
  createReadStream('in.txt'),
  createWriteStream('out.txt')
);

Để tìm hiểu thêm, xem Node.js Streams.

3. safe-buffer (164.1M lượt tải tuần)

Node hiện đại sử dụng các constructor buffer an toàn theo mặc định. Buffer.from()Buffer.alloc() ngăn chặn các vấn đề bảo mật phổ biến. Hàm không an toàn new Buffer() đã bị loại bỏ.

javascript Copy
const buf = Buffer.from('hello', 'utf8');

Để tìm hiểu thêm, xem Buffer.

4. isarray (132.0M lượt tải tuần)

Array.isArray() là cách tiêu chuẩn để kiểm tra mảng. Nó đã có trong JavaScript từ ES5.

javascript Copy
if (Array.isArray(value)) {
  // xử lý mảng
}

Để tìm hiểu thêm, xem Array.isArray().

5. fs-extra (113.3M lượt tải tuần)

Cốt lõi fs giờ đây bao gồm các phương thức tiện lợi mà fs-extra đã phổ biến. fs.cp xử lý việc sao chép đệ quy, fs.rm thực hiện việc xóa mạnh mẽ và fs.mkdir tạo các thư mục cha. Các biến thể Promise sống trong node:fs/promises.

javascript Copy
import { cp, rm, mkdir } from 'node:fs/promises';

await mkdir('dist', { recursive: true });
await cp('assets', 'dist/assets', { recursive: true });
await rm('dist/tmp', { recursive: true, force: true });

Để tìm hiểu thêm, xem Hệ thống Tập tin.

6. uuid (161.3M lượt tải tuần)

crypto.randomUUID() tạo ra UUID phiên bản 4 theo RFC-4122. Cách triển khai này là bảo mật về mặt mật mã và không cần phụ thuộc.

javascript Copy
import { randomUUID } from 'node:crypto';

const id = randomUUID();

Để tìm hiểu thêm, xem crypto.randomUUID().

7. glob (208.5M lượt tải tuần)

Node bao gồm fs.glob() để khớp mẫu trong hệ thống tập tin. Nó trả về một iterator bất đồng bộ mà trả về các đường dẫn phù hợp. API hỗ trợ các mẫu glob tiêu chuẩn.

javascript Copy
import { glob } from 'node:fs/promises';

for await (const file of glob('src/**/*.ts')) {
  console.log(file);
}

Để tìm hiểu thêm, xem fsPromises.glob().

8. ws (117.3M lượt tải tuần)

Hỗ trợ khách hàng WebSocket được tích hợp sẵn trong Node như một toàn cục. API này tương thích với trình duyệt, vì vậy bạn có thể kết nối tới các điểm cuối WS và WSS mà không cần gói bổ sung.

javascript Copy
const ws = new WebSocket('wss://echo.websocket.events');

ws.onopen = () => ws.send('hello');
ws.onmessage = (ev) => console.log('echo:', ev.data);

Để tìm hiểu thêm, xem WebSocket.

9. qs (100.7M lượt tải tuần)

URLSearchParams của WHATWG tạo và tuần tự hóa các chuỗi truy vấn một cách an toàn. Nó kết hợp tự nhiên với constructor URLfetch().

javascript Copy
const params = new URLSearchParams({ q: 'node', page: '1' });
const url = new URL('https://api.example.com/search');
url.search = params.toString();

const res = await fetch(url);

Để tìm hiểu thêm, xem URLSearchParams.

10. rimraf (97.9M lượt tải tuần)

Sử dụng fs.rm với { recursive: true, force: true } để xóa thư mục đa nền tảng. Nó xử lý các thư mục không rỗng và các đường dẫn bị thiếu một cách dễ dàng.

javascript Copy
import { rm } from 'node:fs/promises';

await rm('build', { recursive: true, force: true });

Để tìm hiểu thêm, xem fs.rm().

Các thực tiễn tốt nhất

  • Kiểm tra hiệu suất: Trước khi thay thế các gói, hãy kiểm tra hiệu suất của API gốc so với gói. Một số gói có thể tối ưu hơn trong một số tình huống nhất định.
  • Đọc tài liệu: Đảm bảo rằng bạn đã đọc tài liệu chính thức để hiểu rõ hơn về cách sử dụng các API gốc.
  • Bảo trì mã: Luôn kiểm tra và cập nhật mã của bạn để đảm bảo rằng nó tận dụng tốt nhất các API mới.

Các vấn đề thường gặp

  • Khó khăn trong việc chuyển đổi mã cũ: Một số gói có thể yêu cầu nhiều thay đổi trong mã nguồn của bạn. Hãy chuẩn bị cho việc này và thử nghiệm kỹ lưỡng.
  • Thiếu tính năng: Một số API gốc có thể không cung cấp tất cả các tính năng mà gói trước đó cung cấp. Hãy đảm bảo rằng bạn đã tìm hiểu kỹ trước khi thực hiện thay đổi.

Mẹo hiệu suất

  • Tránh lạm dụng Promise: Mặc dù Promise rất hữu ích, hãy sử dụng chúng một cách hợp lý để tránh làm chậm mã của bạn.
  • Tối ưu hóa I/O: Sử dụng các phương thức không đồng bộ và stream để xử lý I/O hiệu quả hơn.

Kết luận

Việc thay thế các gói npm bằng các API Node.js gốc có thể giúp giảm bớt phụ thuộc và cải thiện hiệu suất của ứng dụng. Tuy nhiên, điều quan trọng là phải đánh giá cẩn thận từng trường hợp cụ thể và đảm bảo rằng bạn hiểu rõ các API mà bạn đang sử dụng. Hãy bắt đầu tối ưu hóa mã của bạn ngay hôm nay và khám phá khả năng của Node.js!

Câu hỏi thường gặp

1. Tại sao tôi nên thay thế các gói npm bằng các API Node.js gốc?
Việc này giúp giảm số lượng phụ thuộc, cải thiện hiệu suất và bảo mật của ứng dụng.

2. Có rủi ro nào khi chuyển từ gói npm sang API gốc không?
Có thể có rủi ro về tính năng hoặc hiệu suất nếu API gốc không đáp ứng được nhu cầu của ứng dụng bạn.

3. Làm thế nào để tôi biết khi nào nên thay thế một gói npm?
Hãy xem xét hiệu suất, tính năng và độ phổ biến của các gói mà bạn đang sử dụng. Nếu có API gốc tốt hơn, hãy thử nghiệm và đánh giá.

4. Tôi có thể tìm thêm thông tin ở đâu?
Tài liệu chính thức của Node.js là nơi tốt nhất để tìm hiểu về các API gốc và cách sử dụng chúng.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào