10 gợi ý thực tiễn để đóng gói ứng dụng Node.js với pkg

pkg là công cụ dòng lệnh giúp biên dịch ứng dụng Node.js cùng các module phụ thuộc thành tệp binary độc lập, cho phép chạy trên máy đích mà không cần cài đặt sn Node.js. Dưới đây là 10 gợi ý để sử dụng pkg một cách hiệu quả.

1. Cài đặt toàn cục và kiểm tra phiên bản

npm install -g pkg
pkg --version

2. Sử dụng lệnh đóng gói tối thiểu

Trỏ trực tiếp đến file khởi chạy hoặc file package.json:

pkg src/main.js
# hoặc
pkg package.json

3. Chọn nền tảng đích rõ ràng

Tham số --targets cho phép tạo binary cho nhiều hệ điều hành trong một lần chạy:

pkg package.json --targets node20-win-x64,node20-linux-x64,node20-macos-arm64

4. Định nghĩa thư mục đầu ra

Sử dụng --out-path để giữ cấu trúc dự án gọn gàng:

pkg package.json --out-path bin

5. Đóng gói tài nguyên tĩnh

Khai báo các tài nguyên như template, ảnh hoặc file cấu hình trong package.json:

{
  "pkg": {
    "assets": [
      "resources/**/*",
      "templates/*.html",
      "locales/*.json"
    ]
  }
}

Khi chạy binary, nên truy xuất tài nguyên qua __dirname thay vì đường dẫn tương đối từ thư mục làm việc hiện tại.

6. Xử lý module được require động

Nếu ứng dụng load module theo điều kiện, hãy khai báo rõ các file đó để pkg nhận diện:

{
  "pkg": {
    "scripts": [
      "src/drivers/**/*.js",
      "src/plugins/**/*.js"
    ]
  }
}

7. Giảm thiểu kích thước binary

  • Chọn phiên bản Node runtime phù hợp, tránh target thừa.
  • Loại bỏ source map và log gỡ lỗi khi build sản phẩm.
  • Nén ảnh, font và các tài nguyên tĩnh trước khi đưa vào assets.

8. Gỡ lỗi đóng gói với chế độ chi tiết

pkg --debug package.json

Log chi tiết sẽ giúp xác định file bị thiếu hoặc đường dẫn không hợp lệ trong quá trình đóng gói.

9. Tập trung cấu hình trong package.json

{
  "name": "invoice-cli",
  "version": "1.0.0",
  "bin": "src/main.js",
  "pkg": {
    "targets": [
      "node20-linux-x64",
      "node20-win-x64"
    ],
    "assets": [
      "resources/**/*"
    ],
    "scripts": [
      "src/extensions/**/*.js"
    ]
  }
}

Sau khi cấu hình, chỉ cần chạy pkg package.json là đủ.

10. Tự động hóa bằng npm scripts

{
  "scripts": {
    "build:win": "pkg package.json --targets node20-win-x64 --out-path bin",
    "build:linux": "pkg package.json --targets node20-linux-x64 --out-path bin",
    "build:all": "pkg package.json --targets node20-win-x64,node20-linux-x64,node20-macos-arm64 --out-path bin"
  }
}

Chạy npm run build:all để tạo binary cho các nền tảng cần thiết một cách thống nhất.

Thẻ: pkg Node.js binary executable npm-scripts

Đăng vào ngày 7 tháng 8 lúc 12:03