Angular 9 sekarang tersedia - Ivy telah tiba

Versi 9 dari Angular telah dirilis, ini adalah rilis utama yang mencakup seluruh platform, termasuk kerangka itu sendiri, bahan sudut dan CLI. Dalam rilis ini, aplikasi secara default beralih ke kompiler dan runtime Ivy dan, juga, menyediakan cara yang lebih baik untuk menguji komponen.

Ini adalah salah satu pembaruan Angular terbesar dalam 3 tahun, dan tim pengembangan bersemangat tentang peluang yang memungkinkan pengembang untuk membuat aplikasi yang lebih baik dan berkontribusi pada ekosistem Angular.

Cara meningkatkan ke versi 9


Pergi ke update.angular.io untuk informasi lebih lanjut. Untuk memastikan bahwa pembaruan berjalan dengan lancar, Anda disarankan untuk terlebih dahulu memutakhirkan ke versi terbaru dari Angular 8.

Meng-upgrade ke versi terbaru 8

ng update @angular/cli@8 @angular/core@8

ng update @angular/cli @angular/core

Untuk membiasakan diri Anda dengan perubahan besar yang dibuat dalam pembaruan ini, termasuk API yang sudah usang, lihat Meningkatkan ke versi 9 dari Angular dalam dokumentasi Angular.

Ivy


Versi 9 mentransfer semua aplikasi ke kompiler Ivy dan runtime secara default. Selain ratusan bug tetap, kompiler dan runtime Ivy menawarkan banyak keuntungan:

  • Ukuran bundel yang lebih kecil
  • Pengujian lebih cepat
  • Debugging terbaik
  • Peningkatan ikatan kelas dan gaya CSS
  • Pemeriksaan tipe yang ditingkatkan
  • Pesan galat build yang ditingkatkan
  • Peningkatan waktu pembuatan, AOT diaktifkan secara default
  • Meningkatkan internasionalisasi

Mari kita pertimbangkan secara rinci beberapa peningkatan

Ukuran bundel yang lebih kecil


Kompiler Ivy dirancang untuk menghapus bagian Angular yang tidak digunakan dengan treeshaking, dan untuk mengurangi jumlah kode yang dihasilkan untuk komponen Angular.

Berkat peningkatan ini, aplikasi bisa mendapatkan pengurangan ukuran yang signifikan.

  • Aplikasi kecil yang tidak menggunakan banyak fitur kerangka kerja bisa mendapat manfaat paling besar dari treeshaking.
  • Aplikasi besar dengan banyak komponen dapat memanfaatkan pengurangan ukuran pabrik.
  • Aplikasi berukuran sedang akan mendapatkan kira-kira sama, atau sedikit lebih kecil, karena mereka mendapat manfaat lebih sedikit dari pembuatan pohon dan tidak menggunakan banyak komponen untuk mendapatkan manfaat besar dari pabrik yang lebih kecil.

gambar

Pengujian lebih cepat


Implementasi Ivy TestBed juga telah diperbarui, menjadi lebih efisien.

Sebelumnya, TestBed mengkompilasi ulang semua komponen di antara menjalankan setiap tes, terlepas dari apakah ada perubahan pada komponen (misalnya, melalui penggantian).
Di Ivy, TestBed tidak mengkompilasi ulang komponen kecuali komponen telah diganti secara manual, yang menghindari kompilasi di antara sebagian besar tes.

Dengan perubahan ini, tes inti kerangka lulus sekitar 40% lebih cepat. Diharapkan bahwa pengguna akan melihat peningkatan kecepatan pengujian aplikasi mereka pada level 40-50%.

Peningkatan debugging


Ivy menyediakan alat tambahan untuk debugging aplikasi. Saat meluncurkan aplikasi dalam mode pengembangan menggunakan runtime Ivy, objek baru untuk debugging kini ditawarkan.

  • Angular , .
  • , applyChanges

gambar

Ivy juga meningkatkan jejak stack untuk men-debug masalah seperti ExpressionChangedAfterItHasBeenCheckederror. Sebelumnya, tumpukan itu tidak terlalu berguna:

gambar

Dengan Ivy, Anda melihat informasi yang lebih berguna yang memungkinkan Anda untuk langsung pergi ke instruksi templat dengan ekspresi yang dimodifikasi.

gambar

Misalnya, jika Anda mengklik AppComponent_Template di tumpukan di atas, Anda dapat melihat baris tertentu dalam kode yang dihasilkan di mana kesalahan terjadi:

gambar

Jika Anda mau, Anda juga bisa pergi ke salah satu dari petunjuk kerangka kerja ini untuk melacak bagaimana kerangka kerja membuat atau memperbarui komponen Anda .

