cari
Rumahhujung hadapan webtutorial jsTanggapan pertama Astro: apa yang saya suka dan tidak suka

First impressions of Astro: what I liked and disliked

Baru-baru ini saya mula menggunakan Astro untuk membina semula projek sampingan yang asalnya dibina dengan WordPress, Go, Rails dan Hugo. Saya memilih Astro kerana ia mempunyai DX seperti React dengan sokongan pelayan bahasa yang baik, dan kerana ia serasi dengan platform pengehosan tanpa pelayan yang mempunyai peringkat percuma yang besar (Cloudflare, AWS Lambda, dll).

Saya tidak tahu banyak tentang Astro apabila saya mula menggunakannya. Memandangkan saya telah memindahkan berbilang tapak, saya ingin berkongsi perkara yang saya suka dan tidak suka tentang rangka kerja untuk sesiapa sahaja yang mempertimbangkan untuk menggunakannya.

Astro: apa yang saya suka

Pada terasnya, Astro ialah penjana tapak statik dengan keupayaan untuk menghasilkan halaman yang diberikan pelayan dinamik apabila diperlukan. Astro sangat sesuai untuk blog atau tapak pemasaran kecil dengan interaktiviti terhad. Rangka kerja menyediakan kebanyakan DX daripada Next.js tanpa overhed React.js.

IntelliSense dan pemformatan kod yang baik dalam bahasa templat yang diberikan pelayan

Sejujurnya: sokongan pelayan bahasa yang baik dan pemformatan kod sangat kurang dalam bahasa templat yang diberikan pelayan tradisional. Templat Go, Jinja, ERB dan EJS sangat tertinggal dengan alatan jika dibandingkan dengan rakan sejawat React/Vue/Svelte mereka. Kebanyakan bahasa templat yang diberikan pelayan tidak mempunyai cara untuk mengetahui pembolehubah yang terdapat dalam skop atau jenisnya.

Dengan Astro, semua ciri ini hanya satu sambungan Kod VS.

Di dalam templat Astro, anda menetapkan data anda di bahagian atas templat di dalam "pagar kod" yang sama ada berjalan pada masa binaan atau apabila membalas permintaan pada pelayan. Begini rupanya dalam amalan:

---
import Layout from "../layouts/Layout.astro";
import { getPosts } from "../data/posts";

