Node.js & Typescript: Modules, Tham số dòng lệnh và Hệ thống Tập tin

Node.js & Typescript: Modules, Tham số dòng lệnh và Hệ thống Tập tin

Trước tiên hãy làm rõ khái niệm: Nodejs là là một môi trường có thể chạy JavaScript bên ngoài trình duyệt và điều đó có nghĩa là sau khi  cài đặt Node.js , bạn có thể khởi động terminal và thực thi mã JavaScript!

Nếu bạn đã từng sử dụng node thì có thể kiểm tra bằng câu lệnh dưới đây trong terminal, hoặc không hay cài đặt Node.js theo tài liệu của nó.

Modules

Bây giờ chúng ta tìm hiểu cách các module Node.js hoạt động và cách sử dụng chúng, hãy nhìn vào ví dụ dưới đây:

// main.js

console.log('Hello');
return;
console.log('world!');

Và kết quả khi chạy file trên là:

Hello

Theo ECMA 262 thì đoạn code trên có lẽ đã lỗi cú pháp

An ECMAScript program is considered syntactically incorrect if it contains a return statement that is not within a FunctionBody. A return statement causes a function to cease execution and return a value to the caller. If Expression is omitted, the return value is undefined. Otherwise, the return value is the value of Expression.

Nhung khi chạy nó, không có lỗi nào được thông báo và trình đã trả ra kết quả "Hello" . Lý giải cho việc này là thực tế trong Node.js mỗi tệp đưuọc coi là 1 module riêng biệt. Bên trong, Node.js gói chúng thành một hàm như thế này

function (exports, require, module, __filename, __dirname) {
  // logic code của module
}

Nhờ vậy, các biến cấp cao được giới hạn trong module mà không phải là toàn cục của dự án, các module khác không thể truy cập các biến, hàm, ... của module khác.

Node.js sử dụng hệ thống module để tổ chức mã nguồn. Mỗi file .ts hoặc .js được coi là một module riêng biệt.

Để chia sẻ chức năng giữa các module, chúng ta sử dụng exportimport:

// utils.js
export function add(a,b) {
    return a + b;
}

function subtract (a, b) {
  return a - b;
}
 
module.exports = {
  add,
  subtract,
};

// main.js

// app.js
const { add } =require('./math');

console.log(add(2, 3)); // Output: 5

Node.js gọi hàm bao bọc module của chúng ta theo cách mà từ khóa “ this ” tham chiếu đến  module.exports . Chúng ta có thể dễ dàng chứng minh rằng:

console.log(this === module.exports); // output: true

Những điều trên thường gây nhầm lẫn vì nếu bạn chạy Node.js trong bảng điều khiển, từ khóa “ this ” sẽ tham chiếu đến  đối tượng toàn cục .

Tham số dòng lệnh

Node.js cung cấp process.argv để truy cập các tham số dòng lệnh:

// args.js
console.log(process.argv);

Khi chạy node args.js hello world, bạn sẽ nhận được:

[
  '/path/to/node',
  '/path/to/args.js',
  'hello',
  'world'
]
  • Tham số thứ 0 là đường dẫn đến Node.js
  • Tham số thứ 1 là đường dẫn đến script
  • Các tham số tiếp theo là những gì bạn truyền vào dòng lệnh

Bắt đầu với Typescript

Hãy tạo một thư mục my-project và cài đặt các package cần thiết.

// bash
mkdir my-project
cd my-project

npm init -y

npm install -D typescript @types/node ts-node

Thiết lập file tsconfig.json

{
  "compilerOptions": {
    "sourceMap": true,
    "target": "es2017",
    "alwaysStrict": true,
    "noImplicitAny": true,
  },
  "exclude": [
    "node_modules"
  ]
}

Bạn có thể truy cập tài liệu của typescript để thực hành nhiều hơn.

Làm việc với File System

Node.js cung cấp module fs để tương tác với hệ thống tập tin.

Đọc tập tin.

// file.helper.ts
import * as fs from 'fs';

fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

Ghi tập tin

// file.helper.ts

...

fs.writeFile('example.txt', 'Hello, world!', (err) => {
  if (err) throw err;
  console.log('File has been saved!');
});

Tổng kết

Chúng ta đã tìm hiểu cách:

  • Sử dụng module trong Node.js với TypeScript
  • Xử lý tham số dòng lệnh
  • Tương tác cơ bản với hệ thống tập tin

Những kiến thức này là nền tảng vững chắc để xây dựng các ứng dụng Node.js mạnh mẽ và hiệu quả.