npm: nền tảng, trình quản lý gói cho React Native và Node.js

Tác giả: IT Sectr Đã đăng: 2026-02-13 Thời gian đọc: 10 phút

npm (Node Package Manager) là trình quản lý gói tiêu chuẩn cho nền tảng Node.js, đi kèm trong bộ cài đặt Node.js. npm quản lý các phụ thuộc của dự án JavaScript và TypeScript: cài đặt thư viện vào node_modules, cập nhật phiên bản gói, giải quyết xung đột phiên bản. package.json là tệp cấu hình trung tâm chứa siêu dữ liệu và danh sách phụ thuộc. npm Registry là kho lưu trữ gói lớn nhất. Tìm hiểu thêm tại npm Registry.

Những điểm chính

  • npm — trình quản lý gói tiêu chuẩn của Node.js, đi kèm với Node.js từ phiên bản 0.6.3
  • package.json — tệp cấu hình dự án với các phụ thuộc, tập lệnh và siêu dữ liệu
  • npm install — lệnh cơ bản để cài đặt phụ thuộc từ package.json vào thư mục node_modules
  • package-lock.json — tệp khóa phiên bản chính xác để cài đặt tái tạo trong mọi môi trường
  • npm ci — lệnh CI/CD cài đặt gói một cách nghiêm ngặt theo tệp khóa mà không cập nhật nó

npm là gì — trình quản lý gói Node.js?

npm được tạo ra vào năm 2010 bởi Isaac Schlueter như một giải pháp quản lý phụ thuộc Node.js. Từ năm 2014, npm được quản lý bởi npm, Inc., được Microsoft/GitHub mua lại vào năm 2020. Công cụ này gồm hai phần: CLI (dòng lệnh) để cài đặt và quản lý gói, và Registry — kho trung tâm của tất cả các mô-đun đã xuất bản tại registry.npmjs.org.

npm Registry là kho lưu trữ gói lớn nhất: hơn 2 triệu gói và hơn 10 tỷ lượt tải xuống hàng tháng. Mỗi gói có phiên bản SemVer, mô tả, phụ thuộc, giấy phép và tác giả. Việc xuất bản gói riêng được thực hiện qua npm publish. npm hỗ trợ gói có phạm vi cho tổ chức (@scope/package), kho lưu trữ riêng và kiểm tra bảo mật tích hợp.

Node.js phiên bản 18+ bao gồm npm 9+ với hiệu suất được cải thiện, không gian làm việc cho monorepo và cơ chế phụ thuộc ngang hàng được thiết kế lại. Hệ sinh thái npm bao gồm JavaScript phía máy chủ, frontend (React, Vue, Angular), phát triển di động (React Native), công cụ xây dựng (Webpack, Vite) và tiện ích CLI. npm là kênh phân phối chính cho các thư viện JavaScript.

Các tính năng chính của npm

npm install — lệnh chính đọc package.json và package-lock.json để cài đặt tất cả phụ thuộc vào node_modules. Ở lần chạy đầu tiên, npm tính toán đồ thị phụ thuộc, giải quyết xung đột phiên bản và tạo package-lock.json. Lệnh npm install <package> cài đặt một gói cụ thể; cờ --save-dev thêm nó vào devDependencies, --global cài đặt toàn cầu.

npx — trình chạy gói đi kèm với npm từ phiên bản 5.2. npx cho phép chạy các tiện ích CLI mà không cần cài đặt toàn cầu: npx react-native init hoặc npx create-react-app my-app. npx tải gói vào bộ đệm tạm thời, chạy và dọn dẹp sau khi hoàn tất. npx cũng hữu ích để chạy các phiên bản công cụ cụ thể.

npm audit quét cây phụ thuộc để tìm các lỗ hổng đã biết từ cơ sở dữ liệu npm. Lệnh xuất báo cáo với mức độ nghiêm trọng (critical, high, moderate) và khuyến nghị npm audit fix để tự động cập nhật các gói dễ bị tổn thương. npm cache lưu trữ các gói đã tải xuống cục bộ. npm cache clean --force xóa bộ đệm khi gặp sự cố cài đặt. npm outdated hiển thị các gói đã lỗi thời.

