ตรวจสอบว่ามีไดเร็กทอรีหรือไม่

Elm:
ตรวจสอบว่ามีไดเร็กทอรีหรือไม่

วิธีการ:

Elm คือภาษาโปรแกรมมิ่งสำหรับเว็บด้านหน้า ดังนั้นจึงไม่มีการเข้าถึงระบบไฟล์โดยตรง อย่างไรก็ตาม คุณจะส่งคำสั่งไปยังบริการแบ็กเอนด์ใน JavaScript นี่คือวิธีการโครงสร้างการโต้ตอบดังกล่าวด้วย Elm:

port module Main exposing (..)

-- กำหนด port เพื่อสื่อสารกับ JavaScript
port checkDir : String -> Cmd msg

-- ตัวอย่างการใช้งาน
checkDirectory : String -> Cmd Msg
checkDirectory dir =
    checkDir dir

จากนั้น ใน JavaScript ของคุณ:

app.ports.checkDir.subscribe(function(dir) {
    var exists = fs.existsSync(dir); // การใช้โมดูล 'fs' ของ Node เพื่อตรวจสอบไดเรกทอรี
    app.ports.dirExists.send(exists);
});

กลับไปที่ Elm เพื่อจัดการคำตอบ:

port dirExists : (Bool -> msg) -> Sub msg

type Msg = DirExists Bool

subscriptions : Model -> Sub Msg
subscriptions model =
    dirExists DirExists

หมายเหตุ: สิ่งนี้ต้องการการตั้งค่าพอร์ตและการจัดการแบ็กเอนด์อย่างเหมาะสมใน JavaScript

ลงลึก

สภาพแวดล้อมที่จำกัดแค่เบราว์เซอร์ของ Elm หมายความว่ามันไม่สามารถเข้าถึงระบบไฟล์โดยตรง ไม่เหมือนกับ Node.js ในอดีต ภาษาฝั่งเซิร์ฟเวอร์และ Node.js ได้มอบฟังก์ชันการเข้าถึงระบบไฟล์ โดยภาษาฝั่งเบราว์เซอร์พึ่งพา API ของเซิร์ฟเวอร์เพื่อจัดการไฟล์ Elm ที่มีระบบประเภทข้อมูลที่เข้มงวดไม่ได้จัดการกับผลข้างเคียงเช่นการดำเนินการ I/O โดยตรง แต่ใช้พอร์ตสำหรับการทำงานร่วมกับ JavaScript ให้ Elm เองไม่สามารถตรวจสอบว่ามีไดเรกทอรีอยู่หรือไม่ แต่การใช้ Elm กับบริการแบ็กเอนด์ผ่านพอร์ตช่วยให้สามารถทำงานนี้ได้ในเว็บแอปพลิเคชัน

ในสภาพแวดล้อม Node.js ทางเลือกที่มีรวมถึงเมท็อด fs.existsSync หรือ fs.access สำหรับ Elm ควรพิจารณา Elm ฝั่งเซิร์ฟเวอร์กับแบ็กเอนด์เช่น elm-serverless ซึ่งสามารถจัดการกับการดำเนินการไฟล์ได้โดยตรงมากกว่า Elm ฝั่งไคลเอนต์

ในแง่ของการทำงาน เมื่อคุณตั้งค่าพอร์ตของคุณแล้ว แอป Elm ของคุณส่งข้อความไปยัง JavaScript ซึ่งทำการตรวจสอบระบบไฟล์ JavaScript จากนั้นส่งผลลัพธ์กลับไปยัง Elm นี้ช่วยรักษาความบริสุทธิ์และความปราศจากผลข้างเคียงของโค้ดฝั่งหน้าของ Elm รักษาหลักการสถาปัตยกรรมของมัน

ดูเพิ่มเติม