# การรองรับ JavaScript ใน Maguyva: การค้นหาด้วย AI สำหรับรีโพที่ผสมรันไทม์

Canonical source: https://maguyva.ai/th/languages/javascript

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva รองรับ JavaScript ด้วยการแยกวิเคราะห์ AST และการดึงสัญลักษณ์ ช่วยให้เอเจนต์ AI ทำงานข้าม Node service, โค้ดฝั่งเบราว์เซอร์ สคริปต์ และ module เก่า โดยไม่ต้องพึ่งการค้นหาแบบข้อความล้วน

## ภาพรวมการรองรับ

- ระดับ: รองรับ AST และสัญลักษณ์
- การเขียนโปรแกรม
- นามสกุลไฟล์: .cjs, .js, .mjs, .spec.js, .stories.js, .test.js
- การแยกวิเคราะห์ AST จริงสำหรับการค้นหาที่รู้จักไวยากรณ์และบริบทเชิงโครงสร้าง
- สัญลักษณ์ที่มีชื่อป้อนข้อมูลให้การค้นหาเชิงความหมายและการอ้างอิงไขว้ การนำทางกราฟจะใช้งานได้เมื่อเปิดใช้การสกัดความสัมพันธ์
- ภาษานี้ส่งสัญลักษณ์และความสัมพันธ์ไปยังการค้นหาแบบรู้บริบทกราฟ โดยประเภทเอดจ์ที่รองรับจะแตกต่างกันตามโครงสร้างเฉพาะของภาษา
- รองรับทั้งการแยกวิเคราะห์ AST และการสกัดสัญลักษณ์

## เหมาะที่สุดสำหรับ

- รีโพซิทอรีของ Node และเบราว์เซอร์ที่ไม่เคยลงตัวว่าจะใช้ระบบ module เดียวหรือเฟรมเวิร์กรุ่นเดียว
- ทีมที่ดูแล JavaScript เก่า พร้อมค่อยๆ นำ TypeScript หรือขอบเขต package ใหม่เข้ามา
- เวิร์กโฟลว์เอเจนต์ที่ต้องการโครงสร้างข้าม `.js`, `.mjs` และ `.cjs` แทนการค้นหาแบบเฉพาะกิจ

## เวิร์กโฟลว์ของเอเจนต์

- ตามรอยเส้นทางคำขอหรือขั้นตอนบิลด์ผ่าน module JavaScript เก่าก่อนแก้ไข
- เปรียบเทียบการอิมพลีเมนต์ CommonJS และ ESM ของพฤติกรรมเดียวกันทั่วทั้งรีโพ
- หารูปแบบที่เกิดซ้ำในสคริปต์ ยูทิลิตี้ หรือคอมโพเนนต์ฟรอนต์เอนด์ก่อนเริ่มสร้างแอบสแตรกชันใหม่

## เหตุใดรีโพ JavaScript ที่ผสมกันยังต้องการการค้นหาที่รับรู้โครงสร้าง

เครื่องมือโค้ด AI จำนวนมากมักมองว่า JavaScript เป็นแค่สถานะรกก่อนจะถึง TypeScript "ตัวจริง" ซึ่งมองข้ามความจริงที่ว่ารีโพที่ใช้งานจริงหน้าตาเป็นอย่างไร JavaScript ยังคงใช้ในขั้นตอนบิลด์ ระบบปลั๊กอิน โค้ดฝั่งเบราว์เซอร์ และสคริปต์งาน รวมถึงเส้นทาง service ที่อยู่มานานซึ่งไม่มีใครมีงบให้เขียนใหม่ให้เรียบร้อย

นั่นทำให้การรองรับ JavaScript เกี่ยวกับประวัติศาสตร์มากกว่าไวยากรณ์ที่สวยงาม อันตรายไม่ได้อยู่ที่การแยกวิเคราะห์ไฟล์ แต่อยู่ที่การแก้ไข module หรือตัวช่วยโดยไม่เข้าใจว่ามันเป็นของ CommonJS, ESM, โค้ดเบราว์เซอร์ หรือรูปแบบเก่าเฉพาะที่