bash
# Lệnh npm cơ bản
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Chạy mà không cần cài đặt toàn cầu
$ npx react-native init MyApp
# Kiểm tra bảo mật
$ npm audit --fix

Cấu trúc package.json và quản lý phụ thuộc

package.json là tệp JSON ở thư mục gốc của dự án mô tả siêu dữ liệu, phụ thuộc và cấu hình của nó. Các trường bắt buộc: name (tên gói duy nhất) và version (phiên bản SemVer, ví dụ 1.0.0). Tệp được tạo bằng npm init -y để khởi tạo nhanh hoặc thủ công.

Semantic Versioning (SemVer) là tiêu chuẩn đánh phiên bản theo định dạng MAJOR.MINOR.PATCH. Phiên bản chính thay đổi khi có thay đổi API không tương thích, phụ khi thêm chức năng (tương thích ngược), vá khi sửa lỗi. Ký hiệu ^ trước phiên bản cho phép cập nhật phụ và vá, ~ chỉ cho phép cập nhật vá.

json
{
  "name": "my-app",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios"
  },
  "dependencies": {
    "react": "^18.3.0",
    "react-native": "^0.76.0"
  },
  "devDependencies": {
    "typescript": "^5.5.0",
    "@types/react": "^18.3.0"
  }
}
TrườngMục đíchGiá trị ví dụ
scriptsLệnh chạy cho npm run"start": "node index.js"
dependenciesPhụ thuộc sản xuất của ứng dụng"react": "^18.3.0"
devDependenciesCông cụ phát triển và kiểm thử"jest": "^29.7.0"
peerDependenciesPhụ thuộc máy chủ cho thư viện"react": ">=17.0.0"
enginesYêu cầu phiên bản Node.js{"node": ">=18.0.0"}

npm trong phát triển React Native

Các dự án React Native sử dụng npm tích cực để quản lý phụ thuộc. Bộ tiêu chuẩn bao gồm react, react-native, thư viện điều hướng (React Navigation), thư viện HTTP (axios), quản lý trạng thái (Redux, Zustand) và thành phần giao diện người dùng. npm cho phép cài đặt hàng nghìn gói tương thích từ kho lưu trữ.

npx pod-install — lệnh bắt buộc sau khi cài đặt mô-đun gốc trong React Native cho iOS. npm tự động tạo Podfile.lock dựa trên package-lock.json. Trong dự án Expo, expo install được sử dụng thay vì npm install vì nó chọn phiên bản tương thích với phiên bản Expo SDK hiện tại.

Xung đột phiên bản là vấn đề phổ biến trong React Native: react-native-reanimated, react-native-gesture-handler và react-native-safe-area-context yêu cầu phiên bản đồng bộ. Giải pháp là cập nhật tất cả gói lên phiên bản tương thích mới nhất hoặc sử dụng --legacy-peer-deps. package-lock.json rất quan trọng cho các mô-đun gốc được biên dịch qua CocoaPods và Gradle.

So sánh npm với các trình quản lý thay thế

npm là trình quản lý gói tiêu chuẩn đi kèm với Node.js. Các thay thế chính: yarn (được Facebook tạo ra năm 2016) và pnpm (nhanh, với liên kết cứng). Từ npm 5, sự khác biệt về tốc độ và chức năng giữa npm và yarn là tối thiểu. npm 7+ đã thêm không gian làm việc, khiến nó cạnh tranh cho các monorepo.

Đặc điểmnpmyarnpnpm
Năm tạo201020162017
Tệp khóapackage-lock.jsonyarn.lockpnpm-lock.yaml
Cài đặtTuần tự (npm 5+)Song songSong song
Dung lượng đĩaTiêu chuẩnTiêu chuẩnTối thiểu (liên kết)
Không gian làm việcCó (npm 7+)
Plug'n'PlayKhôngKhông

