กระบวนการสร้างแบบปกติจะใช้คอมไพเลอร์ JavaScript ออนไลน์ของ Google เพื่อลดจำนวนไฟล์ Blockly ให้เหลือเพียงครึ่งสิบไฟล์ รวมแล้วมีขนาดประมาณ 720 KB (บีบอัดแล้ว 160 KB) อีกทางเลือกหนึ่งคือสามารถใช้คอมไพเลอร์ JavaScript ออฟไลน์ของ Google ในโหมด "การคอมไพล์ขั้นสูง" ซึ่งมีข้อดีหลายประการ:
- ขนาดบล็อกทั้งหมดถูกลดขนาดลงเป็น 300 KB (บีบอัด 100 KB) เนื่องจากการเขย่าของต้นไม้
- เวลาในการสร้างที่เร็วขึ้นและการจราจรของข้อมูลในเครือข่ายที่เร็วขึ้นเนื่องจากการดำเนินการของคอมไพเลอร์ในเครื่อง
- รวมคลิปแบบไม่จำกัด (คอมไพเลอร์ออนไลน์มีการจำกัดอัตรา)
ตั้งค่า
เพื่อให้เป็นไปตามจุดประสงค์ของบทแนะนำสั้นๆ นี้ ให้เริ่มด้วยการสร้างไดเรกทอรีใหม่ในไดเรกทอรีรากของ Blockly
ดาวน์โหลดคอมไพเลอร์การปิด
ดาวน์โหลด compiler.jar, เปลี่ยนชื่อเป็น closure-compiler.jar
และวางไว้ในไดเรกทอรี
ตรวจสอบว่าสภาพแวดล้อมรันไทม์ของ Java เรียกใช้คอมไพเลอร์ได้โดยเรียกใช้ในบรรทัดคำสั่งนี้
java -jar closure-compiler.jar --version
แผ่นหม้อไอน้ำ
ก่อนอื่น ให้สร้างไฟล์ HTML ที่กำหนดกล่องเครื่องมือ Blockly ขนาดเล็กสุดและ div ที่จะแทรกเครื่องมือดังกล่าว ในการสร้างไฟล์ในไดเรกทอรีชื่อ index.html
ที่มีโค้ดนี้
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Blockly: Advanced Compilation</title> <script src="main_compressed.js"></script> <script src="../msg/js/en.js"></script> </head> <body> <h1>Blockly: Advanced Compilation</h1> <div id="blocklyDiv" style="height: 480px; width: 600px;"></div> <xml id="toolbox" style="display: none"> <block type="controls_if"></block> <block type="logic_compare"></block> <block type="controls_repeat_ext"></block> <block type="math_number"></block> <block type="math_arithmetic"></block> <block type="text"></block> <block type="text_print"></block> </xml> </body> </html>
โปรดแก้ไขเส้นทางภาษา (../msg/js/en.js
) ตามที่จำเป็นสำหรับเส้นทางไปยัง Blockly และสำหรับภาษาที่ต้องการ
ขั้นตอนที่ 2 ให้สร้างไฟล์ JavaScript ที่โหลด Blockly และไฟล์ข้อความหรือการกำหนดบล็อกที่จำเป็น จากนั้นแทรก Blockly ลงใน div ที่ระบุ ซึ่งทำได้โดยสร้างไฟล์ในไดเรกทอรีชื่อ main.js
ซึ่งมีโค้ดต่อไปนี้
goog.provide('Main'); // Core goog.require('Blockly.requires'); // Blocks goog.require('Blockly.Constants.Logic'); goog.require('Blockly.Constants.Loops'); goog.require('Blockly.Constants.Math'); goog.require('Blockly.Constants.Text'); Main.init = function() { Blockly.inject('blocklyDiv', { 'toolbox': document.getElementById('toolbox') }); }; window.addEventListener('load', Main.init);
Compile
คอมไพล์ main.js
, Blockly และ Closure Library เข้าด้วยกันโดยเรียกใช้คอมไพเลอร์การปิดจากบรรทัดคำสั่ง:
java -jar closure-compiler.jar --js='main.js' \ --js='../blocks/**.js' \ --js='../core/**.js' \ --js='../generators/**.js' \ --generate_exports \ --externs ../externs/svg-externs.js \ --compilation_level ADVANCED_OPTIMIZATIONS \ --dependency_mode=PRUNE --entry_point=Main \ --js_output_file main_compressed.js
หรือโดยการใช้สคริปต์รวบรวมขั้นสูงของเรา:
npm run test:compile:advanced
ชี้เบราว์เซอร์ไปที่ index.html
เพื่อยืนยันว่าทุกอย่างทำงานได้ดี
ขั้นสูงขึ้นไปอีก
คุณอาจรวมเฉพาะคอมโพเนนต์ Blockly ที่แอปพลิเคชันของคุณใช้งานจริงเท่านั้นเพื่อลดขนาดให้มากขึ้น เช่น หากไม่กำหนดค่าแอปพลิเคชันให้มีถังขยะ คุณก็นำถังขยะออกจากรายการคอมโพเนนต์ที่มีการคอมไพล์ได้ โดยลบข้อกำหนดของ Blockly.requires
ออกจากรหัส ดังนี้
// Core goog.require('Blockly.requires');
ในจุดนี้ ให้เปิด core/requires.js
และคัดลอกคำสั่งทั้งหมดที่จำเป็นลงในโค้ด จากนั้นคุณสามารถแสดงความคิดเห็นในความคิดเห็นที่ไม่ต้องการได้
โปรดทราบว่าคอมไพเลอร์ Closure จะเก็บใบอนุญาตไว้ในผลลัพธ์ที่คอมไพล์แล้ว คุณสามารถตัดใบอนุญาต Apache ของ Google จากไฟล์เอาต์พุตนี้เพื่อลดขนาดได้มากขึ้น
Closure Compiler มีฟีเจอร์และตัวเลือกมากมาย โปรดดูเอกสารประกอบ