## สิ่งที่ Maguyva ดึงออกมาจริงใน JavaScript

Maguyva ครอบคลุม `.js`, `.mjs` และ `.cjs` ทำให้การเรียกที่มีคำนำหน้าสมาชิกเป็นมาตรฐานเดียวกัน และรองรับฮิวริสติกของคอมโพเนนต์ JSX ในโค้ดเบส JavaScript ที่เบลอเส้นแบ่งระหว่างฟรอนต์เอนด์กับแบ็กเอนด์ นอกจากนี้ยังกรองสัญญาณรบกวนจากรันไทม์มาตรฐานของเบราว์เซอร์และ Node ออกไปจำนวนมาก เพื่อให้ความสัมพันธ์เฉพาะของรีโพซิทอรียังมองเห็นได้

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

## เวิร์กโฟลว์ MCP ที่มีประโยชน์สำหรับรีโพที่ผสมรันไทม์

เวิร์กโฟลว์ที่ใช้ได้จริงมักเป็นแบบนี้:

- ใช้ `text_pattern_search` สำหรับข้อความตรงตัวเช่น `module.exports` ชื่ออีเวนต์ หรือเครื่องหมาย config เก่า
- ใช้ `intelligent_search` เมื่อต้องการสำรวจระดับพฤติกรรม เช่น "legacy upload flow" หรือ "ตรวจสอบ auth ตรงไหนในบันเดิลฝั่งเบราว์เซอร์"
- ใช้ `get_task_context` เมื่อการตั้งชื่อไม่สม่ำเสมอ และต้องการสรุปที่เชื่อมโยงข้อมูลเข้าด้วยกันก่อนที่เอเจนต์จะแก้ไขอะไร

## เมื่อใดที่หน้านี้มีประโยชน์

หน้านี้เหมาะกับรีโพที่ยังมีโค้ด JavaScript อยู่เป็นส่วนสำคัญ ไม่ใช่สำหรับทีมที่แสร้งทำเป็นว่าการย้ายเสร็จแล้ว หากรีโพปัจจุบันเป็น TypeScript เป็นหลัก ให้เริ่มที่ [TypeScript](/th/languages/typescript) หากสแตก web เก่ายังไหลเข้าไปในเทมเพลตฝั่งเซิร์ฟเวอร์หรือ PHP [คู่มือ PHP](/th/languages/php) คือเพื่อนคู่หูที่เกี่ยวข้องกว่า

## รายละเอียดเอนจิน

- การรองรับ JavaScript ครอบคลุม `.js`, `.mjs`, และ `.cjs` ซึ่งสำคัญเมื่อรีโพเดียวยังคงมีรูปแบบโมดูลหลายแบบปนกัน
- คำนำหน้าของสมาชิกและอาร์กิวเมนต์การเรียกถูกปรับให้เป็นมาตรฐาน ทำให้ฟังก์ชันช่วยเหลือที่ซ้ำกันเปรียบเทียบข้ามไฟล์เก่าๆ ได้ง่ายขึ้น
- รองรับฮิวริสติกของคอมโพเนนต์ JSX ในขณะที่กลุ่มตัวแปรโกลบอลจำนวนมากของเบราว์เซอร์และ Node ที่มักพบเจอทั่วไปจะถูกกรองออกจากสัญญาณรบกวนของความสัมพันธ์

## จุดเริ่มต้น MCP ที่มีประโยชน์

- `text_pattern_search`: ใช้สำหรับสตริงที่ตรงตัว เช่น `module.exports` ชื่ออีเวนต์ หรือเครื่องหมาย config เก่า ก่อนขยายขอบเขตการค้นหา
- `intelligent_search`: ใช้เมื่อการตั้งชื่อไม่สอดคล้องกัน และคุณต้องการค้นหาพฤติกรรมอย่าง “file upload flow” มากกว่าสัญลักษณ์
- `get_task_context`: มีประโยชน์เมื่อรีโพเบี่ยงเบนไปมาก และคุณต้องการสรุปที่ประกอบรวมกันก่อนแตะพาธเก่า
