command-line

Creating command-line (Vietnamese)-Part I

Trong bài viết này mình sẽ viết về 1 số ứng dụng của command-line trong lập trình để tăng năng suất công việc cũng như nâng cao kiến thức cho bản thân và người đọc, hy vọng bạn đọc thấy hay và theo dõi.

Command-line Overall

Trong bài viết này, mình sẽ sử dụng nodeJS để viết 1 command-line đơn giản nhất có thể

và sẽ phát triển từng tính năng 1 để giữ cho bạn đọc cảm thấy dễ hiểu và ghi nhớ lâu hơn lí do mình sử dụng những thư viện đi kèm theo project.

Command-line Basic

Tạo mới thư mục (hello-cli)

Terminal di chuyển vào thư mục và chạy npm init

Tạo file index với cấu trúc sau bin/index.js

Chỉnh sửa lại file package.json với nội dung của “main” : “./bin/index.js”

Thêm đoạn code sau vào file package.json:

"bin": {
    "hello": "./bin/index.js"
  }

Câu lệnh “hello” sẽ là câu lệnh để bạn chay cli này và bạn có thể đổi tên theo cách bạn muốn,

mẹo là sử dụng những câu lệnh ngắn gọn xúc tích và dễ nhớ.

Bạn có thể làm giống y hệt code của mình hoặc chỉnh sửa về sau tùy theo nhu cầu sử dụng

Sau khi hoàn thành các bước trên thư mục và file package.json của bạn nên giống như sau:

file-structure
file structure
package.json
package.json

Sau đó bạn thêm nội dung cho file index với các dòng code sau

#!/usr/bin/env node

console.log( "Hello!" );

Dòng đầu tiên bắt đầu với  “#!"được gọi là shebang line.

Shebang line dùng để xác định đường dẫn tuyệt đối cho interpreter chạy dòng lệnh trên.

Để cài đặt và chạy dòng lệnh, môi trường node bắt buộc cần câu lệnh này đối với Windows và MacOS.

Tiếp theo bạn chỉ cần mở terminal tại thư mục hello-cli và nhập câu lệnh

npm install -g .

Nếu bạn sử dụng MacOS hãy thêm “sudo” ở đầu câu lệnh để sử dụng quyền root

Giờ bạn có thể thử command “hello” ở bất cứ đâu trong máy bạn và câu lệnh sẽ đơn giản in ra dòng log “Hello!”

command-line
terminal

CLI Arguments

Câu lệnh của mình đã hoạt động và giờ mình sẽ cùng bạn thêm 1 số chức năng cho câu lệnh

Mình sẽ sử dụng npm package “yargs” để thực hiện việc này.

Đầu tiên, bạn cài đặt câu lệnh

npm i yargs

Khai báo yargs ở đầu file

const yargs = require("yargs");

const usage = "\nUsage: hello <your_name> sentence to greet";

const options = yargs
  .usage(usage)
  .option("l", {
    demandOption: false,
  })
  .help(true).argv;

Đồng thời thêm options để có câu lệnh –help trả hướng dẫn sử dụng và –version

Tiếp theo kiểm tra input người dùng bằng cách thêm đoạn code sau

if (yargs.argv._[0] == null) {
  console.log(usage);
  return;
}

Sau khi người dùng nhập đủ yêu cầu input (vd: “hello Dexter”)

Ta khai báo 1 số biến để sử dụng

let arrayGreet = ["Whats up ", "Hi there ", "How you doing "];

let randomNumb = Math.floor(Math.random() * 3);

let greetWay = arrayGreet[randomNumb];

Đây là những câu lệnh khai báo Javascript cơ bản,

Ta có 1 mảng các câu chào prefix, 1 số ngẫu nhiên từ 0-2 và sau đó ta có câu chào ngẫu nhiên.

Cuối cùng ta khai báo thêm 1 hàm xử lí dữ liệu tên người dùng đã nhập

const parseName = (words) => {
  let sentence = "";
  for (let i = 0; i < words.length; i++) {
    sentence = sentence + words[i] + " ";
  }
  return sentence;
};

Hàm parseName nhận vào 1 mảng các từ (tên người dùng đã nhập có thể có 1 hoặc nhiều chữ)

và trả về 1 đoạn string tên đầy đủ.

Phía dưới ta chỉ đơn giản in kết quả bằng console.log()

console.log(greetWay + parseName(yargs.argv._));

Sau khi hoàn thành từng bước file của bạn nên giống như sau:

index.js
index.js complete

Giờ bạn chỉ đơn giản lưu lại file và test thử cli mình vừa hoàn thành

command-line
terminal final test

Conclusion

Mình biết bài viết còn khá căn bản và chưa có nhiều tính năng nhưng mình mong bạn đọc có trải nghiệm tốt và hãy comment ở dưới để tạo động lực cho mình viết phần tiếp theo nhé!

Ở phần tiếp theo mình sẽ cùng các bạn xử lí những dữ liệu phức tạp hơn đồng thời sẽ tạo giao diện đẹp hơn cho cli của riêng bạn!

Cảm ơn bạn vì đã đọc tới đây và nếu có bất cứ thắc mắc gì đừng ngại comment ở phía dưới mình sẽ giải đáp sớm nhất có thể!

Leave a Comment

Your email address will not be published. Required fields are marked *