Peningkatan gaya dan kelas CSS.


Ivy memberikan peningkatan untuk penanganan gaya. Sebelumnya, jika suatu aplikasi berisi definisi gaya yang bersaing, gaya ini dapat saling menggantikan. Dengan Ivy, gaya bergabung dapat diprediksi.

Pertimbangkan templat dan komponen fragmen berikut:

<my-component style="color:red;" [style.color]="myColor" [style]="{color: myOtherColor}" myDirective></div>

@Component({
  host: {
    style: "color:blue"
  },...
})
...

@Directive({
  host: {
    style: "color:black",
    "[style.color]": "property"
  },...
})
...

Sebelumnya, pengikatan yang dihitung terakhir diterapkan, dan ini bisa bergantung pada waktu perubahan dibuat untuk ekspresi ini. Jika myColor dan myOtherColor tidak terdefinisi, gaya statis "merah" akan diabaikan.

Di versi 9, Anda dapat mengelola gaya Anda dengan prioritas yang jelas yang tidak tergantung waktu. Gaya yang paling spesifik diutamakan. Misalnya, pengikatan ke [style.color] menimpa pengikatan [style] yang memotong.

Namun, untuk alasan kompatibilitas ke belakang, kami membiarkan perilaku [ngStyle] dan [ngClass] sama seperti sebelumnya. Saat memperbarui nilai gertakan, nilai baru akan menggantikan gertakan yang tumpang tindih.

Anda dapat membaca lebih lanjut tentang aturan presedensi gaya di panduan sintaks template.dalam dokumentasi.

Sebagai efek samping dari style refactoring, Anda sekarang dapat juga mengikat variabel CSS (properti khusus CSS).

<div [style.--main-border-color]=" '#CCC' ">
<p style="border: 1px solid var( - -main-border-color)">hi</p>
</div>

Pengecekan tipe ditingkatkan


Kompiler Angular dapat memeriksa lebih banyak jenis aplikasi dan menerapkan aturan yang lebih ketat. Fitur-fitur ini akan membantu Anda mengidentifikasi bug pada tahap awal pengembangan.

Dua flag utama didukung untuk pemeriksaan tipe tambahan selain yang standar:

  • fullTemplateTypeCheck - menyalakan bendera ini memberitahu kompiler untuk memeriksa semua yang ada di template Anda (ngIf, ngFor, tp-template, dll.)
  • strictTemplates - mengaktifkan bendera ini akan menerapkan aturan paling ketat untuk pemeriksaan jenis.

Lebih lanjut tentang mengetikkan templat templat

Kesalahan build diperbaiki


Kompiler Ivy yang baru tidak hanya lebih cepat dan memberikan keamanan tipe yang lebih tinggi, tetapi juga membuat pembacaan pesan kesalahan menjadi lebih mudah.

Di versi 8 atau Lihat Mesin, kesalahan kompilator khas akan terlihat seperti ini:

gambar

Di versi 9 dengan Ivy, kesalahan yang sama terlihat seperti ini:

gambar

Waktu build ditingkatkan, compiler AOT diaktifkan secara default.


Berkat arsitektur Ivy, kinerja kompiler telah meningkat secara signifikan.
Kinerja kompiler terukur dalam hal overhead untuk kompilasi sederhana aplikasi TypeScript. Untuk proyek dokumentasi kami (angular.io), overhead menurun dari 0,8x menjadi 0, x dengan Ivy, peningkatan hampir 40%.

Ini berarti bahwa build AOT dapat terasa lebih cepat. Berkat ini, Anda dapat menggunakan AOT bahkan dalam mode dev. Ini berarti bahwa “ng serve” sekarang memiliki kelebihan yang sama dengan rilis build, meningkatkan pengalaman pengembangan untuk Angular.

Berkat perubahan pada kompiler dan runtime, entryComponents juga tidak lagi diperlukan. Komponen-komponen ini akan dideteksi dan dikompilasi secara otomatis saat digunakan.

Peningkatan Internasionalisasi (i18n)


Internasionalisasi adalah fitur Angular di mana Anda dapat membangun aplikasi sekali untuk satu lokal dan mendapatkan aplikasi yang sangat dioptimalkan dan dilokalkan. Versi 9.0 mempercepat proses dengan memindahkan pencarian i18n nanti dalam proses membangun. Perubahan ini membuatnya 10 kali lebih cepat.

Lebih lanjut tentang i18n baru :bersudutSaya melokalkan dan angular.json baru.

Pembaruan yang lebih andal


