Blockly ประกอบด้วยไฟล์ TypeScript กว่าร้อยไฟล์ ไฟล์เหล่านี้ต้องได้รับการคอมไพล์โดยคอมไพเลอร์ TypeScript tsc
เป็น JavaScript ก่อนจึงจะใช้ได้ ซึ่งจะสร้างไฟล์ .js
จํานวนมากพอๆ กันซึ่งเหมาะสําหรับการทดสอบในเครื่อง แต่การโหลดไฟล์จํานวนมากผ่านอินเทอร์เน็ตจะทําให้ผู้ใช้ปลายทางได้รับประสบการณ์การใช้งานที่ช้า ระบบจะใช้ Closure Compiler เพื่อบีบอัด (Minify) และรวมไฟล์ต่างๆ เข้าด้วยกันเป็น 6 ไฟล์ ("กลุ่ม" หรือ "กลุ่มย่อย") โดยมีขนาดรวมน้อยกว่าครึ่งหนึ่งของไฟล์ที่ไม่ได้บีบอัด เพื่อให้ Blockly โหลดได้เร็วขึ้น
ในขั้นตอนนี้ โค้ดโดยใช้คุณลักษณะล่าสุดของ ECMAScript ซึ่งไม่ สามารถใช้ได้กับเบราว์เซอร์ทั้งหมด แปลงแล้วเป็นแบบ ES6 ซึ่งโดยทั่วไปเข้ากันได้กับเบราว์เซอร์ที่ใช้กันอย่างแพร่หลาย ดังนั้น คุณจึงควรแสดงเฉพาะโค้ดที่ผ่านการย่อขนาดให้แก่ผู้ใช้ปลายทาง
ที่เก็บ google/blockly ประกอบด้วย
เฉพาะซอร์สโค้ดเท่านั้น ก่อนหน้านี้ยังมีผลิตภัณฑ์บิลด์ด้วย แต่ตั้งแต่ปี 2019 เราได้เผยแพร่แพ็กเกจ blockly
NPM แบบบีบอัด และตั้งแต่ปี 2022 เราได้แนบไฟล์ .tgz
ไปยังรุ่น GitHub แต่ละรุ่นด้วย คุณจึงไม่จำเป็นต้องสร้าง Blockly เว้นแต่คุณจะแฮ็ก Blockly เอง โดยเฉพาะไฟล์ในไดเรกทอรี core
, blocks
, generators
หรือ msg
กระบวนการสร้าง ทดสอบ และเผยแพร่ Blockly เป็นแบบอัตโนมัติโดยใช้ สคริปต์ npm เพื่อเรียกใช้ Gulp Tasks หน้านี้บันทึกสคริปต์หลักการและ การทำงานของแต่ละอย่าง
โหมดบีบอัดและไม่บีบอัด
การโหลด Blockly โดยตรงจากไฟล์ .js
แต่ละรายการที่สร้างโดย
คอมไพเลอร์ TypeScript เรียกว่า "โหมดไม่บีบอัด" เนื่องจากเลี่ยง
ขั้นตอนการสร้างที่ช้าหลายขั้นตอน ซึ่งช่วยให้รอบการเรียกใช้การแก้ไขและคอมไพล์เป็นไปอย่างรวดเร็ว
และยังช่วยให้ดีบักได้ง่ายขึ้น เนื่องจากโค้ด JavaScript ที่เรียกใช้นั้นใกล้จะ
สามารถอ่านได้เช่นเดียวกับต้นฉบับ TypeScript ต้นฉบับ โดยไม่จำเป็นต้องพึ่งพา
ในซอร์สโค้ด
การโหลด Blockly จากแพ็กเกจที่บีบอัดจะเรียกว่า "โหมดบีบอัด"
วิธีนี้เป็นวิธีที่ดีที่สุดในการทดสอบการเปลี่ยนแปลงใน Blockly เมื่อใช้เป็นแพ็กเกจที่ต้องพึ่งพาของแพ็กเกจอื่น เนื่องจากจะทดสอบblockly
แพ็กเกจ npm (เวอร์ชันที่ยังไม่ได้เผยแพร่)
หมายเหตุ: มีบางตำแหน่งในที่เก็บแบบบล็อกที่คำ "โหมดที่ไม่ได้คอมไพล์" และ "โหมดคอมไพล์" ใช้เป็นคำพ้องความหมายสำหรับ "unการบีบอัด โหมด" และ "โหมดบีบอัด" ตามลำดับ การใช้คำนี้มีความเหมาะสมในอดีตเนื่องจาก Closure Compiler ใช้เพื่อบีบอัด (Minify) โค้ด แต่ตอนนี้จำเป็นต้องใช้คอมไพเลอร์ TypeScript เสมอ แม้ในโหมดที่ไม่มีการบีบอัดก็ตาม เราจึงขอแนะนำไม่ให้ใช้คำศัพท์ทางเลือกนี้เนื่องจากอาจทำให้เกิดความสับสน
คู่มือเริ่มต้นฉบับย่อ
หากคุณทำการเปลี่ยนแปลงในเครื่องและต้องการดูว่าการเปลี่ยนแปลงดังกล่าวไม่ได้ทำให้บิลด์หรือการทดสอบใช้งานไม่ได้ ให้เรียกใช้
npm test
เพื่อสร้าง Blockly และเรียกใช้ชุดทดสอบ
ถ้าต้องการทดสอบการเปลี่ยนแปลงในเครื่องในเบราว์เซอร์ ให้เรียกใช้
npm start
ซึ่งจะคอมไพล์ Blockly และเปิดเว็บเบราว์เซอร์ที่ชี้ไปที่ Blockly IDE ที่รัน Blockly ในโหมดไม่บีบอัด
ระบบจะคอมไพล์ไฟล์ใน
core/
,blocks/
และgenerators/
ที่แก้ไขแล้วอีกครั้งโดยอัตโนมัติ ให้โหลดแท็บเบราว์เซอร์ซ้ำเพื่อดูการเปลี่ยนแปลงสร้าง Blockly เวอร์ชันที่แก้ไขแล้วในเครื่องและทดสอบได้ในการบีบอัด ในฐานะที่เป็นทรัพยากร Dependency ของแพ็กเกจ NPM อื่น ให้เรียกใช้
npm run package
เพื่อสร้างแพ็กเกจ Blockly
cd dist && npm link
เพื่อบอก npm ว่าจะหาไฟล์ที่คอมไพล์แล้วได้จากที่ใด จากนั้น
cd
ไปยัง ก่อนเรียกใช้npm link blockly
เพื่อให้แพ็กเกจของคุณใช้ Blockly เวอร์ชันคอมไพล์ล่าสุดใน สถานที่ของแพ็กเกจ
blockly
ที่เผยแพร่
ข้อมูลอ้างอิงสคริปต์โดยละเอียด
ส่วนนี้จะแสดงหลักการ scripts
ในไฟล์ package.json
ของ Blockly
พร้อมคำอธิบายการดำเนินการ
สคริปต์เหล่านี้จะสร้างไฟล์ใน 2 แห่ง ได้แก่
- ไฟล์ในไดเรกทอรีย่อย
build/
เป็นไฟล์ตัวกลางที่ใช้สำหรับในเครื่อง ทดสอบหรือนำเข้าโดยส่วนต่อๆ ไปของไปป์ไลน์บิลด์ - ไฟล์ในไดเรกทอรีย่อย
dist/
จะประกอบกันเป็นเนื้อหาของแพ็กเกจ npm ที่เผยแพร่
ไม่มีการติดตามไดเรกทอรีใดในที่เก็บ Git แบบบล็อก
clean
npm run clean
จะล้างบิลด์ก่อนหน้าทั้งหมดโดยการลบไดเรกทอรี build/
และ
dist/
มีประโยชน์สำหรับการแก้ไขข้อผิดพลาดในการบิลด์ที่เข้าใจยาก โดยเฉพาะข้อผิดพลาดที่เกิดจากการเปลี่ยนชื่อไฟล์ต้นฉบับ
messages
npm run messages
จะอัปเดตไฟล์ข้อความใน msg/json/
ด้วยการเปลี่ยนแปลงทั้งหมดที่ทำใน msg/messages.js
และควรเรียกใช้หลังจากแก้ไขไฟล์นั้นทุกครั้ง
langfiles
npm run langfiles
สร้างไฟล์ภาษาที่คอมไพล์ใน build/msg/
จากไฟล์ข้อความใน msg/json
tsc
npm run tsc
เรียกใช้คอมไพเลอร์ TypeScript ในเนื้อหาของ core/
ไดเรกทอรี blocks/
และ generators/
และเอาต์พุตแต่ละไฟล์ .js
ไฟล์
ถึง build/src/
minify
npm run minify
จะเรียกใช้ closure-make-deps
และ closure-calculate-chunks
เพื่อกำหนดวิธีแบ่งไฟล์ .js
ที่คอมไพล์แล้วออกเป็นกลุ่ม (กลุ่มที่ผ่านการมินify) จากนั้นจะเรียกใช้ closure-compiler
เพื่อสร้างกลุ่มดังนี้
- เนื้อหาของ
build/src/core/
จะกลายเป็นdist/blockly_compressed.js
- เนื้อหาของ
build/src/blocks/
จะกลายเป็นdist/blocs_compressed.js
- เนื้อหาของ
build/src/generators/javascript/
(บวกbuild/src/generators/javascript.js
) จะกลายเป็นdist/javascript_compressed.js
- และเช่นเดียวกันกับ
dart
,lua
,php
และpython
ตัวกรองทั่วไปที่สร้างขึ้นจะใช้ Wrapper เพื่อให้แน่ใจว่าจะเข้ากันได้กับUniversal การกําหนดโมดูลเพื่อไม่ให้มีการประมวลผลเพิ่มเติม ก่อนที่จะรวมอยู่ในแพ็กเกจ
build
npm run build
เรียกใช้งาน minify
และ langfiles
ซึ่งควรทำทุกอย่างที่จำเป็นในการโหลดพื้นที่ทํางาน Blockly ในโหมดบีบอัดหรือไม่ได้บีบอัด
package
npm run package
เรียกใช้งาน clean
และ build
แล้วทำดังนี้
- ใช้ไฟล์ UMD Wrapper ใน
build/msg/
โดยวางเวอร์ชันที่รวมไว้แล้วในdist/msg/
- เพิ่มไฟล์สนับสนุนเพิ่มเติมไปยัง
dist/
โดยมี UMD Wrapper ซึ่ง ที่เกี่ยวข้อง
publish
npm run publish
ใช้โดยทีม Blockly เพื่อเผยแพร่แพ็กเกจ blockly
npm
ฟีเจอร์นี้ขึ้นอยู่กับโครงสร้างพื้นฐานภายในของ Google จึงไม่มีประโยชน์สําหรับนักพัฒนาแอปภายนอก
lint
npm run lint
เรียกใช้ ESLint ซึ่งจะทำการแยกวิเคราะห์แบบคงที่ของซอร์สโค้ด Blockly เพื่อหาปัญหา
test
npm test
(หรือ npm run test
) จะเรียกใช้งาน package
แล้วเรียกใช้การทดสอบอัตโนมัติต่างๆ (รวมถึงการเรียกใช้ ESLint) ซึ่งควรทำงานและผ่าน
โค้ดใดๆ ที่ส่งมาเป็นคำขอพุลเทียบกับที่เก็บแบบบล็อก