Blockly est constitué de plus d'une centaine de fichiers TypeScript. Ils doivent être compilés en JavaScript par le compilateur TypeScript, tsc
, avant de pouvoir être utilisés. Cela crée un nombre tout aussi important de fichiers .js
, qui sont adaptés aux tests locaux, mais le chargement d'un tel nombre de fichiers sur Internet est une expérience lente pour les utilisateurs finaux. Pour accélérer le chargement de Blockly, le compilateur Closure est utilisé pour compresser (minimiser) et les combiner dans une demi-douzaine de fichiers ("bundles" ou "chunks") dont la taille totale est inférieure à la moitié de celle des fichiers non compressés.
Au cours de ce processus, le code utilisant les dernières fonctionnalités ECMAScript (qui peuvent ne pas être compatibles avec tous les navigateurs) est transcompilé en ES6, qui est généralement compatible avec la plupart des navigateurs les plus utilisés. Il est donc important de ne diffuser que le code minifié auprès de vos utilisateurs finaux.
Le dépôt google/blockly ne contient que le code source. Auparavant, il contenait également les produits de compilation, mais depuis 2019, les bundles réduits ont été publiés en tant que package NPM blockly
et, depuis 2022, également joints sous forme de fichier .tgz
à chaque version GitHub. Il n'est donc pas nécessaire de compiler Blockly, sauf si vous piratez Blockly lui-même, en particulier sur les fichiers des répertoires core
, blocks
, generators
ou msg
.
Le processus de compilation, de test et de publication de Blockly est automatisé à l'aide de scripts npm pour exécuter des tâches Gulp. Cette page décrit les principaux scripts et leur fonction.
Modes compressé et non compressé
Le chargement de Blockly directement à partir des fichiers .js
individuels générés par le compilateur TypeScript est appelé "mode non compressé". Étant donné qu'il évite plusieurs étapes de compilation lentes, cela facilite un cycle d'édition-compilation-exécution rapide. Il facilite également le débogage, car le code JavaScript exécuté est presque aussi lisible que les sources TypeScript d'origine, ce qui évite d'avoir à dépendre des sourcemaps.
Le chargement de Blockly à partir des bundles minifiés est appelé "mode compressé".
Il s'agit du meilleur moyen de tester les modifications apportées à Blockly lorsque vous l'utilisez comme dépendance d'un autre package, car il teste (une version non publiée) du package npm blockly
.
N.B.: À certains endroits du dépôt blockly, les termes "mode non compilé" et "mode compilé" sont utilisés respectivement comme synonymes pour "mode non compressé" et "mode compressé". Cette utilisation avait du sens par le passé, car le compilateur Closure était utilisé pour compresser (minimiser) le code. Toutefois, le compilateur TypeScript est désormais toujours nécessaire, même en mode non compressé. Par conséquent, cette terminologie alternative est potentiellement source de confusion et déconseillée.
Démarrage rapide
Si vous avez apporté des modifications locales et que vous souhaitez vous assurer qu'elles n'ont pas endommagé le build ni les tests, exécutez
npm test
pour créer Blockly et exécuter sa suite de tests.
Si vous souhaitez tester les modifications locales dans le navigateur, exécutez
npm start
Cette commande compile Blockly et ouvre un navigateur Web pointant vers l'espace de jeu Blockly exécutant Blockly en mode non compressé.
Les fichiers
core/
,blocks/
etgenerators/
modifiés sont automatiquement recompilés. Actualisez l'onglet du navigateur pour voir les modifications.Pour créer et tester votre version modifiée localement de Blockly, en mode compressé, en tant que dépendance d'un autre package npm, exécutez
npm run package
pour créer le package Blockly, puis
cd dist && npm link
pour indiquer à npm où trouver les fichiers compilés, puis
cd
au répertoire de votre projet avant l'exécutionnpm link blockly
pour que votre package utilise la version fraîchement compilée de Blockly à la place du package
blockly
publié.
Référence détaillée du script
Cette section liste les scripts
principaux dans le fichier package.json
de Blockly, avec une explication de leur fonction.
Ces scripts génèrent des fichiers à deux endroits:
- Les fichiers du sous-répertoire
build/
sont des fichiers intermédiaires utilisés pour les tests locaux ou ingérés par les parties ultérieures du pipeline de compilation. - Les fichiers du sous-répertoire
dist/
constituent le contenu du package npm publié.
Aucun de ces répertoires n'est suivi dans le dépôt git blockly.
clean
npm run clean
nettoie tous les builds précédents en supprimant les répertoires build/
et dist/
. Utile pour corriger les échecs de compilation obscurs, en particulier ceux causés par le renommage d'un fichier source.
messages
npm run messages
met à jour les fichiers de messages dans msg/json/
avec toutes les modifications apportées à msg/messages.js
et doit être exécuté après chaque modification de ce fichier.
langfiles
npm run langfiles
génère les fichiers de langage compilés dans build/msg/
à partir des fichiers de messages dans msg/json
.
tsc
npm run tsc
exécute le compilateur TypeScript sur le contenu des répertoires core/
, blocks/
et generators/
, et génère des fichiers .js
individuels dans build/src/
.
minify
npm run minify
exécute closure-make-deps
et closure-calculate-chunks
pour déterminer comment diviser les fichiers .js
compilés en segments (bundles minifiés), puis exécute closure-compiler
pour créer les segments comme suit:
- Le contenu de
build/src/core/
devientdist/blockly_compressed.js
. - Le contenu de
build/src/blocks/
devientdist/blocs_compressed.js
. - Le contenu de
build/src/generators/javascript/
(plusbuild/src/generators/javascript.js
) devientdist/javascript_compressed.js
. dart
,lua
,php
etpython
sont renommés sur le même principe.
Les chuks générés utilisent un wrapper pour assurer la compatibilité avec la définition de module universelle. Aucun traitement supplémentaire n'est donc nécessaire avant leur inclusion dans le package.
build
npm run build
exécute les tâches minify
et langfiles
. Cela devrait faire tout ce qui est nécessaire pour charger l'espace de jeu Blockly en mode compressé ou non compressé.
package
npm run package
exécute les tâches clean
et build
, puis:
- Applique un wrapper UMD aux fichiers dans
build/msg/
, en plaçant les versions encapsulées dansdist/msg/
. - Ajoute divers fichiers d'assistance supplémentaires à
dist/
, avec des wrappers UMD le cas échéant.
publish
npm run publish
est utilisé par l'équipe Blockly pour publier le package npm blockly
. Elle dépend de l'infrastructure interne de Google et n'est donc pas utile pour les développeurs externes.
lint
npm run lint
exécute ESLint, qui effectue une analyse statique du code source de Blockly pour détecter les problèmes.
test
npm test
(ou npm run test
) exécute la tâche package
, puis exécute divers tests automatisés (y compris l'exécution d'ESLint). Cette opération doit être exécutée et transmise à tout code envoyé en tant que requête pull sur le dépôt Blockly.