[NodeJS] Bỏ cách viết đường dẫn /…/ quá sâu được rồi đấy ^^

0

Đã bao giờ bạn gặp phải đoạn mã khi require(...) một module như này chưa?

const Article = require('../../../../app/models/article');

Mình tin là 96% là bạn đã từng hoặc đã gặp nó trong các dự án Javascript nói chung, NodeJS nói riêng rồi đấy.

Bởi vì nó đơn giản, dễ viết, khỏi cần cấu hình gì cả.

Dấu hai chấm (../) trong ví dụ trên là cách viết đường dẫn tương đối (Module Path) từ một thư mục tới thư mục đích. Bạn hiểu đơn giản là cứ mỗi dấu (../) là lùi về thư mục cha. Để dễ hình dung, giả sử mình có một cấu trúc thư mục cho dự án như sau:

src
  └── modules/
      ├── mainApp
      │   └── view  ============= Cứ lùi một cấp thư mục là một dấu  (../)
│		└── main.js   ============= Bạn đang ở đây. 
│
└── plugins
    └── very-important-plugins
        └── models
            └── DBUtils.js

Tại main.js, mình muốn require(...) DBUtils. Vậy để trỏ tới được DBUtils, bạn cần phải lùi tới thư mục modules, rồi mới tiến tới thư mục plugins và đi sâu vào trong. Kết quả sẽ có câu lệnh require(...) như sau:

const DBUtils = require('../../plugins/very-important-plugins/models/DBUtils.js')

Tuy nhiên, sẽ chẳng có gì đáng nói nếu dự án bắt đầu phức tạp dần, cấu trúc thư mục bắt đầu lằng nhằng hơn, bạn sẽ cần phải require(...) cùng module đó ở những nơi khác nhau. Thế là bạn cứ phải dò lại xem mình đang ở thư mục nào, cần mấy dấu hai chấm (..) để trỏ tới đúng thư mục chứa module cần require(...).

Dưới đây là cách để bạn khắc phục nhược điểm của cách viết trên.

Sử dụng module Alias

Ý tưởng để khắc phục nhược điểm của cách viết trên là chúng ta sẽ viết đường dẫn mà điểm xuất phát luôn là thư mục root của dự án, ví dụ thư mục src/ (hoặc một thư mục nào đó mà bạn chỉ định trước). Từ đó, bạn sẽ không cần lùi thư mục về thư mục cha nữa.

Kiểu như khi bạn ở lưng chừng núi, bạn sẽ không cần phải leo lên đỉnh núi rùi mới đi xuống chỗ cần tới. Thay vào đó, bạn luôn luôn ở trên đỉnh núi, cần là xuống tới đúng chỗ luôn.

Có một package hỗ trợ bạn làm điều đó dễ dàng. Đó là module-alias.

Cài đặt:

npm i --save module-alias

Thêm cấu hình trong package.json

{
    "_moduleAliases": {
        "@": "src",
        "@libs": "src/modules/plugins"
    }
}

Như cách cấu hình trên, ký tự @ là sẽ trở tới thư mục src/, @libs là trỏ tới thư mục src/plugins.

Ok, giờ chúng ta sử dụng thôi. Như ví dụ trên, chúng ta có thể chuyển thành như sau:

const DBUtils = require('@libs/very-important-plugins/models/DBUtils.js')

hoặc

const DBUtils = require('@/modules/plugins/very-important-plugins/models/DBUtils.js')

Với cách viết này, bạn có thể copy và sử dụng ở bất kỳ file nào khác cũng được, không cần quan tâm tương quan cấu trúc thư mục hiện tại và thư mục đích nữa.

Mình hi vọng, với thủ thuật nhỏ về Module Path trên sẽ có ích cho dự án của bạn. Đừng quên để lại một comment khích lệ nhé ^^

💦 Đọc thêm về NodeJS:

Dịch vụ phát triển ứng dụng mobile giá rẻ - chất lượng

Bình luận. Cùng nhau thảo luận nhé!

avatar
  Theo dõi bình luận  
Thông báo