Blockly è composto da oltre un centinaio di file TypeScript. Questi dati devono essere compilati dal compilatore TypeScript, tsc
, in JavaScript prima di poter essere utilizzati. Questo crea un numero altrettanto elevato di file .js
, che sono adatti per i test locali, ma caricare un numero così elevato di file su internet è un'esperienza lenta per gli utenti finali. Per velocizzare il caricamento di Blockly, il Compilatore di chiusura viene utilizzato per comprimere (minimizzare) e combinarli in una mezza dozzina di file ("bundle" o "blocchi") con dimensioni totali inferiori alla metà di quelle dei file non compressi.
Nel processo, il codice che utilizza le funzionalità ECMAScript più recenti, quelle che potrebbero non essere compatibili con tutti i browser, viene trasferito a ES6, che è generalmente compatibile con i browser più utilizzati. Pertanto, è importante pubblicare solo il codice minimizzato agli utenti finali.
Il repository google/blockly contiene solo il codice sorgente. In precedenza conteneva anche i prodotti di build, ma dal 2019 i bundle minimizzati sono stati pubblicati come il pacchetto blockly
NPM e dal 2022 sono stati allegati anche come file .tgz
a ogni release GitHub, quindi non è necessario creare Blockly a meno che tu non stia violando Blockly stesso, in particolare nei file nelle directory core
, blocks
, generators
o msg
.
Il processo di creazione, test e pubblicazione di Blockly è automatizzato utilizzando script npm per eseguire le attività Gulp. Questa pagina documenta gli script principali e la funzione di ognuno.
Modalità compressa e non compressa
Il caricamento di Blockly direttamente dai singoli file .js
generati dal compilatore TypeScript viene definito "modalità non compressa". Poiché evita diversi passaggi di compilazione lenti, questo facilita un rapido ciclo di modifica-compile-esecuzione e facilita anche il debug poiché il codice JavaScript in esecuzione è leggibile quasi quanto le origini TypeScript originali, eliminando la necessità di dipendere dalle mappe sorgente.
Il caricamento di Blockly dai bundle minimizzati è noto come "modalità compressa".
Questo è il modo migliore per testare le modifiche apportate a Blockly quando lo utilizzi come dipendenza
di un altro pacchetto, perché esegue il test (una versione non pubblicata) del pacchetto blockly
npm.
N.B.: Nel repository a blocchi, i termini "modalità non compilata" e "modalità compilata" vengono utilizzati come sinonimi rispettivamente di "modalità non compressa" e "modalità compressa". Questo utilizzo aveva senso in passato, in quanto Closure Compiler veniva utilizzato per comprimere (minimizzare) il codice, ma ora è sempre necessario il compilatore TypeScript, anche in modalità non compressa, pertanto questa terminologia alternativa è potenzialmente confusa e scoraggiata.
Avvio rapido
Se hai apportato modifiche locali e vuoi assicurarti che non abbiano interrotto la build o eventuali test, esegui
npm test
per creare Blockly ed eseguire la sua suite di test.
Se vuoi testare le modifiche locali nel browser, esegui
npm start
Questa operazione compila Blockly e apre un browser web che punta al gioco Blockly che esegue Blockly in modalità non compressa.
Tutti i file modificati in
core/
,blocks/
egenerators/
vengono ricompilati automaticamente; ricarica la scheda del browser per visualizzare le modifiche.Per creare una versione di Blockly modificata localmente e testarla, in modalità compressa, come dipendenza di un altro pacchetto npm, esegui
npm run package
per creare il pacchetto Blockly, quindi
cd dist && npm link
per indicare a npm dove trovare i file compilati, quindi
cd
nella directory del progetto prima dell'esecuzionenpm link blockly
per fare in modo che il tuo pacchetto utilizzi la versione appena compilata di Blockly al posto del pacchetto
blockly
pubblicato.
Riferimento dettagliato agli script
Questa sezione elenca il principio scripts
nel file package.json
di Blockly, con una spiegazione della loro funzione.
Questi script generano file in due posizioni:
- I file nella sottodirectory
build/
sono file intermedi utilizzati per i test locali o importati da parti successive della pipeline di build. - I file nella sottodirectory
dist/
costituiscono i contenuti del pacchetto npm pubblicato.
Nessuna delle due directory viene monitorata nel repository Git a blocchi.
clean
npm run clean
ripulisce qualsiasi build precedente eliminando le directory build/
e dist/
. Utile per correggere gli errori arcani di build, in particolare quelli causati dalla ridenominazione di un file di origine.
messages
npm run messages
aggiorna i file dei messaggi in msg/json/
con le modifiche apportate a msg/messages.js
e deve essere eseguito ogni volta che il file viene modificato.
langfiles
npm run langfiles
genera i file del linguaggio compilato in build/msg/
dai file dei messaggi in msg/json
.
tsc
npm run tsc
esegue il compilatore TypeScript sui contenuti delle directory core/
, blocks/
e generators/
e restituisce i singoli file .js
in build/src/
.
minify
npm run minify
esegue closure-make-deps
e closure-calculate-chunks
per determinare come suddividere i file .js
compilati in blocchi (gruppi minimi), dopodiché esegue closure-compiler
per creare i blocchi nel seguente modo:
- I contenuti di
build/src/core/
diventanodist/blockly_compressed.js
. - I contenuti di
build/src/blocks/
diventanodist/blocs_compressed.js
. - I contenuti di
build/src/generators/javascript/
(piùbuild/src/generators/javascript.js
) diventanodist/javascript_compressed.js
. - Lo stesso vale per
dart
,lua
,php
epython
.
I blocchi generati utilizzano un wrapper per garantire la compatibilità con la definizione del modulo universale, quindi non è necessaria ulteriore elaborazione prima di essere inclusi nel pacchetto.
build
npm run build
esegue le attività minify
e langfiles
. Questa operazione dovrebbe eseguire tutte le operazioni necessarie per caricare il parco giochi Blockly in modalità compressa o non compressa.
package
npm run package
esegue le attività clean
e build
, quindi:
- Applica un wrapper UMD ai file in
build/msg/
, inserendo le versioni con wrapping indist/msg/
. - Aggiunge vari file di supporto aggiuntivi a
dist/
, con wrapper UMD ove applicabile.
publish
npm run publish
viene utilizzato dal team di Blockly per pubblicare il pacchetto npm di blockly
. Dipende dall'infrastruttura interna di Google,
quindi non è utile per gli sviluppatori esterni.
lint
npm run lint
esegue ESLint, eseguendo analisi statiche
del codice sorgente di Blockly per individuare eventuali problemi.
test
npm test
(o npm run test
) esegue l'attività package
e poi diversi test automatici (tra cui l'esecuzione di ESLint). Dovrebbe essere eseguito e trasmesso su qualsiasi codice inviato come richiesta di pull sul repository a blocchi.