Thử nâng cấp Astro 7 nhưng thất bại
Cố gắng nâng cấp blog từ Astro 6 lên Astro 7 nhưng gặp vấn đề tương thích với Rolldown
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
.astrothay 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-remarkbashCầ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-remarkthay vìremarkPlugins/rehypePluginstrực tiếp
3. Cập nhật @astrojs/mdx#
bun add @astrojs/mdx@7.0.2bashVấ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..3003plaintextNguyê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'
}
}typescriptNhư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.0bashVà 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.