const posts: { id, title }[] = await getPosts();
---
<layout pagetitle="Posts">
  <h1 id="Posts">Posts</h1>

  {post.length > 0 ? (
    <ul>
      {posts.map((post) => (
        <li>
          <a href="%7B%60/posts/%24%7Bpost.id%7D%60%7D">
            {post.title}
          </a>
        </li>
      )}
    </ul>
  ) : null}
</layout>

Oleh kerana semua data untuk templat dimuatkan dalam "pagar kod" di atas templat, pelayan bahasa boleh menyediakan pelengkapan automatik untuk sifat mana-mana objek yang ditakrifkan dalam skop. Ia juga akan menunjukkan apabila anda cuba menggunakan pembolehubah yang tidak wujud.

Fail Astro boleh menjadi "komponen"

Salah satu masalah terbesar saya dengan bahasa templat tradisional seperti templat Go, Jinja dan EJS ialah mereka tidak mempunyai "komponen" yang boleh menerima kanak-kanak. Kebanyakan tapak web saya mempunyai beberapa jenis elemen UI "bekas" lebar terhad, yang memastikan kandungan tidak terbang ke penghujung skrin pada monitor ultra lebar. Jika anda mempunyai kelas .container yang anda tambahkan secara manual pada

elemen, maka ini biasanya berfungsi dengan baik. Walau bagaimanapun, jika anda menggunakan rangka kerja CSS utiliti seperti Tailwind maka anda mungkin mendapati diri anda menambah kod berikut pada setiap templat halaman tunggal:
<div>



<p>When you eventually need to change these classes, it's an error-prone pain to update each file manually. But if your templating language doesn't have components that can accept children, it's almost inevitable. </p>

<p>Unlike those traditional templating languages, Astro templates can be used as components that accept children using a <slot></slot> tag. A long string of utility classes could be extracted into a reusable Astro component:<br>
</p>

<pre class="brush:php;toolbar:false"><div>



<p>The Astro component could then be consumed from another Astro file.<br>
</p>

<pre class="brush:php;toolbar:false">---
import Container from "../components/Container.astro";
---
<container>
  <h1 id="Hello-world">Hello, world!</h1>
</container>

Fail Astro tidak terhad kepada satu slot: ia boleh mempunyai berbilang.

Ciri kegemaran saya bagi komponen Astro ialah mereka boleh menerima prop dalam pagar kod. Berikut ialah contoh:

---
import Layout from "../layouts/Layout.astro";
import { getPosts } from "../data/posts";

const posts: { id, title }[] = await getPosts();
---
<layout pagetitle="Posts">
  <h1 id="Posts">Posts</h1>

  {post.length > 0 ? (
    <ul>
      {posts.map((post) => (
        <li>
          <a href="%7B%60/posts/%24%7Bpost.id%7D%60%7D">
            {post.title}
          </a>
        </li>
      )}
    </ul>
  ) : null}
</layout>

Komponen kemudiannya boleh menerima prop apabila digunakan dalam fail lain.

<div>



<p>When you eventually need to change these classes, it's an error-prone pain to update each file manually. But if your templating language doesn't have components that can accept children, it's almost inevitable. </p>

<p>Unlike those traditional templating languages, Astro templates can be used as components that accept children using a <slot></slot> tag. A long string of utility classes could be extracted into a reusable Astro component:<br>
</p>

<pre class="brush:php;toolbar:false"><div>



<p>The Astro component could then be consumed from another Astro file.<br>
</p>

<pre class="brush:php;toolbar:false">---
import Container from "../components/Container.astro";
---
<container>
  <h1 id="Hello-world">Hello, world!</h1>
</container>

Saluran paip aset bahagian hadapan dengan tambah nilai langsung terbina dalam

Saya telah membina integrasi sisi pelayan saya sendiri dengan Vite sebelum ini. Jika anda cuba mendapatkan sesuatu dalam talian dengan cepat, ini ialah jenis ciri komoditi yang anda mahu elakkan daripada membina sendiri. Dengan Astro, ia terbina dalam.

Jika anda ingin menambah skrip tersuai pada halaman atau komponen Astro, anda hanya perlu melepaskan teg skrip pada halaman tersebut.

---
type Props = { pageTitle: string; pageDescription: string };

const { pageTitle, pageDescription } = Astro.props;
---



  
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{pageTitle}</title>
    <meta name="description" content="{pageDescription}">
  
  
    <slot></slot>
  

Astro akan menyusun fail TS dan JS secara automatik sebagai sebahagian daripada proses pembinaan tapak. Anda juga boleh menulis skrip yang menggunakan import daripada node_modules di dalam teg skrip dalam komponen Astro, dan Astro akan menyusunnya semasa masa binaan dan mengekstraknya ke failnya sendiri.

---
import Layout from "../layouts/Layout.astro";
---
<layout pagetitle="Tyler's Blog" pagedescription="I don't really post on here.">
  <h1 id="Tyler-s-blog">Tyler's blog</h1>
  <p>Sorry, there's no content yet...</p>
</layout>

Anda boleh memasukkan gaya CSS atau Scss dalam fail Astro dengan mengimportnya dalam pagar kod.

<div>
  <h1 id="This-is-my-page">This is my page</h1>
  <script src="../assets/script.ts"></script>
</div>

Astro juga menyediakan keupayaan untuk melakukan gaya berskop dengan menggunakan tag gaya dalam fail Astro. Ciri ini mungkin biasa kepada pengguna Vue.

Memandangkan fail Astro berikut:

<script>
  // This will also compile down to a JavaScript file at build time.

  import axios, { type AxiosRequestConfig, type AxiosResponse } from "axios";

  const response = await axios
    .get<AxiosRequestConfig, AxiosResponse<{foo: string}>>("/some-endpoint");

  console.log(response.data.foo);
</script>

Mudah, bukan?

Tindakan

Tindakan menyediakan cara selamat jenis untuk menjalankan fungsi hujung belakang. Mereka menyediakan pengesahan dan boleh mengendalikan data JSON dan borang. Ia merupakan salah satu ciri pembunuh Astro dengan mudah: semua ini perlu disambungkan dengan tangan dalam apl Next.js dengan cara yang dipesan lebih dahulu. Mereka memerlukan lebih sedikit kod daripada yang boleh dimuatkan dengan kemas ke dalam contoh, tetapi ia agak elegan untuk digunakan. Saya syorkan membaca halaman dokumen tindakan.

Tiada kos JS masa jalan

Terdapat sebilangan besar pembangun Twitter yang mengatakan React adalah "cukup pantas." Untuk banyak perkara tidak.

Saya menggunakan Rasbperry Pi 4s untuk projek kecil, dan anda boleh rasa kos masa jalan React. Saya pasti ia adalah sama untuk telefon Android yang murah, kecuali dalam kes itu, overhed JS juga akan menghabiskan bateri.

Jika satu-satunya interaktiviti yang diperlukan oleh tapak saya ialah menogol menu navigasi, saya lebih suka menyambungkannya sendiri. Saya dengan senang hati akan mencapai React apabila saya memerlukannya, tetapi untuk banyak projek saya sebenarnya tidak memerlukannya.

Astro: apa yang saya tidak suka

Perkara yang saya tidak suka tentang Astro bukan unik pada rangka kerja: ia adalah idea yang dipinjam daripada alatan lain dalam ekosistem JavaScript.

Penghalaan berasaskan fail

Oleh kerana Astro menggunakan penghalaan berasaskan fail, separuh daripada fail dalam projek Astro akhirnya dinamakan index.(astro|js|ts) atau [id].(astro|js|ts). Penghalaan berasaskan fail ialah corak menjengkelkan yang melanda dunia bahagian hadapan selepas Next.js melaksanakannya dan ia datang dengan banyak kelemahan:

  • Anda selalunya akan membuka 5 tab dalam editor anda dengan nama fail yang sama. Ia akan mengambil sekurang-kurangnya 3 tekaan untuk mencari tab yang anda cari.
  • Pencari kabur fail editor jauh kurang berguna kerana begitu banyak fail mempunyai nama yang sama.
  • Penghalaan berasaskan fail menyerakkan salah satu kebimbangan teras aplikasi merentas banyak fail dan folder, menjadikannya sukar untuk melihat semua laluan sepintas lalu dalam editor. Sebaliknya, anda mesti menelusuri beberapa folder untuk memahami halaman yang tersedia.

Saya akui: penghalaan berasaskan fail terasa hebat apabila anda membuat tapak dengan di bawah 10 halaman. Tetapi apabila tapak berkembang ia menambahkan geseran dan anda melawan ciri itu lebih daripada anda mendapat manfaat daripadanya.

Dalam ekosistem JavaScript, Remix menonjol dengan menawarkan versi penghalaan berasaskan fail yang meratakan semua laluan ke dalam satu direktori dan membenarkan pengguna untuk memilih keluar daripada penghalaan berasaskan fail sepenuhnya dengan konfigurasi laluan manual.

Penghalaan berasaskan fail ialah aduan terbesar saya tentang Astro, tetapi ia adalah ciri yang sukar untuk dilepaskan. Ia dilaksanakan dalam Next.js, Nuxt.js, SvelteKit dan lain-lain. Apa yang lebih aneh ialah rangka kerja ini sebahagian besarnya tidak mempunyai pendapat tentang nama fail untuk bahagian lain aplikasi. Berbeza dengan Ruby on Rails, kebanyakan rangka kerja JavaScript memberikan anda kebebasan yang tinggi dalam nama fail dan struktur projek–kecuali untuk penghalaan. Ia adalah kes khas dan kes khas menambah kerumitan pada perisian.

Satu komponen setiap fail (jenis)

Ciri bahasa JavaScript yang sangat saya sukai ialah keupayaan untuk mentakrifkan berbilang pembolehubah, fungsi dan kelas dalam satu fail. Ini memudahkan untuk menyusun fungsi yang berkaitan tanpa perlu mengekstraknya ke fail lain sebelum masanya kerana kekangan peringkat bahasa.

Sama seperti komponen fail tunggal Vue, fail Astro membenarkan penentuan satu komponen bagi setiap fail. Ini terasa membosankan bagi saya, tetapi Astro menyediakan penyelesaian.

Astro boleh membenamkan komponen React, Vue, Svelte, Solid dan Preact yang telah dipraperlihatkan terus ke dalam templatnya tanpa memuatkan sebarang JavaScript sisi pelanggan. Komponen Preact berpasangan secara munasabah dengan Astro kerana Preact JSX lebih dekat dengan HTML berbanding React JSX. Memang menjadi janggal menguruskan kedua-dua komponen Astro dan Preact dalam projek yang sama, dan sebaik sahaja saya mula menggunakan komponen Preact, saya mendapati diri saya mengalihkan sebahagian besar UI daripada fail Astro dan ke Preact.

Pemikiran akhir tentang Astro

Jika anda seorang pengguna tegar Next.js, Nuxt atau SvelteKit dan anda berpuas hati dengan rangka kerja anda, anda mungkin tidak mendapat banyak manfaat daripada Astro. Walau bagaimanapun, jika anda ingin menghantar lebih sedikit agihan JavaScript kepada pengguna anda sambil mengekalkan DX sesuatu seperti Next.js, maka Astro mungkin sesuai untuk anda.

Astro menjurus ke arah tapak web dipacu kandungan, dan menyediakan sokongan penurunan harga di luar kotak. Kerana tumpuannya pada kandungan, ia merupakan platform pemblogan pembangun yang ideal untuk menggantikan tapak WordPress atau Hugo. Walau bagaimanapun, ia mampu lebih daripada sekadar tapak kandungan melalui ciri seperti Actions.

Walaupun saya tidak menyukai penghalaan berasaskan fail, kebimbangan terbesar saya dengan menggunakan Astro ialah potensi untuk memecahkan perubahan yang akan memaksa saya membina semula tapak saya. Alat JavaScript jauh lebih agresif dengan memecahkan perubahan daripada alatan yang anda temui dalam ekosistem bahasa lain. Oleh kerana saya sangat baru dengan Astro, saya tidak tahu berapa banyak perubahan dari satu versi utama ke versi seterusnya. Walaupun dengan kebimbangan ini, saya bercadang untuk memindahkan 5-ke-6 tapak saya dari platform lain ke Astro supaya saya boleh memanfaatkan DXnya yang terkemuka dan mengehoskan tapak tersebut dengan murah.

Atas ialah kandungan terperinci Tanggapan pertama Astro: apa yang saya suka dan tidak suka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Python vs JavaScript: Analisis Perbandingan untuk PemajuPython vs JavaScript: Analisis Perbandingan untuk PemajuMay 09, 2025 am 12:22 AM

Perbezaan utama antara Python dan JavaScript ialah sistem jenis dan senario aplikasi. 1. Python menggunakan jenis dinamik, sesuai untuk pengkomputeran saintifik dan analisis data. 2. JavaScript mengamalkan jenis yang lemah dan digunakan secara meluas dalam pembangunan depan dan stack penuh. Kedua -duanya mempunyai kelebihan mereka sendiri dalam pengaturcaraan dan pengoptimuman prestasi yang tidak segerak, dan harus diputuskan mengikut keperluan projek ketika memilih.

Python vs JavaScript: Memilih alat yang sesuai untuk pekerjaanPython vs JavaScript: Memilih alat yang sesuai untuk pekerjaanMay 08, 2025 am 12:10 AM

Sama ada untuk memilih Python atau JavaScript bergantung kepada jenis projek: 1) Pilih Python untuk Sains Data dan Tugas Automasi; 2) Pilih JavaScript untuk pembangunan front-end dan penuh. Python disukai untuk perpustakaannya yang kuat dalam pemprosesan data dan automasi, sementara JavaScript sangat diperlukan untuk kelebihannya dalam interaksi web dan pembangunan stack penuh.

