Saya membuat pustaka komponen React yang dapat dibagikan.
Perpustakaan berisi banyak komponen tetapi pengguna akhir hanya perlu menggunakan beberapa dari mereka.
Ketika Anda bundel kode dengan Webpack (atau Paket atau Rollup) itu membuat satu file tunggal dengan semua kode .
Untuk alasan kinerja, saya tidak ingin semua kode itu diunduh oleh browser kecuali jika benar-benar digunakan. Apakah saya benar dalam berpikir bahwa saya tidak boleh membundel komponen? Haruskah bundling diserahkan kepada konsumen komponen? Apakah saya menyerahkan hal lain kepada konsumen komponen? Apakah saya hanya mentranspisikan JSX dan hanya itu?
Jika repo yang sama berisi banyak komponen yang berbeda, apa yang seharusnya ada di main.js?
imported
dalam kode sehingga mengurangi ukuran bundel.Jawaban:
Ini adalah jawaban yang sangat panjang karena pertanyaan ini layak mendapatkan jawaban yang sangat panjang dan terperinci karena cara "praktik terbaik" lebih rumit daripada hanya beberapa tanggapan baris.
Iv'e mempertahankan perpustakaan di rumah kami selama 3,5+ tahun pada waktu itu. Saya setuju dengan dua cara. Saya pikir perpustakaan harus dibundel tergantung dari seberapa besar perpustakaan Anda dan secara pribadi kami menyusun kedua cara untuk menyenangkan kedua himpunan bagian dari konsumen.
Metode 1: Buat file index.ts dengan semua yang Anda inginkan diekspor dan rollup target pada file ini sebagai inputnya. Gabungkan seluruh perpustakaan Anda menjadi satu file index.js dan file index.css; Dengan ketergantungan eksternal yang diwarisi dari proyek konsumen untuk menghindari duplikasi kode perpustakaan. (intisari di bagian bawah contoh konfigurasi)
import { Foo, Bar } from "library"
Metode 2: Ini untuk pengguna tingkat lanjut: Buat file baru untuk setiap ekspor dan gunakan rollup-plugin-multi-input dengan opsi "preserveModules: true" tergantung pada bagaimana sistem css apa yang Anda gunakan, Anda juga perlu memastikan bahwa css Anda TIDAK digabung menjadi satu file tetapi setiap file css membutuhkan pernyataan (". css") yang tersisa di dalam file output setelah rollup dan file css itu ada.
next-transpile-modules
paket npm.import { Foo,Bar } from "library"
dan kemudian dengan babel mengubahnya menjadi ...Kami memiliki beberapa konfigurasi rollup di mana kami benar-benar menggunakan kedua metode; jadi bagi konsumen perpustakaan yang tidak peduli dengan guncangan pohon, cukup lakukan
"Foo from "library"
dan impor file css tunggal; dan untuk konsumen perpustakaan yang peduli terhadap goncangan pohon dan hanya menggunakan css kritis, mereka bisa menyalakan plugin babel kami.Panduan rollup untuk praktik terbaik:
apakah Anda menggunakan naskah atau SELALU membangun dengan
"rollup-plugin-babel": "5.0.0-alpha.1"
Pastikan .babelrc Anda terlihat seperti ini.Dan dengan plugin babel dalam tampilan seperti ini ...
Dan package.json Anda terlihat ATLEAST seperti ini:
Dan akhirnya eksternal Anda dalam rollup tampak ATLEAST seperti ini.
Mengapa?
Akhirnya di sini adalah inti untuk contoh file konfigurasi rollup file index.js tunggal. https://gist.github.com/ShanonJackson/deb65ebf5b2094b3eac6141b9c25a0e3 Di mana target src / ekspor / index.ts terlihat seperti ini ...
Beritahu saya jika Anda mengalami masalah dengan babel, rollup, atau memiliki pertanyaan tentang bundling / pustaka.
sumber
Dimungkinkan untuk membuat file terpisah yang dihasilkan untuk setiap komponen. Webpack memiliki kemampuan seperti itu dengan mendefinisikan banyak entri dan keluaran. Katakanlah Anda memiliki struktur proyek sebagai berikut
File webpack akan terlihat seperti ini
Info lebih lanjut tentang "pemecahan kode" ada di sini di dokumen Webpack
Ada satu bidang dalam
package.json
file bernamamain
, ada baiknya untuk meletakkan nilainyalib/index.js
sesuai dengan struktur proyek di atas. Dan dalamindex.js
file semua komponen diekspor. Dalam hal konsumen ingin menggunakan komponen tunggal itu dapat dicapai hanya dengan melakukanYa terserah Anda. Saya telah menemukan bahwa beberapa perpustakaan Bereaksi diterbitkan dengan cara asli, yang lain - dalam cara yang dibundel. Jika Anda memerlukan beberapa proses pembuatan, maka tentukan dan ekspor versi yang dibundel.
Semoga semua pertanyaan Anda terjawab :)
sumber
Anda dapat membagi komponen-komponen Anda seperti yang dilakukan oleh Lodash untuk metode mereka.
Apa yang mungkin Anda miliki adalah komponen terpisah yang dapat Anda izinkan mengimpor secara terpisah atau melalui komponen utama.
Kemudian konsumen dapat mengimpor seluruh paket
atau bagian individualnya
Konsumen akan membuat bundel mereka sendiri berdasarkan pada komponen yang mereka impor. Itu akan mencegah seluruh bundel Anda diunduh.
sumber
Anda harus melihat Bit , saya pikir ini adalah solusi yang baik untuk berbagi, menggunakan kembali, dan memvisualisasikan komponen.
Sangat mudah untuk diatur. Anda dapat menginstal perpustakaan bit Anda atau hanya sebuah komponen dengan:
Kemudian Anda dapat mengimpor komponen di aplikasi Anda dengan:
Bagian baiknya adalah Anda tidak perlu khawatir mengkonfigurasi Webpack dan semua jazz itu. Bit bahkan mendukung versi komponen Anda. Contoh ini menunjukkan komponen reaksi daftar-judul sehingga Anda dapat melihat apakah ini memenuhi persyaratan Anda atau tidak
sumber
Ada konfigurasi di webpack untuk membuat file chunk. Untuk memulainya akan membuat bundel utama menjadi beberapa bongkahan dan membuatnya dimuat seperti yang diperlukan. jika proyek Anda memiliki modul yang terstruktur dengan baik, itu tidak akan memuat kode apa pun yang tidak diperlukan.
sumber