Đóng gói ứng dụng Nodejs với npm

Một ứng dụng nodejs thông thường liên kết với rất nhiều module từ nhiều nguồn khác nhau.

Mỗi lần cài đặt một ứng dụng thì ngoài tải về các module của ứng dụng đó còn phải tải về nhiều module phụ thuộc khác. Nếu mỗi ứng dụng cài đặt trong một thư mục khác nhau thì có thể phải tải về các module phụ thuộc trùng lặp nhưng nằm ở các vị trí khác nhau, làm lãng phí không gian đĩa. Có thể tránh điều này bằng cách cài đặt tất cả ứng dụng nodejs vào cùng một thư mục, khi đó chúng chia sẻ các module phụ thuộc ở thư mục con node_modules, tuy cũng có nhiều bất tiện. Ngay cả tìm cách đóng gói ứng dụng trong file exe cũng chỉ che dấu chứ không tránh được việc lãng phí không gian đĩa.

Khi phân phối ứng dụng nodejs, chỉ cần đóng gói các file/module của mình. Các module khác có thể tải về từ các nguồn khác thì không bao gồm trong gói phân phối mà đặt chỉ dẩn để npm tải về.

Đóng gói ứng dụng nodejs

Thí dụ với ứng dụng onvif-motion-recorder, tổng cộng chỉ có 4 file, nếu không tính các module phụ thuộc

# tree
.
├── imou.js
└── lib
    ├── fRec.js
    ├── pMotionRecorder.js
    └── sMotionRecorder.js

1 directory, 4 files

Bước 1/2: Tạo file package.json mô tả về ứng dụng

Chuyển vào thư mục ứng dụng và chạy lệnh

# npm init

Điền thông tin theo hướng dẫn. Sai cũng không sao vì đây là file text, có thể chỉnh sửa dễ dàng.

Bước 2/2: Tạo file package-lock.json

Xem trong mã nguồn ứng dụng của mình có dùng module ngoài nào (require path/to/module.js), bỏ qua các module hệ thống của nodejs. Chạy lệnh cài đặt, thí dụ onvif

npm install --save onvif

Ngoài việc tải về onvif, npm còn tải về tất cả các module phụ thuộc và ghi chép vào file package-lock.json, cũng như cập nhật vào file package.json

Lần lượt cài đặt tất cả module phụ thuộc trong ứng dụng của mình. Các module này được lưu trong thư mục node_modules, tham chiếu đến các module này không cần có đường dẫn. Với mục đích đóng gói để cài đặt, chúng ta chỉ phân phối các file ứng dụng của mình và 2 file json vừa được tạo, do vậy xóa thư mục node_modules đi.

# tree
.
├── imou.js
├── lib
│   ├── fRec.js
│   ├── pMotionRecorder.js
│   └── sMotionRecorder.js
├── package.json
└── package-lock.json

1 directory, 6 files

Nén thư mục ứng dụng bằng tar hay zip và phân phối đến người dùng.

Sử dụng

Người dùng giải nén ra và vào thư mục ứng dụng chạy lệnh

npm i

npm sẽ đọc các file json để tải về các module phụ thuộc.

# tree
.
├── imou.js
├── lib
│   ├── fRec.js
│   ├── pMotionRecorder.js
│   └── sMotionRecorder.js
├── node_modules
│   ├── lodash.get
│   │   ├── index.js
│   │   ├── LICENSE
│   │   ├── package.json
│   │   └── README.md
│   ├── nimble
│   │   ├── index.html
│   │   ├── LICENSE
│   │   ├── Makefile
│   │   ├── nimble.js
│   │   ├── nimble.min.js
>>>>-~-~-~ cắt -~ bớt -~ một -~ đoạn -~-~-~<<<<
│       │   ├── XMLStreamWriter.js
│       │   ├── XMLStringifier.js
│       │   ├── XMLStringWriter.js
│       │   ├── XMLText.js
│       │   ├── XMLTypeInfo.js
│       │   ├── XMLUserDataHandler.js
│       │   └── XMLWriterBase.js
│       ├── LICENSE
│       ├── package.json
│       ├── README.md
│       └── typings
│           └── index.d.ts
├── package.json
└── package-lock.json

17 directories, 198 files

Xong rồi, chạy ứng dụng

node imou.js

Comments Off on Đóng gói ứng dụng Nodejs với npm

Filed under Software

Comments are closed.