Blockly מורכב מיותר ממאה קבצי TypeScript. צריך לקמפל אותם באמצעות קומפיילר TypeScript, tsc
, ל-JavaScript לפני שאפשר להשתמש בהם. כך נוצר מספר גדול של קובצי .js
שמתאימים לבדיקה מקומית, אבל טעינה של מספר כזה של קבצים באינטרנט גורמת לחוויה איטית למשתמשי הקצה. כדי להאיץ את הטעינה של Blockly, נעשה שימוש ב-Closure Compiler כדי לדחוס (למזער) ולשלב אותם בשישה קבצים ("חבילות" או "מקטעים") שהגודל הכולל שלהם הוא פחות מחצי מהגודל של קבצים לא דחוסים.
במהלך התהליך, קוד שמשתמש בתכונות האחרונות של ECMAScript – תכונות שאולי לא תואמות לכל הדפדפנים – עובר טרנספילציה ל-ES6, שבאופן כללי תואם לרוב הדפדפנים הנפוצים. לכן חשוב להציג למשתמשי הקצה רק את הקוד הממוזער.
מאגר google/blockly מכיל רק את קוד המקור. בעבר הוא הכיל גם את מוצרי ה-build, אבל מאז 2019 חבילות ה-minified מתפרסמות כחבילת blockly
NPM, ומאז 2022 הן מצורפות גם כקובץ .tgz
לכל מהדורה של GitHub, כך שאין צורך לבצע build של Blockly אלא אם אתם מבצעים פריצה ל-Blockly עצמה – במיוחד לקבצים בספריות core
, blocks
, generators
או msg
.
תהליך הפיתוח, הבדיקה והפרסום של Blockly מתבצע באופן אוטומטי באמצעות npm scripts להרצת Gulp tasks. בדף הזה מתוארים הסקריפטים העיקריים ומה כל אחד מהם עושה.
מצב דחוס ומצב לא דחוס
טעינת Blockly ישירות מקובצי .js
בודדים שנוצרו על ידי מהדר TypeScript נקראת 'מצב לא דחוס'. הוא מאפשר מחזור מהיר של עריכה-קומפילציה-הרצה, כי הוא מדלג על כמה שלבים איטיים של בנייה. הוא גם מאפשר ניפוי באגים, כי קוד ה-JavaScript שמופעל קריא כמעט כמו מקורות ה-TypeScript המקוריים, ולכן אין צורך להסתמך על sourcemaps.
טעינת Blockly מחבילות שעברו מיניפיקציה נקראת 'מצב דחיסה'.
זו הדרך הכי טובה לבדוק שינויים ב-Blockly כשמשתמשים בו כתלות בחבילה אחרת, כי הבדיקה מתבצעת (בגרסה לא פורסמה של) blockly
חבילת npm.
N.B.: יש כמה מקומות במאגר Blockly שבהם המונחים 'מצב לא מהודק' ו'מצב מהודק' משמשים כמילים נרדפות ל'מצב לא דחוס' ו'מצב דחוס' בהתאמה. השימוש הזה היה הגיוני בעבר, כי Closure Compiler שימש לדחיסת (מינימיזציה) הקוד, אבל עכשיו תמיד צריך את TypeScript compiler, גם במצב לא דחוס, ולכן השימוש במינוח החלופי הזה עלול לבלבל ולא מומלץ.
התחלה מהירה
אם ביצעתם שינויים מקומיים ואתם רוצים לוודא שהם לא פגעו ב-build או בבדיקות, מריצים את הפקודה
npm test
כדי ליצור את Blockly ולהריץ את חבילת הבדיקות שלו.
אם רוצים לבדוק שינויים מקומיים בדפדפן, מריצים את הפקודה
npm start
הפעולה הזו תבצע קומפילציה של Blockly ותפתח דפדפן אינטרנט שמפנה אל Blockly playground שבו Blockly פועל במצב לא דחוס.
כל קובץ בתיקיות
core/
,blocks/
ו-generators/
שעבר שינוי עובר קומפילציה מחדש באופן אוטומטי. כדי לראות את השינויים, צריך לטעון מחדש את כרטיסיית הדפדפן.כדי ליצור את הגרסה של Blockly ששיניתם באופן מקומי ולבדוק אותה במצב דחוס כתלות בחבילת npm אחרת, מריצים את הפקודה
npm run package
כדי ליצור חבילת Blockly, ואז
cd dist && npm link
כדי לציין ל-npm איפה נמצאים הקבצים שעברו קומפילציה, ואז
cd
לספרייה של הפרויקט לפני שמריציםnpm link blockly
כדי שהחבילה שלכם תשתמש בגרסה החדשה של Blockly במקום בחבילה
blockly
שפורסמה.
Detailed Script Reference
בקטע הזה מפורט העיקרון scripts
בקובץ package.json
של Blockly, עם הסבר על הפעולות שהוא מבצע.
הסקריפטים האלה יוצרים קבצים בשני מקומות:
- קבצים בספריית המשנה
build/
הם קבצי ביניים שמשמשים לבדיקה מקומית או שמוזנים לחלקים מאוחרים יותר בצינור ה-build. - הקבצים בספריית המשנה
dist/
מהווים את התוכן של חבילת npm שפורסמה.
אף אחת מהספריות לא מתועדת במאגר ה-Git של Blockly.
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
המהודרים לחלקים (חבילות שעברו מינימיזציה), ואז מפעיל את 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
.
החלקים שנוצרו משתמשים בעטיפה כדי להבטיח תאימות להגדרה של מודול אוניברסלי, כך שלא נדרש עיבוד נוסף לפני שהם נכללים בחבילה.
build
npm run build
מריץ את המשימות minify
ו-langfiles
. הפעולה הזו אמורה לבצע את כל מה שצריך כדי לטעון את ארגז החול של Blockly במצב דחוס או לא דחוס.
package
npm run package
מריץ את המשימות clean
ו-build
ואז:
- הכלי מחיל עטיפה של UMD על הקבצים בתיקייה
build/msg/
וממקם את הגרסאות העטופות בתיקייהdist/msg/
. - מוסיף קובצי תמיכה שונים ל-
dist/
, עם עטיפות UMD במקרים הרלוונטיים.
publish
npm run publish
משמש את צוות Blockly לפרסום חבילת blockly
npm. הוא תלוי בתשתית פנימית של Google, ולכן הוא לא שימושי למפתחים חיצוניים.
lint
npm run lint
מריץ את ESLint, ומבצע ניתוח סטטי של קוד המקור של Blockly כדי למצוא בעיות.
test
npm test
(או npm run test
) מריץ את המשימה package
ואז מריץ בדיקות אוטומטיות שונות (כולל הרצת ESLint). הבדיקה הזו צריכה לפעול – ולעבור – על כל קוד שנשלח כבקשת משיכה אל מאגר Blockly.