Python dan javascript: memahami kekuatan masing -masingPython dan javascript: memahami kekuatan masing -masingMay 06, 2025 am 12:15 AM

Python dan JavaScript masing -masing mempunyai kelebihan mereka sendiri, dan pilihan bergantung kepada keperluan projek dan keutamaan peribadi. 1. Python mudah dipelajari, dengan sintaks ringkas, sesuai untuk sains data dan pembangunan back-end, tetapi mempunyai kelajuan pelaksanaan yang perlahan. 2. JavaScript berada di mana-mana dalam pembangunan front-end dan mempunyai keupayaan pengaturcaraan tak segerak yang kuat. Node.js menjadikannya sesuai untuk pembangunan penuh, tetapi sintaks mungkin rumit dan rawan kesilapan.

Inti JavaScript: Adakah ia dibina di atas C atau C?Inti JavaScript: Adakah ia dibina di atas C atau C?May 05, 2025 am 12:07 AM

Javascriptisnotbuiltoncorc; it'saninterpretedlanguagethatrunsonenginesoftenwritteninc .1) javascriptwasdesignedasalightweight, interpratedlanguageforwebbrowsers.2)

Aplikasi JavaScript: Dari Front-End ke Back-EndAplikasi JavaScript: Dari Front-End ke Back-EndMay 04, 2025 am 12:12 AM

