blog.dopana

Back

Hôm nay tôi quyết định thử nâng cấp blog này từ Astro 6.1.8 lên Astro 7.0.7 - phiên bản mới nhất với nhiều cải tiến về hiệu suất. Tuy nhiên, kết quả không như mong đợi.

Astro 7 có gì mới?#

Astro 7 là một bản nâng cấp lớn với nhiều thay đổi:

  • Vite 8 + Rolldown: Thay thế Rollup bằng Rolldown - bundler mới viết bằng Rust, được quảng cáo là nhanh hơn 10-30 lần
  • Rust compiler: Compiler mới cho file .astro thay thế version Go cũ
  • Markdown processor mới: Sätteri thay thế pipeline remark/rehype mặc định
  • Advanced routing: Tính năng routing nâng cao được bật mặc định

Quá trình nâng cấp#

1. Cập nhật dependencies#

bun add astro@7.0.7 @astrojs/vercel@11.0.2 @astrojs/markdown-remark
bash

Cần cài thêm @astrojs/markdown-remark vì Astro 7 mặc định dùng Sätteri, nhưng blog này vẫn muốn dùng pipeline remark/rehype cũ.

2. Cập nhật cấu hình#

Trong astro.config.ts, cần:

  • Xóa các flag experimental đã deprecated: rustCompiler, queuedRendering, svgo
  • Cấu hình markdown để dùng unified() từ @astrojs/markdown-remark thay vì remarkPlugins/rehypePlugins trực tiếp

3. Cập nhật @astrojs/mdx#

bun add @astrojs/mdx@7.0.2
bash

Vấn đề gặp phải#

Sau khi cập nhật, astro check chạy thành công, nhưng astro build thất bại với lỗi:

[PARSE_ERROR] Logical expressions and coalesce expressions cannot be mixed
- in node_modules/astro-pure/components/pages/PostPreview.astro at 2972..3003
plaintext

Nguyên nhân#

Astro 7 sử dụng Rolldown làm bundler mặc định thay vì Rollup. Tuy nhiên, phiên bản astro-pure@1.4.6 (theme đang dùng) có cú pháp mà Rolldown không thể parse được.

Thử nghiệm workaround#

Tôi đã thử cấu hình để dùng Rollup thay vì Rolldown:

vite: {
  build: {
    bundler: 'rollup'
  }
}
typescript

Nhưng Astro không hỗ trợ option này trong cấu hình. Không có cách nào disable Rolldown trong Astro 7.

Giải pháp#

Cuối cùng phải downgrade về Astro 6.4.7:

bun add astro@6.4.7 @astrojs/vercel@10.0.4 @astrojs/mdx@6.0.0
bash

Và revert các thay đổi trong astro.config.ts.

Bài học#

  • Kiểm tra compatibility: Trước khi upgrade major version, nên kiểm tra xem các dependencies quan trọng (như theme) đã hỗ trợ chưa
  • Rolldown vẫn mới: Dù được quảng cáo là nhanh hơn, nhưng Rolldown vẫn còn nhiều vấn đề compatibility với các package cũ
  • Chờ đợi update: Cần đợi astro-pure release version hỗ trợ Astro 7 trước khi thử lại

Kết luận#

Astro 7 có nhiều cải tiến hấp dẫn, nhưng hiện tại chưa phù hợp với blog này do vấn đề tương thích. Tôi sẽ chờ đợi astro-pure cập nhật trước khi thử nâng cấp lại.

Nếu bạn đang dùng Astro 6 và có ý định upgrade lên 7, hãy kiểm tra kỹ các dependencies của mình, đặc biệt là nếu bạn dùng theme hoặc integration bên thứ ba.

Tài liệu tham khảo#