Apa metode terbaik untuk bundel Angular (versi 2, 4, 6, ...) untuk produksi di server web langsung.
Harap sertakan versi Angular dalam jawaban sehingga kami dapat melacak dengan lebih baik saat berpindah ke rilis selanjutnya.
angular
webpack
systemjs
angular-cli
Pat M
sumber
sumber
Jawaban:
2.x, 4.x, 5.x, 6.x, 7.x, 8.x, 9.x
(TypeScript) dengan CLI AngularPengaturan OneTime
npm install -g @angular/cli
ng new projectFolder
membuat aplikasi baruLangkah Bundling
ng build --prod
(jalankan di baris perintah ketika direktoriprojectFolder
)prod
bundel bendera untuk produksi (lihat dokumentasi Sudut untuk daftar opsi yang disertakan dengan bendera produksi).Kompres menggunakan kompresi Brotli sumber daya menggunakan perintah berikut
for i in dist/*; do brotli $i; done
bundel dihasilkan secara default ke projectFolder / dist (/ $ projectFolder for 6)
Keluaran
Ukuran dengan Angular
9.0.0
dengan CLI9.0.1
dan opsi CSS tanpa routing Angulardist/main-[es-version].[hash].js
Aplikasi Anda dibundel [Ukuran ES5: 158 KB untuk aplikasi Angular CLI baru kosong, terkompresi 40 KB ].dist/polyfill-[es-version].[hash].bundle.js
dependensi polyfill (@angular, RxJS ...) dibundel [ukuran ES5: 127 KB untuk aplikasi Angular CLI baru kosong, terkompresi 37 KB ].dist/index.html
titik masuk aplikasi Anda.dist/runtime-[es-version].[hash].bundle.js
loader webpackdist/style.[hash].bundle.css
definisi gayadist/assets
sumber daya disalin dari konfigurasi aset CLI AngularPenyebaran
Anda bisa mendapatkan pratinjau aplikasi Anda menggunakan
ng serve --prod
perintah yang memulai server HTTP lokal sehingga aplikasi dengan file produksi dapat diakses menggunakan http: // localhost: 4200 .Untuk penggunaan produksi, Anda harus menggunakan semua file dari
dist
folder di server HTTP pilihan Anda.sumber
2.0.1 Final
menggunakan Gulp (TypeScript - Target: ES5)Pengaturan OneTime
npm install
(berjalan dalam cmd ketika direktori projectFolder)Langkah Bundling
npm run bundle
(berjalan dalam cmd ketika direktori projectFolder)bundel dihasilkan ke projectFolder / bundles /
Keluaran
bundles/dependencies.bundle.js
[ ukuran: ~ 1 MB (sekecil mungkin)]bundles/app.bundle.js
[ ukuran: tergantung proyek Anda , milik saya ~ 0,5 MB ]Struktur File
dist-systemjs.config.js
tag setelah tag bundel masih akan memungkinkan program untuk berjalan tetapi bundel dependensi akan diabaikan dan dependensi akan dimuat darinode_modules
folder.Yang terbaik yang bisa saya lakukan :)
sumber
inline-templates
dijalankan inline templat kemudian membuat salinan semua folder aplikasi dan file didist/app
. Kemudian padadist-systemjs.config.js
Anda petaapp
untukdist/app
yang merupakan folder yang tidak akan ada jika Anda menggunakandist
folder sebagai root. Tidakkah Anda ingin menjalankan aplikasi daridist
folder? Dan jika itu masalahnya, Anda tidak akan memilikidist
folder yang bersarang didist
folder root . Saya harus kehilangan sesuatu yang lain di sini. Tidakkah Anda perlu memberi tahu systemjs untuk menggunakan file yang Anda bundel dan bukan file yang biasa ditemukan didist/app
folder?Angular 2 dengan Webpack (tanpa pengaturan CLI)
1- Tutorial oleh tim Angular2
Tim Angular2 menerbitkan tutorial untuk menggunakan Webpack
Saya membuat dan menempatkan file dari tutorial di proyek seed kecil GitHub . Jadi, Anda dapat dengan cepat mencoba alur kerja.
Instruksi :
npm instal
mulai npm . Untuk pengembangan. Ini akan membuat folder "dist" virtual yang akan dimuat di alamat localhost Anda.
npm run build . Untuk produksi. "Ini akan membuat versi folder" dist "fisik daripada yang dapat dikirim ke server web. Folder dist adalah 7.8MB tetapi hanya 234KB yang benar-benar diperlukan untuk memuat halaman di browser web.
2 - Kit starter Webkit
Kit Starter Webpack ini menawarkan beberapa fitur pengujian lebih banyak daripada tutorial di atas dan tampaknya cukup populer.
sumber
Alur kerja produksi 2 sudut dengan pembangun SystemJs dan tegukan
Angular.io memiliki tutorial memulai cepat. Saya menyalin tutorial ini dan diperpanjang dengan beberapa tugas tegukan sederhana untuk bundling semuanya ke folder dist yang dapat disalin ke server dan bekerja begitu saja. Saya mencoba untuk mengoptimalkan semuanya agar berfungsi dengan baik pada Jenkis CI, sehingga node_modules dapat di-cache dan tidak perlu disalin.
Kode sumber dengan aplikasi sampel di Github: https://github.com/Anjmao/angular2-production-workflow
Langkah-langkah untuk produksiNode : Meskipun Anda selalu dapat membuat proses build Anda sendiri, tetapi saya sangat merekomendasikan untuk menggunakan angular-cli, karena ia memiliki semua alur kerja yang dibutuhkan dan berfungsi dengan baik sekarang. Kami sudah menggunakannya dalam produksi dan tidak memiliki masalah dengan angular-cli sama sekali.
sumber
CLI Sudut 1.xx (Bekerja dengan Sudut 4.xx, 5.xx)
Ini mendukung:
Pengaturan awal
Anda dapat menambahkan
--style=scss
dukungan SASS .scss.Anda dapat menambahkan
--ng4
untuk menggunakan Angular 4, bukan Angular 2.Setelah membuat proyek, CLI akan secara otomatis berjalan
npm install
untuk Anda. Jika Anda ingin menggunakan Benang sebagai gantinya, atau hanya ingin melihat kerangka proyek tanpa menginstal, periksa bagaimana melakukannya di sini .Bundel Langkah
Di dalam folder proyek:
Pada versi saat ini Anda harus menentukan--aot
secara manual, karena dapat digunakan dalam mode pengembangan (meskipun itu tidak praktis karena kelambatan).Ini juga melakukan kompilasi AoT untuk bundel yang lebih kecil (tidak ada kompiler Angular, sebagai gantinya, dihasilkan output kompiler) Bundel jauh lebih kecil dengan AoT jika Anda menggunakan Angular 4 karena kode yang dihasilkan lebih kecil.
Anda dapat menguji aplikasi Anda dengan AoT dalam mode pengembangan (sourcemaps, tanpa minification) dan AoT dengan menjalankan
ng build --aot
.Keluaran
Dir keluaran default adalah
./dist
, meskipun dapat diubah dalam./angular-cli.json
.File yang Dapat Digunakan
Hasil langkah pembangunan adalah sebagai berikut:
(Catatan:
<content-hash>
mengacu pada hash / sidik jari dari isi file yang dimaksudkan sebagai penghilang cache, ini dimungkinkan karena Webpack menulisscript
tag dengan sendirinya)./dist/assets
File disalin dari apa adanya
./src/assets/**
./dist/index.html
Dari
./src/index.html
, setelah menambahkan skrip webpack ke dalamnyaFile templat sumber dapat dikonfigurasi di
./angular-cli.json
./dist/inline.js
Loader webpack kecil / polyfill
./dist/main.<content-hash>.bundle.js
File .js utama yang berisi semua skrip .js dibuat / diimpor
./dist/styles.<content-hash>.bundle.js
Saat Anda menggunakan Webpack loader untuk CSS, yang merupakan cara CLI, mereka dimuat melalui JS di sini
Pada versi yang lebih lama, ini juga membuat versi gzip untuk memeriksa ukurannya, dan
.map
mem - sourcemaps file, tetapi ini tidak lagi terjadi karena orang terus meminta untuk menghapusnya.File Lainnya
Pada kesempatan lain, Anda mungkin menemukan file / folder lain yang tidak diinginkan:
./out-tsc/
Dari
./src/tsconfig.json
'soutDir
./out-tsc-e2e/
Dari
./e2e/tsconfig.json
'soutDir
./dist/ngfactory/
Dari kompiler AoT (tidak dapat dikonfigurasi tanpa forking CLI pada beta 16)
sumber
<content-hash>
dari bundel di prod. itu dapat menyebabkan masalah dalam mendapatkan bundel terbaru?Sampai hari ini saya masih menemukan buku masak Kompilasi Ahead-of-Time sebagai resep terbaik untuk bundling produksi. Anda dapat menemukannya di sini: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Pengalaman saya dengan Angular 2 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 2 di dev vs AoT build - yang dapat Anda lihat di sini:
https://youtu.be/ZoZDCgQwnmQ
Anda akan menemukan kode sumber yang digunakan dalam video di sini:
https://github.com/fintechneo/angular2-templates
sumber
sumber
Anda dapat menggunakan aplikasi sudut Anda untuk
github
menggunakan angular-cli-ghpageslihat tautan untuk menemukan cara menyebarkan menggunakan klien ini.
situs web yang dikerahkan akan disimpan di beberapa cabang di
github
biasanyahalaman gh
gunakan dapat mengkloning cabang git dan menggunakannya seperti situs web statis di server Anda
sumber
"Terbaik" tergantung pada skenario. Ada kalanya Anda hanya peduli pada bundel terkecil yang mungkin, tetapi dalam aplikasi besar Anda mungkin harus mempertimbangkan pemuatan yang malas. Pada titik tertentu menjadi tidak praktis untuk melayani seluruh aplikasi sebagai satu bundel.
Dalam kasus terakhir, Webpack umumnya merupakan cara terbaik karena mendukung pemisahan kode.
Untuk satu bundel saya akan mempertimbangkan Rollup, atau kompiler Penutupan jika Anda merasa berani :-)
Saya telah membuat sampel dari semua bundler Angular yang pernah saya gunakan di sini: http://www.syntaxsuccess.com/viewarticle/angular-production-builds
Kode dapat ditemukan di sini: https://github.com/thelgevold/angular-2-samples
Versi sudut: 4.1.x
sumber
Cukup siapkan angular 4 dengan webpack 3 dalam satu menit, pengembangan dan produksi bundel ENV Anda akan siap tanpa masalah, cukup ikuti github doc di bawah ini
https://github.com/roshan3133/angular2-webpack-starter
sumber
Silakan coba di bawah perintah CLI di direktori proyek saat ini. Ini akan membuat bundel folder dist. sehingga Anda dapat mengunggah semua file dalam folder dist untuk penyebaran.
ng build --prod --aot --base-href.
sumber
ng melayani pekerjaan untuk melayani aplikasi kita untuk tujuan pengembangan. Bagaimana dengan produksi? Jika kita melihat file package.json kita, kita dapat melihat bahwa ada skrip yang bisa kita gunakan:
Skrip build menggunakan Angular CLI's build dengan flag --prod. Mari kita coba sekarang. Kita dapat melakukannya dengan satu dari dua cara:
# menggunakan skrip npm
# Menggunakan cli secara langsung
Kali ini kami diberikan empat file, bukan lima. Bendera --prod memberitahu Angular untuk membuat aplikasi kita lebih kecil ukurannya.
sumber