Perubahan telah dilakukan untuk pengoperasian pembaruan agar lebih andal dan informatif.

  • Selalu gunakan versi terbaru dari CLI. Dimulai dengan 8.3.19 CLI, kami sekarang menggunakan CLI dari versi target pembaruan. Di masa depan, pembaruan akan selalu diproses oleh CLI terakhir.
  • Perbarui kemajuan dengan lebih baik. ng pembaruan sekarang memberikan informasi lebih lanjut tentang apa yang terjadi di bawah tenda. Untuk setiap migrasi, Anda akan melihat informasi tentang itu.
  • Melakukan debug pembaruan yang lebih mudah. Secara default, ng pembaruan memulai semua migrasi dan meninggalkan perubahan kumulatif ke disk untuk verifikasi. Pemutakhiran Versi 9 juga memperkenalkan bendera baru --create-commit. Saat Anda menjalankan pembaruan --create-commit, alat ini menangkap status basis kode Anda setelah setiap migrasi, sehingga Anda dapat selangkah demi selangkah membuat dan men-debug perubahan yang diposting ke kode Anda.

Fitur-Fitur Baru “providedIn”


Saat Anda membuat layanan @Injectable di Angular, Anda harus memilih di mana ditambahkan ke injector. Selain opsi "root" dan "modul" sebelumnya, dua opsi tambahan muncul.

  • platform - providedIn: indikasi 'platform' membuat layanan tersedia dalam injector platform singleton khusus, yang digunakan bersama oleh semua aplikasi pada halaman.
  • any - memberikan contoh unik untuk setiap modul (termasuk modul malas)

Lebih lanjut tentang yang disediakan dalam

Mengikat komponen


Pengujian komponen secara historis mengandalkan penggunaan detail implementasi, seperti pemilih CSS, untuk menemukan komponen dan memicu peristiwa. Ini berarti bahwa setiap kali pustaka komponen berubah, semua tes berdasarkan komponen ini harus diperbarui.

Versi 9 memperkenalkan binding komponen yang menawarkan cara alternatif untuk menguji. Dengan abstrak dari detail implementasi, Anda dapat yakin bahwa tes Anda didefinisikan dengan benar dan kurang rapuh.

Sebagian besar komponen Bahan Sudut sekarang dapat diuji menggunakan binding ini, dan mereka juga tersedia untuk setiap komponen penulis dalam komposisi (CDK).

Berikut ini contoh uji sebelumnya:


it("should switch to bug report template", async () => {
  expect(fixture.debugElement.query("bug-report-form")).toBeNull();
  const selectTrigger = fixture.debugElement.query(
    By.css(".mat-select-trigger")
  );
  selectTrigger.triggerEventHandler("click", {});
  fixture.detectChanges();
  await fixture.whenStable();
  const options = document.querySelectorAll(".mat-select-panel mat-option");
  options[1].click(); // Click the second option, "Bug".
  fixture.detectChanges();
  await fixture.whenStable();
  expect(fixture.debugElement.query("bug-report-form")).not.toBeNull();
});

Dan hal yang sama sekarang:


it("should switch to bug report template", async () => {
  expect(fixture.debugElement.query("bug-report-form")).toBeNull();
  const select = await loader.getHarness(MatSelect);
  await select.clickOptions({ text: "Bug" });
  expect(fixture.debugElement.query("bug-report-form")).not.toBeNull();
});

Komponen baru


Sekarang Anda dapat memasukkan fitur dari YouTube dan Google Maps ke dalam aplikasi Anda.

  • Anda dapat menyematkan pemutar YouTube di aplikasi Anda dengan pemutar youtube baru.
  • Kami juga memperkenalkan komponen google-maps. Komponen-komponen ini memudahkan untuk memvisualisasikan Google Maps, penanda tampilan, dan menghubungkan interaktivitas sehingga berfungsi seperti komponen sudut biasa, sehingga tidak perlu mempelajari Google Maps API.

Peningkatan layanan IDE & bahasa


Perbaikan signifikan telah dibuat untuk ekstensi layanan bahasa Angular pada platform Visual Studio Marketplace. Seiring dengan perbaikan arsitektur utama untuk memecahkan masalah kinerja dan stabilitas, banyak kesalahan lama telah diperbaiki.

  • Tata bahasa TextMate untuk sintaksis templat sekarang memungkinkan Anda untuk menyorot sintaksis di templat tersemat dan eksternal
  • Pergi ke Definisi untuk templateUrl dan styleUrls
  • Ketik dan informasi NgModule di tooltip

Dukungan TypeScript 3.7


Angular telah diperbarui untuk bekerja dengan TypeScript 3.6 dan 3.7, termasuk fungsi penjilidan opsional yang sangat populer di TypeScript 3.7. Agar tetap relevan dengan ekosistem, kami juga memperbarui versi dependensi lain seperti zone.JS dan RxJS.

Source: https://habr.com/ru/post/undefined/


All Articles