11
Artefak Distribusi
dist/ bukan tempat menulis kode. Seluruh isinya dibangkitkan oleh task build yang merangkai less:build, jshint, uglify, copy, dan cssmin (Gruntfile.js:193-2051), lalu berkas di sana dipakai langsung oleh pemakai pustaka. Direktori ini memuat empat artefak siap pakai ditambah satu source map: waves.js, waves.min.js, waves.css, waves.min.css, dan waves.min.js.map.
graph TD
LESS["src/less/waves.less"]
JS["src/js/waves.js"]
TYPES["src/typings/waves.d.ts"]
T_LESS["less:build"]
T_COPY["copy:js"]
T_UGLIFY["uglify:js"]
T_CSSMIN["cssmin:target"]
DIST_CSS["dist/waves.css"]
DIST_MINCSS["dist/waves.min.css"]
DIST_JS["dist/waves.js"]
DIST_MINJS["dist/waves.min.js"]
DIST_MAP["dist/waves.min.js.map"]
NPM["package.json main dan types"]
BOWER["bower.json main"]
DOCS["docs/static"]
LESS --> T_LESS
T_LESS --> DIST_CSS
DIST_CSS --> T_CSSMIN
T_CSSMIN --> DIST_MINCSS
JS --> T_COPY
T_COPY --> DIST_JS
JS --> T_UGLIFY
T_UGLIFY --> DIST_MINJS
T_UGLIFY --> DIST_MAP
DIST_MINCSS -.-> DOCS
DIST_MINJS -.-> DOCS
JS -.-> NPM
TYPES -.-> NPM
DIST_JS --> BOWER
DIST_CSS --> BOWER
style LESS fill:#336791,color:#fff
style JS fill:#336791,color:#fff
style TYPES fill:#336791,color:#fff
style T_LESS fill:#f59e0b,color:#000
style T_COPY fill:#f59e0b,color:#000
style T_UGLIFY fill:#f59e0b,color:#000
style T_CSSMIN fill:#f59e0b,color:#000
style DIST_CSS fill:#2d7d46,color:#fff
style DIST_MINCSS fill:#2d7d46,color:#fff
style DIST_JS fill:#2d7d46,color:#fff
style DIST_MINJS fill:#2d7d46,color:#fff
style DIST_MAP fill:#8b5cf6,color:#fff
style NPM fill:#f59e0b,color:#000
style BOWER fill:#f59e0b,color:#000
style DOCS fill:#8b5cf6,color:#fff
%% fig: Alur source menjadi artefak distribusi
%% desc: Source di src/ melewati target less:build, copy:js, uglify:js, dan cssmin:target, lalu berakhir sebagai berkas di dist/ yang dirujuk package.json, bower.json, dan docs/static.Isi direktori dist
Lima berkas di dist/ berasal dari dua sumber saja: src/js/waves.js dan src/less/waves.less. Nama target Grunt di tabel berikut adalah target yang benar-benar menulis berkas tersebut.
| Berkas | Target Grunt | Sumber | Ciri hasil |
|---|---|---|---|
dist/waves.js | copy:js | src/js/waves.js | salinan apa adanya, 600 baris (Gruntfile.js:73-792) |
dist/waves.min.js | uglify:js | src/js/waves.js | satu baris hasil mangle dan compress, tanpa banner (Gruntfile.js:48-703) |
dist/waves.min.js.map | uglify lewat sourceMap | src/js/waves.js | satu baris JSON, sources menunjuk ../src/js/waves.js (Gruntfile.js:61-634) |
dist/waves.css | less:build | src/less/waves.less | CSS terkompilasi, 135 baris (Gruntfile.js:6-175) |
dist/waves.min.css | cssmin:target | dist/waves.css | CSS terkompresi dengan sourceMap: false (Gruntfile.js:19-316) |
copy:js tidak melakukan transformasi apa pun, hanya menyalin src/js/waves.js ke dist/ (Gruntfile.js:73-792). Karena itu dist/waves.js memuat banner versi dan pembungkus UMD yang sama dengan sumbernya (dist/waves.js:1-87), dan berkasnya ditutup oleh return Waves; di dalam factory (dist/waves.js:599-6008).
Jalur CSS berbeda: less:build mengompilasi src/less/waves.less menjadi dist/waves.css (Gruntfile.js:6-175), sehingga banner Less ikut menjadi komentar di keluaran CSS (dist/waves.css:1-89). Berkas ini kemudian dipampatkan oleh cssmin:target, yang juga menjadi sumber pemampatan untuk tests/less, tests/sass, dan tests/scss (Gruntfile.js:19-316). Banner /*! ... */ tetap dipertahankan pada hasil minifikasi CSS (dist/waves.min.css:1-710).
Untuk JavaScript, uglify:js membaca src/js/waves.js dan menulis dist/waves.min.js dengan mangle: true serta drop_console: true (Gruntfile.js:48-703). Hasilnya berupa satu baris yang langsung dimulai dengan IIFE UMD, tanpa banner versi (dist/waves.min.js:111), dan diakhiri komentar penunjuk source map (dist/waves.min.js:212). Berkas map-nya menyatakan "file":"waves.min.js" dan "sources":["../src/js/waves.js"] (dist/waves.min.js.map:113).
Field manifest yang menunjuk artefak
Kedua manifest memakai artefak yang berbeda, dan perbedaan itu menentukan apa yang diterima pemakai.
| Manifest | Field | Nilai | Akibat |
|---|---|---|---|
package.json | main | src/js/waves.js | pemakai npm memuat source mentah, bukan isi dist/ (package.json:714) |
package.json | types | src/typings/waves.d.ts | deklarasi TypeScript diambil dari src/typings (package.json:815, src/typings/waves.d.ts:1-916) |
bower.json | main | ["dist/waves.js", "dist/waves.css"] | pemakai Bower menerima dua artefak dist/ sekaligus (bower.json:817) |
package.json tidak memuat field files dan repository ini tidak punya .npmignore, jadi seluruh isi repository ikut masuk paket npm (package.json:1-3318). Entry point npm tetap src/js/waves.js, sehingga memilih berkas dist/ adalah keputusan pemasangan di sisi pemakai, bukan sesuatu yang dipaksakan manifest.
⚠️ Mengubah berkas di
dist/secara manual akan hilang padagrunt buildberikutnya.watchmenjalankan ulang taskbuildsetiap kali berkassrc/**/*.jsatausrc/**/*.lessberubah (Gruntfile.js:117-12919), danclean:testhanya membersihkantests/*sehingga artefak lama didist/tidak pernah terhapus otomatis (Gruntfile.js:113-11520).
Artefak turunan untuk situs
Selain untuk pemakai pustaka, dua artefak terkompresi disalin ke docs/static oleh copy:docs, yang mengambil waves.min.css dan waves.min.js dari dist/ (Gruntfile.js:80-8521). Alur penyajiannya dibahas di Situs Dokumentasi dengan Situs. Rincian urutan target dan verifikasi kesetaraan antar format ada di Pipeline Build Grunt dan Verifikasi Kesetaraan CSS, sedangkan isi deklarasi types dijelaskan di API Publik dan Tipings TypeScript.