日本語
node.js 14.15.0 หรือใหม่กว่า
npm install @yumemi-inc/statictrace
คุณสามารถติดตั้ง statictrace ต่อโครงการหรือทั่วโลก
pnpm install
pnpm run build
ts-node : pnpx ts-node src/lib.ts -p /absolute/path/to/tsconfig.json
statictrace -- -p /absolute/path/to/tsconfig.json
คุณสามารถละเว้นตัวเลือก -p โดยการสร้างไฟล์ .env ด้วยตัวแปร TS_PROJECT_CONFIG
TS_PROJECT_CONFIG=/absolute/path/to/tsconfig.json
ตัวเลือกอื่น ๆ
u, --use <printer> (ไม่บังคับ): เลือกประเภทหนึ่งของเครื่องพิมพ์เริ่มต้น ( text หรือ mermaid ) statictrace เริ่มการวิเคราะห์แบบคงที่ของรหัสของคุณจากจุดที่มีการบอกใบ้อย่างชัดเจนโดยนักพัฒนา ตัวอย่างเช่นหากคุณต้องการวิเคราะห์โฟลว์การลงทะเบียนเช่นด้านล่างคุณต้องเพิ่มคำใบ้ JSDOC ลงในฟังก์ชั่นที่การไหลเริ่มต้น: @entrypoint YourFlowName
/**
* @entrypoint Registration
*/
function startRegistration ( ) {
processRegistration ( ) ;
finishRegistration ( ) ;
untracedFunction ( ) ;
cleanupSomething ( ) ;
} เพียงแค่ทำสิ่งนี้จะไม่ส่งผล แต่ statictrace ภายในติดตามฟังก์ชั่นและการเรียกวิธีการทั้งหมดที่เกิดขึ้นภายใน startRegistration() และทุกฟังก์ชั่นการเรียกภายในฟังก์ชั่นเหล่านั้นจนกว่าจะไม่มีการโทร กล่าวอีกนัยหนึ่งมันสร้าง stacktrace แบบคงที่ หากมีฟังก์ชั่นและวิธีการใด ๆ ที่คุณต้องการทดสอบหรือเอกสารเช่นเพื่อทราบว่ามีการเรียกฟังก์ชั่นบางอย่างคำสั่งการโทรและความสัมพันธ์ระหว่างผู้ปกครอง/เด็กคุณต้องทำเครื่องหมายฟังก์ชั่นที่เกี่ยวข้องด้วยความคิดเห็นพิเศษอื่น: @trace
/** @trace */
function processRegistration ( ) {
someRegistrationProcedure ( ) ;
} ด้วย statictrace นี้จะสร้างผลลัพธ์ต่อไปนี้:
Entrypoint: Registration
startRegistration
processRegistration
someRegistrationProcedure
คุณสามารถใช้เอาต์พุตนี้เป็นภาพรวมของ stacktrace และใช้จากไลบรารีการทดสอบที่คุณเลือกเพื่อรับประกันว่าโฟลว์จะไม่เปลี่ยนแปลงหลังจาก refactoring เช่น นอกจากนี้คุณยังสามารถส่งออก StackTrace เป็นกราฟ mermaid เพื่อวัตถุประสงค์ในการจัดทำเอกสาร (ดูภาพด้านล่าง)
$ statictrace
=======================
Entrypoint: SomeEntrypoint
begin
funcA
funcC
beingNestedEntrypoint
funcA
funcC
funcB
funcBstatictrace -u mermaid > graphs.mdนี่คือลักษณะของกราฟนางเงือกที่แสดงผล:

const { run } = require ( './build/lib' ) ;
const output = run ( '/absolute/path/to/tsconfig.json' , 'text' ) ;
// ...do something with output run(pathToTsConfig: string, printerType: "text" | "mermaid"): any โหลดไฟล์โครงการทั้งหมดและสร้างกราฟของการเรียกใช้ฟังก์ชันทั้งหมดที่ทำเครื่องหมายด้วย @entrypoint หรือแท็ก @trace คุณควรผ่านประเภทเครื่องพิมพ์เป็นอาร์กิวเมนต์ที่สอง เครื่องพิมพ์เป็นอินเทอร์เฟซที่แสดงถึงสิ่งที่สามารถพิมพ์ได้ (แสดงผลการวิเคราะห์แบบคงที่ไม่ทางใดก็ทางหนึ่ง) ขณะนี้คุณไม่สามารถให้การใช้งานของคุณเอง แต่สามารถเลือกหนึ่งในค่าเริ่มต้น