Saya ingin memulai aplikasi hello world sederhana untuk Angular.
Ketika saya mengikuti instruksi di quickstart resmi , instalasi membuat 32.000 file di proyek saya.
Saya pikir ini adalah kesalahan atau saya melewatkan sesuatu, jadi saya memutuskan untuk menggunakan angular-cli , tetapi setelah menyiapkan proyek saya menghitung 41.000 file.
Di mana saya salah? Apakah saya kehilangan sesuatu yang sangat jelas?
javascript
angular
Moshe Shaham
sumber
sumber
Jawaban:
Tidak ada yang salah dengan konfigurasi Anda.
Angular (sejak versi 2.0) menggunakan modul npm dan dependensi untuk pengembangan. Itulah satu-satunya alasan Anda melihat begitu banyak file.
Pengaturan dasar Angular berisi transpiler, dependensi pengetikan yang penting untuk tujuan pengembangan saja.
Setelah Anda selesai dengan pengembangan, yang perlu Anda lakukan hanyalah menggabungkan aplikasi ini.
Setelah menggabungkan aplikasi Anda, hanya akan ada satu
bundle.js
file yang dapat Anda gunakan di server Anda.'Transpiler' hanyalah kompiler, terima kasih @omninonsense karena menambahkannya.
sumber
File Paket NPM (Pengembangan) File Dunia Nyata (Penerapan)
*
:bundled with @angular
[ lihat ini untuk proses bundling ⇗ ]
sumber
-3
diberikan karena tidak melakukan penjumlahan, tapi sekarang saya punya :)Tidak ada yang salah dengan konfigurasi pengembangan Anda .
Ada yang salah dengan konfigurasi produksi Anda .
Ketika Anda mengembangkan "Proyek 2 Sudut" atau "Proyek Apa pun yang didasarkan pada JS" Anda dapat menggunakan semua file, Anda dapat mencoba semua file, Anda dapat mengimpor semua file. Tetapi jika Anda ingin melayani proyek ini, Anda perlu MENGGABUNGKAN semua file terstruktur dan menyingkirkan file yang tidak berguna.
Ada banyak opsi untuk menggabungkan file-file ini bersama-sama:
sumber
Seperti yang sudah disebutkan beberapa orang: Semua file di direktori node_modules Anda (lokasi NPM untuk paket) adalah bagian dari dependensi proyek Anda (Disebut dependensi langsung). Sebagai tambahan untuk itu, dependensi Anda juga dapat memiliki dependensi mereka sendiri dan seterusnya, dll. (Disebut dependensi transitif). Beberapa sepuluh ribu file tidak ada yang istimewa.
Karena Anda hanya diperbolehkan mengunggah 10'000 file (Lihat komentar), saya akan menggunakan mesin bundler. Mesin ini akan menggabungkan semua JavaScript, CSS, HTML, dll. Anda dan membuat satu bundel (atau lebih jika Anda menentukannya). Index.html Anda akan memuat bundel ini dan hanya itu.
Saya penggemar webpack, jadi solusi webpack saya akan membuat bundel aplikasi dan bundel vendor (Untuk aplikasi yang berfungsi penuh lihat di sini https://github.com/swaechter/project-collection/tree/master/web-angular2- contoh ):
index.html
webpack.config.js
Keuntungan:
Kekurangan:
Penafian: Ini adalah solusi yang baik untuk Http 1. *, karena meminimalkan biaya overhead untuk setiap permintaan Http. Anda hanya memiliki permintaan untuk index.html Anda dan setiap bundel - tetapi tidak untuk 100 - 200 file. Saat ini, inilah jalan yang harus ditempuh.
Http 2, di sisi lain, mencoba untuk meminimalkan overhead Http, jadi ini didasarkan pada protokol streaming. Aliran ini dapat berkomunikasi dalam dua arah (Klien <--> Server) dan sebagai alasannya, pemuatan sumber daya yang lebih cerdas dimungkinkan (Anda hanya memuat file yang diperlukan). Aliran menghilangkan banyak overhead Http (Perjalanan pulang-pergi Http kurang).
Tetapi sama dengan IPv6: Dibutuhkan beberapa tahun hingga orang benar-benar menggunakan Http 2
sumber
angular-cli
yang sudah dilengkapi dengan bundler (paket web yang disarankan sama).Anda perlu memastikan bahwa Anda hanya menggunakan folder dist (kependekan yang dapat didistribusikan) dari proyek Anda yang dihasilkan oleh Angular CLI . Ini memungkinkan alat untuk mengambil kode sumber Anda dan dependensinya dan hanya memberi Anda apa yang Anda butuhkan untuk menjalankan aplikasi Anda.
Yang sedang berkata ada / adalah masalah dengan CLI Angular dalam hal membangun produksi melalui `ng build --prod
Kemarin (2 Agustus 2016) sebuah rilis dilakukan yang mengubah mekanisme build dari brokoli + systemjs ke webpack yang berhasil menangani build produksi.
Berdasarkan langkah-langkah ini:
Saya melihat
dist
ukuran folder 1,1 MB di 14 file yang tercantum di sini:Catatan Saat ini untuk menginstal versi webpack dari sudut sudut, Anda harus menjalankan ...
npm install angular-cli@webpack -g
sumber
Angular sendiri memiliki banyak dependensi, dan versi beta dari CLI mengunduh empat kali lebih banyak file.
Ini adalah cara membuat proyek sederhana akan lebih sedikit file ("hanya" file 10K) https://yakovfain.com/2016/05/06/starting-an-angular-2-rc-1-project/
sumber
Sepertinya tidak ada yang menyebutkan Kompilasi Ahead-of-Time seperti yang dijelaskan di sini: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Pengalaman saya dengan Angular sejauh ini adalah bahwa AoT menciptakan build terkecil dengan hampir tanpa waktu pemuatan. Dan yang paling penting karena pertanyaan di sini adalah tentang - Anda hanya perlu mengirimkan beberapa file ke produksi.
Ini sepertinya karena kompiler Angular tidak akan dikirimkan dengan build produksi karena templat dikompilasi "Ahead of Time". Ini juga sangat keren untuk melihat markup template HTML Anda ditransformasikan menjadi instruksi javascript yang akan sangat sulit untuk merekayasa balik menjadi HTML asli.
Saya telah membuat video sederhana di mana saya mendemonstrasikan ukuran unduhan, jumlah file, dll. Untuk aplikasi Angular di dev vs AoT build - yang dapat Anda lihat di sini:
https://youtu.be/ZoZDCgQwnmQ
Anda akan menemukan kode sumber untuk demo di sini:
https://github.com/fintechneo/angular2-templates
Dan - seperti yang dikatakan semua orang di sini - tidak ada yang salah ketika ada banyak file di lingkungan pengembangan Anda. Begitulah halnya dengan semua dependensi yang datang dengan Angular, dan banyak kerangka kerja modern lainnya. Tetapi perbedaannya di sini adalah bahwa ketika pengiriman ke produksi Anda harus dapat mengemasnya ke dalam beberapa file. Anda juga tidak ingin semua file dependensi ini berada di repositori git Anda.
sumber
Ini sebenarnya bukan spesifik Angular, ini terjadi pada hampir semua proyek yang menggunakan ekosistem NodeJs / npm untuk toolingnya.
Proyek tersebut ada di dalam folder node_modules Anda, dan merupakan dependensi transititve yang harus dijalankan dependensi langsung Anda.
Dalam modul node node biasanya kecil, yang berarti bahwa alih-alih mengembangkan sendiri, kita cenderung mengimpor sebagian besar dari apa yang kita butuhkan dalam bentuk modul. Ini dapat mencakup hal-hal kecil seperti fungsi pad kiri yang terkenal, mengapa menulisnya sendiri jika bukan sebagai latihan?
Jadi memiliki banyak file sebenarnya adalah hal yang baik, artinya semuanya sangat modular dan penulis modul sering menggunakan kembali modul lain. Kemudahan modularitas ini mungkin salah satu alasan utama mengapa ekosistem node tumbuh begitu cepat.
Pada prinsipnya ini seharusnya tidak menyebabkan masalah, tetapi tampaknya Anda mengalami batas jumlah file mesin aplikasi google. Dalam hal ini saya sarankan untuk tidak mengunggah node_modules ke mesin aplikasi.
alih-alih bangun aplikasi secara lokal dan unggah ke google app engine hanya file yang dibundel tetapi jangan ke engine build in itu sendiri.
sumber
Jika Anda menggunakan versi sudut yang lebih baru, gunakan
ng build --prod
Ini akan membuat folder dist yang memiliki lebih sedikit file dan kecepatan proyek akan meningkat.
Juga untuk pengujian di lokal dengan performa terbaik sudut yang dapat Anda gunakan
ng serve --prod
sumber
jika Anda menggunakan Angular CLI Anda selalu dapat menggunakan flag --minimal saat Anda membuat proyek
Saya baru saja menjalankannya dengan flag dan menciptakan 24 600 file dan
ng build --prod
menghasilkan folder dist 212 KBJadi jika Anda tidak memerlukan air mancur di proyek Anda atau hanya ingin dengan cepat menguji sesuatu, saya pikir ini cukup berguna
sumber
Membuat proyek baru dengan cli sudut baru-baru ini dan folder node_modules adalah 270 mb, jadi ya ini normal tapi saya yakin sebagian besar pengembang baru ke dunia sudut mempertanyakan hal ini dan valid. Untuk proyek baru yang sederhana, masuk akal untuk mengurangi ketergantungan mungkin sedikit;) Tidak mengetahui semua paket tergantung pada apa yang bisa membuat sedikit menakutkan terutama untuk pengembang baru yang mencoba cli out untuk pertama kalinya. Tambahkan ke fakta sebagian besar tutorial dasar tidak membahas pengaturan penyebaran untuk mendapatkan file yang diekspor hanya diperlukan. Saya tidak percaya bahkan tutorial yang ditawarkan di situs web resmi angular berbicara tentang cara menggunakan proyek sederhana ini.
sumber
Berikut adalah perbandingan dari apa yang membutuhkan lebih banyak ruang dalam proyek sudut.
sumber
Jika sistem file Anda mendukung tautan simbolis, maka Anda setidaknya dapat memindahkan semua file ini ke folder tersembunyi - sehingga alat pintar seperti
tree
tidak akan menampilkannya secara default.Menggunakan folder tersembunyi untuk ini juga dapat mendorong pemahaman bahwa ini adalah file perantara terkait-bangunan yang tidak perlu disimpan untuk kontrol revisi - atau digunakan langsung dalam penyebaran Anda.
sumber
Tidak ada yang salah. Ini semua dependensi simpul yang telah Anda sebutkan di package.json.
Berhati-hatilah jika Anda telah mengunduh beberapa proyek git hub, mungkin ada banyak dependensi lain yang sebenarnya tidak diperlukan untuk aplikasi hello world first sudut 2 :)
sumber