JavaScript boleh digunakan untuk pembangunan front-end dan back-end. Bahagian depan meningkatkan pengalaman pengguna melalui operasi DOM, dan back-end mengendalikan tugas pelayan melalui Node.js. 1. Contoh front-end: Tukar kandungan teks laman web. 2. Contoh backend: Buat pelayan Node.js.

Python vs JavaScript: Bahasa mana yang harus anda pelajari?Python vs JavaScript: Bahasa mana yang harus anda pelajari?May 03, 2025 am 12:10 AM

Memilih Python atau JavaScript harus berdasarkan perkembangan kerjaya, keluk pembelajaran dan ekosistem: 1) Pembangunan Kerjaya: Python sesuai untuk sains data dan pembangunan back-end, sementara JavaScript sesuai untuk pembangunan depan dan penuh. 2) Kurva Pembelajaran: Sintaks Python adalah ringkas dan sesuai untuk pemula; Sintaks JavaScript adalah fleksibel. 3) Ekosistem: Python mempunyai perpustakaan pengkomputeran saintifik yang kaya, dan JavaScript mempunyai rangka kerja front-end yang kuat.

Rangka Kerja JavaScript: Menguasai Pembangunan Web ModenRangka Kerja JavaScript: Menguasai Pembangunan Web ModenMay 02, 2025 am 12:04 AM