Theo State of JS 2025: 62% nhà phát triển sử dụng npm, 35% sử dụng yarn (chủ yếu là dự án cũ và người hâm mộ PnP) và 3% sử dụng pnpm. Đối với dự án React Native, cả hai công cụ đều khả thi như nhau, nhưng npm phổ biến hơn trong các dự án sử dụng Expo SDK 50+ và các khởi tạo React Native mới.

yarn duy trì lợi thế trong các monorepo cực lớn (100+ gói) nhờ triển khai không gian làm việc trưởng thành hơn và Plug'n'Play. pnpm thắng về tiết kiệm dung lượng đĩa thông qua liên kết cứng đến kho lưu trữ toàn cầu. Việc chọn trình quản lý phụ thuộc vào sở thích của nhóm và cơ sở hạ tầng.

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

npm install và npm ci khác nhau thế nào?

npm install cập nhật package-lock.json và có thể cài đặt phiên bản phụ mới trong phạm vi ngữ nghĩa. npm ci (Clean Install) xóa node_modules và cài đặt gói một cách nghiêm ngặt từ package-lock.json mà không cập nhật nó. npm ci nhanh hơn, được sử dụng trong CI/CD và đảm bảo môi trường giống hệt nhau trên tất cả máy. Nếu thiếu package-lock.json, npm ci báo lỗi.

Làm thế nào để sửa xung đột phụ thuộc ngang hàng trong npm?

Từ npm 7, xung đột phụ thuộc ngang hàng gây ra lỗi xây dựng. Giải pháp: cập nhật tất cả gói lên phiên bản tương thích qua npm update, sử dụng cờ --legacy-peer-deps cho chế độ npm 6, hoặc thêm phần overrides trong package.json để buộc phiên bản gói cụ thể. Lựa chọn tốt nhất là cập nhật phụ thuộc lên phiên bản tương thích.

npm audit là gì và tại sao cần nó?

npm audit quét cây phụ thuộc để tìm lỗ hổng đã biết từ cơ sở dữ liệu npm Security Advisory. Lệnh xuất báo cáo với mức độ nghiêm trọng (critical, high, moderate, low) và khuyến nghị npm audit fix để tự động cập nhật các gói dễ bị tổn thương lên phiên bản an toàn. Chạy npm audit thường xuyên là thực hành bảo mật cơ bản cho dự án JavaScript.

Không gian làm việc npm đơn giản hóa monorepo thế nào?

Không gian làm việc npm cho phép quản lý nhiều gói trong một kho lưu trữ duy nhất. Thêm trường "workspaces": ["packages/*"] vào package.json gốc. Lợi ích: cài đặt một lần tất cả phụ thuộc vào node_modules dùng chung, liên kết tượng trưng tự động giữa các gói cục bộ, chạy tập lệnh cho tất cả gói từ thư mục gốc và loại bỏ trùng lặp phiên bản.

Tại sao phải commit package-lock.json vào kho lưu trữ?

package-lock.json khóa phiên bản chính xác của tất cả phụ thuộc và các gói truyền của chúng. Nếu không có nó, các nhà phát triển khác nhau và máy chủ CI có thể nhận được các phiên bản thư viện khác nhau trong phạm vi ngữ nghĩa, dẫn đến lỗi «chạy trên máy của tôi». Commit tệp khóa đảm bảo bản dựng tái tạo được và hành vi giống hệt nhau trên tất cả môi trường.

Tổng kết

  • npm — trình quản lý gói tiêu chuẩn của Node.js, đi kèm với Node.js từ phiên bản 0.6.3
  • package.json — tệp cấu hình dự án với các phụ thuộc, tập lệnh và siêu dữ liệu
  • npm install — cài đặt phụ thuộc, npm ci — cài đặt nghiêm ngặt từ package-lock.json cho CI/CD
  • package-lock.json — khóa phiên bản chính xác, bắt buộc cho bản dựng tái tạo được
  • npm Registry — kho lưu trữ gói lớn nhất với hơn 2 triệu mô-đun
  • npm audit — kiểm tra bảo mật phụ thuộc với sửa lỗ hổng tự động
  • Không gian làm việc npm — cơ chế quản lý monorepo với node_modules dùng chung

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm