Blockly terdiri dari lebih dari seratus file TypeScript. File ini harus dikompilasi
oleh compiler TypeScript, tsc
, menjadi JavaScript sebelum dapat
digunakan. Hal ini akan membuat file .js
dalam jumlah yang sama besarnya dan cocok untuk pengujian lokal, tetapi memuat file dalam jumlah besar melalui Internet akan memberikan pengalaman yang lambat bagi pengguna akhir. Agar Blockly dimuat lebih cepat, Closure Compiler digunakan untuk
mengompresi (meminimalkan) dan menggabungkannya menjadi setengah lusin file ("bundle" atau
"chunk") dengan total ukuran kurang dari setengah ukuran file yang tidak dikompresi.
Dalam prosesnya, kode yang menggunakan fitur ECMAScript terbaru—yang mungkin tidak kompatibel dengan semua browser—ditranspilasi ke ES6, yang umumnya kompatibel dengan sebagian besar browser yang paling banyak digunakan. Oleh karena itu, Anda harus menayangkan hanya kode yang di-minify kepada pengguna akhir.
Repositori google/blockly hanya berisi kode sumber. Sebelumnya, direktori ini juga berisi produk build, tetapi sejak tahun 2019, paket yang di-minify telah dipublikasikan sebagai paket NPM
blockly
dan sejak tahun 2022 juga dilampirkan sebagai file .tgz
ke setiap rilis GitHub, sehingga tidak perlu membangun Blockly kecuali jika Anda sedang meretas Blockly itu sendiri—khususnya pada file di direktori core
, blocks
, generators
, atau msg
.
Proses membangun, menguji, dan memublikasikan Blockly diotomatiskan menggunakan skrip npm untuk menjalankan tugas Gulp. Halaman ini mendokumentasikan skrip prinsip dan fungsi masing-masing skrip.
Mode Terkompresi dan Tidak Terkompresi
Memuat Blockly langsung dari masing-masing file .js
yang dihasilkan oleh
kompiler TypeScript disebut sebagai "mode tidak dikompresi". Karena menghindari
beberapa langkah build yang lambat, hal ini memfasilitasi siklus edit-kompilasi-jalankan yang cepat;
hal ini juga memfasilitasi proses debug karena kode JavaScript yang dieksekusi hampir
dapat dibaca seperti sumber TypeScript asli, sehingga tidak perlu bergantung
pada peta sumber.
Memuat Blockly dari paket yang diperkecil disebut sebagai "mode terkompresi".
Ini adalah cara terbaik untuk menguji perubahan pada Blockly saat menggunakannya sebagai dependensi
paket lain, karena menguji (versi yang belum dipublikasikan) paket npm blockly
.
N.B.: Ada beberapa tempat di repositori blockly yang menggunakan istilah "mode tidak dikompilasi" dan "mode dikompilasi" sebagai sinonim untuk "mode tidak dikompresi" dan "mode dikompresi". Penggunaan ini masuk akal pada masa lalu karena Closure Compiler digunakan untuk mengompresi (meminimalkan) kode, tetapi sekarang kompilator TypeScript selalu diperlukan, bahkan dalam mode yang tidak dikompresi, sehingga terminologi alternatif ini berpotensi membingungkan dan tidak disarankan.
Mulai Cepat
Jika Anda telah membuat perubahan lokal dan ingin memastikan perubahan tersebut tidak merusak build atau pengujian apa pun, jalankan
npm test
untuk membuat Blockly dan menjalankan rangkaian pengujiannya.
Jika Anda ingin menguji perubahan lokal di browser, jalankan
npm start
Tindakan ini akan mengompilasi Blockly dan membuka browser web yang mengarah ke platform uji coba Blockly yang menjalankan Blockly dalam mode tidak terkompresi.
Setiap file di
core/
,blocks/
, dangenerators/
yang dimodifikasi akan dikompilasi ulang secara otomatis; muat ulang tab browser untuk melihat perubahan.Untuk membuat dan menguji versi Blockly yang dimodifikasi secara lokal, dalam mode terkompresi, sebagai dependensi paket npm lain, jalankan
npm run package
untuk membangun paket Blockly, lalu
cd dist && npm link
untuk memberi tahu npm tempat menemukan file yang dikompilasi, lalu
cd
ke direktori project Anda sebelum menjalankannpm link blockly
agar paket Anda menggunakan Blockly versi yang baru dikompilasi, bukan paket
blockly
yang dipublikasikan.
Referensi Skrip Mendetail
Bagian ini mencantumkan prinsip scripts
dalam file package.json
Blockly
dengan penjelasan tentang fungsinya.
Skrip ini menghasilkan file di dua tempat:
- File di subdirektori
build/
adalah file perantara yang digunakan untuk pengujian lokal atau diserap oleh bagian selanjutnya dari pipeline build. - File di subdirektori
dist/
membentuk konten paket npm yang dipublikasikan.
Kedua direktori tidak dilacak di repositori git blockly.
clean
npm run clean
membersihkan build sebelumnya dengan menghapus direktori build/
dan
dist/
. Berguna untuk memperbaiki kegagalan build yang tidak jelas, terutama
yang disebabkan oleh penggantian nama file sumber.
messages
npm run messages
memperbarui file pesan di msg/json/
dengan perubahan apa pun yang telah dilakukan pada msg/messages.js
, dan harus dijalankan setiap kali file tersebut dimodifikasi.
langfiles
npm run langfiles
menghasilkan file bahasa yang dikompilasi dalam build/msg/
dari file pesan di msg/json
.
tsc
npm run tsc
menjalankan compiler TypeScript pada konten direktori core/
,
blocks/
, dan generators/
, serta menghasilkan file .js
individual
ke build/src/
.
minify
npm run minify
menjalankan closure-make-deps
dan closure-calculate-chunks
untuk menentukan cara membagi file .js
yang dikompilasi menjadi chunk (paket yang di-minify), lalu menjalankan closure-compiler
untuk membuat chunk seperti
berikut:
- Isi
build/src/core/
menjadidist/blockly_compressed.js
. - Isi
build/src/blocks/
menjadidist/blocs_compressed.js
. - Isi
build/src/generators/javascript/
(plusbuild/src/generators/javascript.js
) menjadidist/javascript_compressed.js
. - Demikian pula untuk
dart
,lua
,php
, danpython
.
Chunk yang dihasilkan menggunakan wrapper untuk memastikan kompatibilitas dengan Universal Module Definition sehingga tidak ada pemrosesan tambahan yang diperlukan sebelum disertakan dalam paket.
build
npm run build
menjalankan tugas minify
dan langfiles
. Tindakan ini akan melakukan semua yang diperlukan untuk memuat platform Blockly dalam mode terkompresi atau tidak terkompresi.
package
npm run package
menjalankan tugas clean
dan build
, lalu:
- Menerapkan wrapper UMD ke file di
build/msg/
, lalu menempatkan versi yang di-wrap didist/msg/
. - Menambahkan berbagai file dukungan tambahan ke
dist/
, dengan wrapper UMD jika berlaku.
publish
npm run publish
digunakan oleh tim Blockly untuk memublikasikan paket npm blockly
. Karena bergantung pada infrastruktur internal Google, fitur ini tidak berguna bagi developer eksternal.
lint
npm run lint
menjalankan ESLint, melakukan analisis statis
pada kode sumber Blockly untuk menemukan masalah.
test
npm test
(atau npm run test
) menjalankan tugas package
, lalu menjalankan berbagai
pengujian otomatis (termasuk menjalankan ESLint). Hal ini harus dijalankan—dan lulus—pada
kode apa pun yang dikirimkan sebagai permintaan pull terhadap repositori Blockly.