Đóng gói Ứng dụng Nodejs bằng PKG như thế nào?

Việc đóng gói ứng dụng Node.js bằng pkg có thể hiểu là việc bạn muốn viết một Ứng dụng Node.js hoàn chỉnh và sau đó biên dịch nó thành file .exe hoặc binary chạy trên môi trường độc lập (1 máy khác không cần cài Node). Hôm nay, mình sẽ hướng dẫn bạn chi tiết từng bước xây dựng 1 ứng dụng nodejs nho nhỏ và biên dịch nó bằng pkg để chạy mượt trên mọi nền tảng khác.

Đóng gói ứng dụng Nodejs bằng PKG “siêu hay”

PKG là một công cụ giúp bạn đóng gói ứng dụng Node.js thành một file nhị phân chạy được mà không cần cài Node.js trên máy đích. Để biên dịch ứng dụng Node.js thành file thực thi (exe hoặc binary) bằng công cụ pkg, bạn hãy làm theo các bước dưới đây.

Bước 1: Xây dựng ứng dụng Node.js

– Bạn tạo một file index.js cho ứng dụng Node của bạn như ví dụ dưới đây. Đây là một đoạn chương trình hiển thị ra màn hình dòng chữ “Chào bạn”

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Chào bạn từ ứng dụng Web Node.js!');
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server đang chạy tại http://localhost:${PORT}`);
});

– Tạo package.json để cấu hình ứng dụng của bạn.

npm init -y

Cập nhật package.json của bạn:

{
  "name": "my-app",
  "version": "1.0.0",
  "bin": "index.js",
  "scripts": {},
  "dependencies": {
    "express": "^4.18.0"   // nếu bạn dùng Express
  },
  "pkg": {
    "assets": [],
    "scripts": []
  }
}

Chú ý: bin dùng để nói với pkg đâu là entry point (tập tin chính ở đây là index.js).

Bước 2: Cài đặt thư viện và PKG

Tiến hành cài đặt các thư viện cần thiết.

npm install
npm install -g pkg

Chạy lệnh sau để tạo file thực thi

pkg . --targets node18-win-x64,node18-linux-x64,node18-macos-x64

Kết quả: tạo ra các file .exe hoặc .bin tương ứng với hệ điều hành.

Tổng kết và Lưu ý

Xíu tí là PKG chỉ hoạt động tốt trên Node phiên bản 18 đổ xuống thôi nhé anh em.

Nếu app của bạn có các file .html, .json, .txt,… thì bạn cần thêm vào phần pkg.assets trong package.json, ví dụ:

"pkg": {
  "assets": [
    "public/**/*",
    "config/*.json"
  ]
}

Sử dụng file ngoài ở runtime dùng path.join(__dirname, ‘…’) thay vì ./

Đưa vào terminal chạy thử:

./my-app-win.exe    # trên Windows
./my-app-linux      # trên Linux

Thư viện PKG có tại đây