Menggunakan strategi gabungan untuk menghasilkan bundel dan menentukan file - Amazon CodeCatalyst

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan strategi gabungan untuk menghasilkan bundel dan menentukan file

Menghasilkan file dengan resynthesis

Resintesis dapat menggabungkan kode sumber yang dihasilkan oleh cetak biru dengan kode sumber yang sebelumnya dihasilkan oleh cetak biru yang sama, memungkinkan perubahan pada cetak biru untuk disebarkan ke proyek yang ada. Penggabungan dijalankan dari resynth() fungsi di seluruh bundel keluaran cetak biru. Resintesis pertama menghasilkan tiga bundel yang mewakili berbagai aspek cetak biru dan status proyek. Ini dapat dijalankan secara manual secara lokal dengan yarn blueprint:resynth perintah, yang akan membuat bundel jika belum ada. Bekerja secara manual dengan bundel akan memungkinkan Anda untuk mengejek dan menguji perilaku resintesis secara lokal. Secara default, cetak biru hanya menjalankan resintesis di seluruh repositori di bawah src/* karena hanya bagian dari bundel yang biasanya berada di bawah kendali sumber.

  • existing-bundle- Bundel ini merupakan representasi dari status proyek yang ada. Ini secara buatan dibangun oleh komputasi sintesis untuk memberikan konteks cetak biru tentang apa yang ada dalam proyek yang disebarkannya (jika ada). Jika sesuatu sudah ada di lokasi ini saat menjalankan resynthesis secara lokal, itu akan diatur ulang dan dihormati sebagai tiruan. Jika tidak, itu akan diatur ke isiancestor-bundle.

  • ancestor-bundle- Ini adalah bundel yang mewakili keluaran cetak biru jika disintesis dengan beberapa opsi dan/atau versi sebelumnya. Jika ini adalah pertama kalinya cetak biru ini ditambahkan ke proyek, maka leluhurnya tidak ada, jadi itu disetel ke konten yang sama dengan. existing-bundle Secara lokal, jika bundel ini sudah ada di lokasi ini, itu akan dihormati sebagai tiruan.

  • proposed-bundle- Ini adalah bundel yang mengolok-olok cetak biru jika disintesis dengan beberapa opsi dan/atau versi baru. Ini adalah bundel yang sama yang akan diproduksi oleh synth() fungsi. Secara lokal, bundel ini selalu diganti.

Setiap bundel dibuat selama fase resintesis yang dapat diakses dari kelas cetak biru di bawah. this.context.resynthesisPhase

  • resolved-bundle- Ini adalah bundel terakhir, yang merupakan representasi dari apa yang dikemas dan dikerahkan ke proyek. CodeCatalyst Anda dapat melihat file dan perbedaan mana yang dikirim ke mekanisme penerapan. Ini adalah output dari resynth() fungsi menyelesaikan penggabungan antara tiga bundel lainnya.

Penggabungan tiga arah diterapkan dengan mengambil perbedaan antara ancestor-bundle dan proposed-bundle dan menambahkannya ke existing-bundle untuk menghasilkan. resolved-bundle Semua strategi penggabungan menyelesaikan file ke file. resolved-bundle Resintesis menyelesaikan jangkauan bundel ini dengan strategi penggabungan cetak biru selama resynth() dan menghasilkan bundel yang diselesaikan dari hasilnya.

Menggunakan strategi penggabungan

Anda dapat menggunakan strategi gabungan yang dijual oleh pustaka cetak biru. Strategi ini menyediakan cara untuk menyelesaikan output file dan konflik untuk file yang disebutkan di Menghasilkan file dengan resynthesis bagian.

  • alwaysUpdate- Strategi yang selalu menyelesaikan file yang diusulkan.

  • neverUpdate- Strategi yang selalu menyelesaikan file yang ada.

  • onlyAdd- Strategi yang menyelesaikan file yang diusulkan ketika file yang ada belum ada. Jika tidak, selesaikan ke file yang ada.

  • threeWayMerge- Strategi yang melakukan penggabungan tiga arah antara file leluhur yang ada, diusulkan, dan yang sama. File yang diselesaikan mungkin berisi penanda konflik jika file tidak dapat digabungkan dengan bersih. Isi file yang disediakan harus dikodekan UTF-8 agar strategi menghasilkan output yang berarti. Strategi ini mencoba mendeteksi apakah file input biner. Jika strategi mendeteksi konflik gabungan dalam file biner, selalu mengembalikan file yang diusulkan.

  • preferProposed- Strategi yang melakukan penggabungan tiga arah antara file leluhur yang ada, diusulkan, dan yang sama. Strategi ini menyelesaikan konflik dengan memilih sisi file yang diusulkan dari setiap konflik.

  • preferExisting- Strategi yang melakukan penggabungan tiga arah antara file leluhur yang ada, diusulkan, dan yang sama. Strategi ini menyelesaikan konflik dengan memilih sisi file yang ada dari setiap konflik.

Untuk melihat kode sumber untuk strategi penggabungan, lihat repositori sumber terbuka GitHub .

Menentukan file untuk pembaruan manajemen siklus hidup

Selama resintesis, cetak biru mengontrol bagaimana perubahan digabungkan ke dalam repositori sumber yang ada. Namun, Anda mungkin tidak ingin mendorong pembaruan ke setiap file dalam cetak biru Anda. Misalnya, kode contoh seperti stylesheet CSS dimaksudkan untuk spesifik proyek. Strategi penggabungan tiga arah adalah opsi default jika Anda tidak menentukan strategi lain. Cetak biru dapat menentukan file mana yang mereka miliki dan file mana yang tidak mereka miliki dengan menentukan strategi penggabungan pada konstruksi repositori itu sendiri. Cetak biru dapat memperbarui strategi penggabungannya, dan strategi terbaru dapat digunakan selama resintesis.

const sourceRepo = new SourceRepository(this, { title: 'my-repo', }); sourceRepo.setResynthStrategies([ { identifier: 'dont-override-sample-code', description: 'This strategy is applied accross all sample code. The blueprint will create sample code, but skip attempting to update it.', strategy: MergeStrategies.neverUpdate, globs: [ '**/src/**', '**/css/**', ], }, ]);

Beberapa strategi penggabungan dapat ditentukan, dan strategi terakhir diutamakan. File yang tidak terungkap secara default three-way-merge mirip dengan Git. Ada beberapa strategi gabungan yang disediakan melalui MergeStrategies konstruksi, tetapi Anda dapat menulis sendiri. Strategi yang disediakan mematuhi driver strategi git merge.

Menulis strategi penggabungan

Selain menggunakan salah satu strategi penggabungan build yang disediakan, Anda juga dapat menulis strategi Anda sendiri. Strategi harus mematuhi antarmuka strategi standar. Anda harus menulis fungsi strategi yang mengambil versi file dari,, dan existing-bundle proposed-bundleancestor-bundle, dan menggabungkannya menjadi satu file yang diselesaikan. Sebagai contoh:

type StrategyFunction = ( /** * file from the ancestor bundle (if it exists) */ commonAncestorFile: ContextFile | undefined, /** * file from the existing bundle (if it exists) */ existingFile: ContextFile | undefined, /** * file from the proposed bundle (if it exists) */ proposedFile: ContextFile | undefined, options?: {}) /** * Return: file you'd like in the resolved bundle * passing undefined will delete the file from the resolved bundle */ => ContextFile | undefined;

Jika file tidak ada (tidak terdefinisi), maka jalur file itu tidak ada di bundel lokasi tertentu.

Contoh:

strategies: [ { identifier: 'dont-override-sample-code', description: 'This strategy is applied across all sample code. The blueprint will create sample code, but skip attempting to update it.', strategy: (ancestor, existing, proposed) => { const resolvedfile = ... ... // do something ... return resolvedfile }, globs: [ '**/src/**', '**/css/**', ], }, ],