Kuasa rangka kerja JavaScript terletak pada pembangunan yang memudahkan, meningkatkan pengalaman pengguna dan prestasi aplikasi. Apabila memilih rangka kerja, pertimbangkan: 1.

Hubungan antara JavaScript, C, dan penyemak imbasHubungan antara JavaScript, C, dan penyemak imbasMay 01, 2025 am 12:06 AM

Pengenalan Saya tahu anda mungkin merasa pelik, apa sebenarnya yang perlu dilakukan oleh JavaScript, C dan penyemak imbas? Mereka seolah -olah tidak berkaitan, tetapi sebenarnya, mereka memainkan peranan yang sangat penting dalam pembangunan web moden. Hari ini kita akan membincangkan hubungan rapat antara ketiga -tiga ini. Melalui artikel ini, anda akan mempelajari bagaimana JavaScript berjalan dalam penyemak imbas, peranan C dalam enjin pelayar, dan bagaimana mereka bekerjasama untuk memacu rendering dan interaksi laman web. Kita semua tahu hubungan antara JavaScript dan penyemak imbas. JavaScript adalah bahasa utama pembangunan front-end. Ia berjalan secara langsung di penyemak imbas, menjadikan laman web jelas dan menarik. Adakah anda pernah tertanya -tanya mengapa Javascr

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft