Blockly में 100 से ज़्यादा TypeScript फ़ाइलें होती हैं. इन फ़ाइलों को इस्तेमाल करने से पहले, TypeScript कंपाइलर, tsc की मदद से JavaScript में कंपाइल करना ज़रूरी है. इससे उतनी ही संख्या में .js फ़ाइलें बनती हैं जो स्थानीय टेस्टिंग के लिए सही हैं. हालांकि, इतनी बड़ी संख्या में फ़ाइलों को इंटरनेट पर लोड करने से, असली उपयोगकर्ताओं को धीमा अनुभव मिलता है. Blockly को तेज़ी से लोड करने के लिए, Closure Compiler का इस्तेमाल किया जाता है. इससे फ़ाइलों को कंप्रेस (छोटा) किया जाता है और उन्हें छह फ़ाइलों ("बंडल" या "चंक") में मिला दिया जाता है. इन फ़ाइलों का कुल साइज़, कंप्रेस न की गई फ़ाइलों के साइज़ से आधा होता है.
इस प्रोसेस में, ECMAScript की नई सुविधाओं का इस्तेमाल करने वाले कोड को ES6 में ट्रांसपाइल किया जाता है. ऐसा इसलिए किया जाता है, ताकि यह कोड ज़्यादातर ब्राउज़र के साथ काम कर सके. हालांकि, ऐसा हो सकता है कि ECMAScript की नई सुविधाएं सभी ब्राउज़र के साथ काम न करें. इसलिए, यह ज़रूरी है कि आप असली उपयोगकर्ताओं को सिर्फ़ छोटा किया गया कोड दें.
RaspberryPiFoundation/blockly repository में सिर्फ़ सोर्स कोड होता है. पहले इसमें बिल्ड प्रॉडक्ट भी शामिल थे, लेकिन 2019 से, छोटे किए गए बंडल blockly NPM पैकेज के तौर पर पब्लिश किए जा रहे हैं. साथ ही, 2022 से इन्हें GitHub की हर रिलीज़ में .tgz फ़ाइल के तौर पर भी अटैच किया जा रहा है. इसलिए, Blockly को तब तक बिल्ड करने की ज़रूरत नहीं है, जब तक कि आप Blockly में ही हैकिंग न कर रहे हों. खास तौर पर, core, blocks, generators या msg डायरेक्ट्री में मौजूद फ़ाइलों में.
Blockly को बनाने, टेस्ट करने, और पब्लिश करने की प्रोसेस को अपने-आप पूरा करने के लिए, npm स्क्रिप्ट का इस्तेमाल किया जाता है. इससे Gulp टास्क को चलाया जा सकता है. इस पेज पर, प्रिंसिपल स्क्रिप्ट और उनके काम करने के तरीके के बारे में बताया गया है.
कंप्रेस किया गया और कंप्रेस नहीं किया गया मोड
टाइपस्क्रिप्ट कंपाइलर से जनरेट की गई अलग-अलग .js फ़ाइलों से सीधे Blockly को लोड करने को "अनकंप्रेस मोड" कहा जाता है. इसमें कई ऐसे चरण शामिल नहीं होते हैं जिनकी वजह से बिल्ड होने में समय लगता है. इसलिए, इसमें बदलाव करने, कंपाइल करने, और चलाने की प्रोसेस तेज़ी से होती है. साथ ही, इससे डीबग करने में भी आसानी होती है, क्योंकि एक्ज़ीक्यूट किया जा रहा JavaScript कोड, ओरिजनल TypeScript सोर्स की तरह ही पढ़ा जा सकता है. इसलिए, इसमें सोर्समैप पर निर्भर रहने की ज़रूरत नहीं होती.
मिनिफ़ाइड बंडलों से Blockly को लोड करने को "कंप्रेस किया गया मोड" कहा जाता है.
किसी दूसरे पैकेज की डिपेंडेंसी के तौर पर Blockly का इस्तेमाल करते समय, इसमें किए गए बदलावों की जांच करने का यह सबसे अच्छा तरीका है. ऐसा इसलिए, क्योंकि यह blockly npm पैकेज के (बिना पब्लिश किए गए वर्शन) की जांच करता है.
N.B.: Blockly रिपॉज़िटरी में कुछ ऐसी जगहें हैं जहां "अनकंपाइल मोड" और "कंपाइल मोड" शब्दों का इस्तेमाल, "अनकंप्रेस्ड मोड" और "कंप्रेस्ड मोड" के समानार्थी शब्दों के तौर पर किया गया है. पहले इस शब्द का इस्तेमाल किया जाता था, क्योंकि Closure Compiler का इस्तेमाल कोड को कंप्रेस (छोटा) करने के लिए किया जाता था. हालांकि, अब TypeScript कंपाइलर की हमेशा ज़रूरत होती है. भले ही, कोड कंप्रेस न किया गया हो. इसलिए, इस शब्द का इस्तेमाल करने से भ्रम पैदा हो सकता है. साथ ही, इसका इस्तेमाल न करने की सलाह दी जाती है.
क्विक स्टार्ट
अगर आपने स्थानीय बदलाव किए हैं और आपको यह पक्का करना है कि उनसे बिल्ड या किसी भी टेस्ट पर कोई असर नहीं पड़ा है, तो
npm testBlockly बनाने और उसके टेस्ट सुइट को चलाने के लिए.
अगर आपको ब्राउज़र में लोकल बदलावों को टेस्ट करना है, तो यह कमांड चलाएं
npm startइससे Blockly कंपाइल हो जाता है. साथ ही, एक वेब ब्राउज़र खुल जाता है, जो Blockly के प्लेग्राउंड की ओर इशारा करता है. यह प्लेग्राउंड, Blockly को बिना कंप्रेस किए गए मोड में चलाता है.
core/,blocks/, औरgenerators/में मौजूद जिन फ़ाइलों में बदलाव किया जाता है उन्हें अपने-आप फिर से कंपाइल किया जाता है. बदलाव देखने के लिए, ब्राउज़र टैब को फिर से लोड करें.Blockly के स्थानीय तौर पर बदले गए वर्शन को बनाने और उसे कंप्रेस किए गए मोड में टेस्ट करने के लिए, किसी दूसरे npm पैकेज की डिपेंडेंसी के तौर पर, यह कमांड चलाएं
npm run packageBlockly पैकेज बनाने के लिए, फिर
cd dist && npm linknpm को यह बताने के लिए कि कंपाइल की गई फ़ाइलें कहां मिलेंगी, और फिर
cdअपने प्रोजेक्ट की डायरेक्ट्री में जाकरnpm link blocklyताकि आपका पैकेज, पब्लिश किए गए
blocklyपैकेज के बजाय, Blockly के नए कंपाइल किए गए वर्शन का इस्तेमाल कर सके.
स्क्रिप्ट के बारे में पूरी जानकारी
इस सेक्शन में, Blockly की package.json फ़ाइल में मौजूद सिद्धांत scripts की सूची दी गई है. साथ ही, यह भी बताया गया है कि ये सिद्धांत क्या करते हैं.
ये स्क्रिप्ट, दो जगहों पर फ़ाइलें जनरेट करती हैं:
build/सबडायरेक्ट्री में मौजूद फ़ाइलें, इंटरमीडियरी फ़ाइलें होती हैं. इनका इस्तेमाल लोकल टेस्टिंग के लिए किया जाता है. इसके अलावा, इन्हें बिल्ड पाइपलाइन के बाद के हिस्सों में शामिल किया जाता है.dist/सबडायरेक्ट्री में मौजूद फ़ाइलें, पब्लिश किए गए npm पैकेज का कॉन्टेंट बनाती हैं.
इनमें से किसी भी डायरेक्ट्री को Blockly की Git रिपॉज़िटरी में ट्रैक नहीं किया जाता.
clean
npm run clean पिछली सभी बिल्ड को क्लीन करता है. इसके लिए, यह build/ और dist/ डायरेक्ट्री मिटा देता है. यह खास तौर पर, सोर्स फ़ाइल का नाम बदलने की वजह से होने वाली बिल्ड फ़ेल होने की समस्याओं को ठीक करने के लिए उपयोगी है.
messages
npm run messages, msg/json/ में मौजूद मैसेज फ़ाइलों को msg/messages.js में किए गए किसी भी बदलाव के साथ अपडेट करता है. साथ ही, इस फ़ाइल में बदलाव किए जाने के बाद, इसे हर बार चलाया जाना चाहिए.
langfiles
npm run langfiles, msg/json में मौजूद मैसेज फ़ाइलों से build/msg/ में कंपाइल की गई भाषा की फ़ाइलें जनरेट करता है.
tsc
npm run tsc, blocks/, और generators/ डायरेक्ट्री के कॉन्टेंट पर TypeScript कंपाइलर चलाता है. साथ ही, build/src/ में अलग-अलग .js फ़ाइलें आउटपुट करता है.core/
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 Playground को लोड करने के लिए ज़रूरी सभी काम हो जाने चाहिए.
package
npm run package, clean और build टास्क को पूरा करता है. इसके बाद:
- यह
build/msg/में मौजूद फ़ाइलों पर UMD रैपर लागू करता है. साथ ही, रैप किए गए वर्शन को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 रिपॉज़िटरी के ख़िलाफ़ पुल अनुरोध के तौर पर सबमिट किए गए किसी भी कोड पर चलाया जाना चाहिए और पास होना चाहिए.