โดยปกติในการสร้างเว็บไซต์เรามักจะมีการกำหนดข้อมูลส่วนกลางที่ต้องใช้ซ้ำ อาทิเช่น ชื่อเว็บไซต์, Url เริ่มต้น หรือข้อมูลพวก เบอร์โทร อีเมล์ ชื่อลิงค์ไปยังแฟนเพจ ทีนี้ถ้ามีหลายหน้าเกิดต้องเปลี่ยนข้อมูล เราก็ต้องไปเปลี่ยนทุกหน้า ซึ่งอาจจะแก้ไขไม่ครบได้ มาดูวิธีการกันครับ

แบบที่ 1 กำหนด Environment variables ไฟล์ next.config.js

เพื่อความสะดวกเราจะใช้ Environment variables ร่วมกับ next.config.js เพื่อไว้เก็บค่าข้อมูลดังกล่าว เวลาแก้ไขจะได้มาแก้ที่ next.config.js นี้ไฟล์เดียว ซึ่งค่าที่เก็บจะเปิดเผยและสามารถไปแสดงบน Browser ได้

* ห้ามนำค่าที่สำคัญ อย่างเช่น Secret Key ของ API หรือ Password ของฐานข้อมูล มากำหนดในนี้เด็ดขาด ! ให้ไปกำหนดโดยตรง Environment variables (.env.local)

วิธีกำหนดคือเราจะเพิ่ม env เข้าไป ตามตัวอย่างด้านล่างนี้

// next.config.js

module.exports = {
  env: {
    appName: 'MyApp',
    appUrl: 'https://myapp.com',
    email: '[email protected]'
  },
}

เมื่อต้องการเรียกใช้เราสามารถเรียกค่าด้วยการใช้ process.env ยกตัวอย่าง แสดงชื่อ appName ดังนี้

function Page() {
  return <h1>The value of appName is: {process.env.appName}</h1>
}
export default Page

ซึ่ง Next.js จะแทนค่าจาก process.env.appName แสดงผล 'MyApp' ในตอน build time ซึ่งถ้าดูผ่าน Browsers ผลลัพธ์ควรจะแสดงข้อความว่า

The value of appName is: MyApp

แบบที่ 2 กำหนด Environment variables โดยตรง

เพื่อให้แยก Environment variables ได้ง่ายขึ้นใน development กับ production แล้วค่อยให้ไฟล์ next.config.js ไปเรียกค่าใน Environment variables มาอีกที เริ่มต้นกำหนดค่าดังนี้

// .env.local

APP_NAME = MyApp
APP_URL = https://myapp.com
MAIN_EMAIL = [email protected]

DB_HOST = localhost
DB_USER = myuser
DB_PASS = mypassword

ให้ทำการติดตั้ง dotenv เพื่อให้ดึงค่า Environment variables

npm install dotenv
// หรือ
yarn add dotenv

จากนั้นให้เพิ่ม require(‘dotenv’).config() ในไฟล์ next.config.js และ เปลี่ยนการใส่ค่าตรงๆ ไปเป็นใช้ค่าด้วย  process.env ดังโค้ดด้านล่างนี้

// next.config.js

require("dotenv").config();

module.exports = {
  env: {
    appName: process.env.APP_NAME,
    appUrl: process.env.APP_URL,
    email: process.env.MAIN_EMAIL
  },
}

จากด้านบนจะมีการเรียก  process.env.APP_NAME อีกทีจากไฟล์ .env ทีนี้ให้เราสร้างไฟล์ .env ไว้ root บนสุดของโปรเจ็ค แล้วเพิ่มค่า Environment variables เข้าไป ดังนี้

* สำหรับ Next.js 9.4 ขึ้นไป!

ระหว่างที่เขียนบล็อกนี้เสร็จไปไม่นานทาง Next.js ก็ออกเวอร์ชั่น 9.4 ซึ่งจะสามารถเข้าถึง Environment variables ได้โดยตรงไม่ต้องผ่านไฟล์ next.config.js แล้ว แต่จะต้องใช้  NEXT_PUBLIC_ นำหน้าตัวแปร ในไฟล์ .env ตัวอย่างเช่น

// .env.local

NEXT_PUBLIC_APP_NAME = MyApp
NEXT_PUBLIC_APP_URL = https://myapp.com
NEXT_PUBLIC_MAIN_EMAIL = [email protected]

DB_HOST = localhost
DB_USER = myuser
DB_PASS = mypassword

ทีนี้เวลาเรียกก็ใช้  process.env.NEXT_PUBLIC_APP_NAME

ก็ขอจบบล็อกไวเพียงเท่านี้ หวังว่าคงทีประโยชน์ครับ