[Dev Weekend] แก้ปัญหา relative paths สุดรุงรัง กันเหอะ nodejs (../../../../../fck !)

เคยไหม พอเริ่มสร้าง module เพิ่มไปเรื่อยๆ แล้วอยากใช้ของบางอย่างเช่น ฟังชั่น, ตัวแปร ของ module อื่นๆ เราก็ต้องมา import หรือ require มัน ทีนี้ถ้าเราโค้ดปกติแบบไม่คิดอะไรเลย เราก็คงจะเจอ case “../../../xxx” ซึ่งพอทำไปเรื่อยๆมันชักจะน่ารำคาญแล้ว แล้วเราก็จะเจอปัญหาอีก เมื่อเราต้องการย้าย path ของ function หรือ variables ที่มีหลาย module เรียกใช้อยู่ ทีนี้แหละตามแก้กันเมื่อยเลย

ทีนี้มาแก้ปัญหานี้กันดีกว่า ให้นั่งคิดเองเล่นๆก็คงต้องสร้างตัวแปรเป็น base path ไว้ซักตัว ผมก็เลยลอง search ดูแล้วก็เจออันนี้ https://gist.github.com/branneman/8048520

มีวิธีแก้หลายวิธีเลย ผมรู้สึกชอบวิธีที่ 2 มากที่สุดก็คือ สร้างตัวแปร global basepath ไว้ใช้แค่นั้น

วิธีสร้างก็แค่ประกาศ

global.__BASEPATH = __dirname + '/';

เราก็จะได้ตัวแปร __BASEPATH ที่เป็นตัวแปร global ที่ไว้ใช้ที่ไหนก็ได้

ส่วน _dirname คือจะส่งค่า path ปัจจุบัน ของ file ที่รันคำสั่งนี้

ส่วนตอนเรียกใช้ก็แค่

const {xxxx} = require(__BASEPATH + '/xxx/aaa')

ทีนี้วันหนึ่งเราเปลี่ยน basepath ตรงไหนก็แค่มาโค้ดที่ global.__BASEPATH นี้เท่านั้นก็เป็นอันจบ

ที่สำคัญอย่าลืมว่าก่อนจะใช้ ตัวแปร __BASEPATH ได้ โค้ดนี้

 global.__BASEPATH = __dirname + '/';

ต้องถูกเรียกใช้ก่อนนะ

Show your support

Clapping shows how much you appreciated MiBu Kenshero’s story.