Nextron: Framework Desktop Next.js Và Electron
Nextron kết hợp Next.js với Electron để một đội đã quen viết React và TypeScript có thể ra mắt ứng dụng desktop mà không cần học trước các API tiến trình chính thô của Electron. README nêu một bảng tương thích phiên bản giữa các bản Next.js và Nextron, giúp việc nâng cấp dự đoán được thay vì thử sai. Hãy chọn Nextron nếu bạn đã dùng Next.js; bỏ qua nếu bạn cần file cài đặt nhỏ hơn Electron tạo ra, hoặc cần server-side rendering lúc chạy.
Nextron Là Gì?
Nextron là một framework mã nguồn mở, được duy trì tại saltyshiomix/nextron, dựng khung một ứng dụng Electron quanh một renderer Next.js để phần giao diện chạy bằng mã web thông thường. Một dự án được chia thành thư mục cho tiến trình chính và thư mục renderer, nơi Next.js build thành static export trước khi Electron nạp nó, còn electron-builder xử lý bước đóng gói cho macOS, Windows, và Linux.
Tính Năng Và Tích Hợp Chính
- ✓Bảng tương thích phiên bản Next.js với Nextron ngay trong README: Next.js v16.x đi cùng Nextron v10.x, v14.x-v16.x đi cùng v9.x, v12.x-v13.x đi cùng v8.x, cho tới v6.x đi cùng Nextron v1.x.
- ✓Hỗ trợ ESM thêm từ bản v10: đặt trường type trong package.json thành module, chuyển next.config.js sang export default, và thay __dirname bằng import.meta.dirname trong toàn bộ mã nguồn.
- ✓Dựng khung dự án qua create-nextron-app, với các mẫu ví dụ gồm with-tailwindcss, with-material-ui, with-chakra-ui, with-ant-design, with-emotion, và with-next-i18next.
- ✓Tuỳ chỉnh cấu hình webpack cho tiến trình chính qua nextron.config.ts, gồm cả việc ghi đè mainSrcDir và rendererSrcDir.
- ✓Các cờ CLI cho chế độ phát triển: --renderer-port để đổi cổng dev server của Next.js (mặc định 8888), --run-only để tắt hot reload của tiến trình chính, --startup-delay để chờ renderer sẵn sàng, và --electron-options để truyền thẳng các cờ của Electron như --no-sandbox.
- ✓Các cờ build theo từng nền tảng để đóng gói: --mac, --mac --universal, --linux, --win --ia32, --win --x64, cùng --no-pack để bỏ qua bước đóng gói của electron-builder.
- ✓Cấu hình Babel riêng cho tiến trình chính qua file .babelrc với preset nextron/babel.
Bắt Đầu Với Nextron
Không có bước cài đặt riêng. create-nextron-app dựng toàn bộ dự án chỉ bằng một lệnh: `npx create-nextron-app my-app --example with-tailwindcss`, hoặc tương đương với yarn/pnpm (`yarn create nextron-app my-app --example with-tailwindcss`, `pnpm dlx create-nextron-app my-app --example with-tailwindcss`). Đổi giá trị --example sang bất kỳ mẫu có sẵn nào, kể cả basic-lang-javascript, basic-lang-typescript, và with-chakra-ui. README không nêu phiên bản Node.js tối thiểu, nên bạn cần tự kiểm tra điều đó theo phiên bản Next.js mà mình đang dùng.
Build Chế Độ Phát Triển Và Production
Chế độ phát triển chỉ cần một script: đặt mục dev trong package.json thành `nextron`, rồi `npm run dev` sẽ mở cửa sổ Electron với dev server của Next.js đã được nối sẵn để hot reload. Production hoạt động tương tự - đặt mục build thành `nextron build`, và `npm run build` xuất các bản đóng gói vào thư mục dist. Bên dưới, file next.config.ts của Nextron buộc `output: 'export'` vì Electron cần file tĩnh, đổi distDir thành ../app khi ở production, bật trailingSlash để home.tsx thành home/index.html, và tắt tối ưu hoá ảnh của Next vì nó không hoạt động với static export. Build theo từng nền tảng dùng các cờ: `nextron build --mac`, `--mac --universal`, `--linux`, `--win --ia32`, `--win --x64`, và bản macOS phải được build trên chính máy macOS. Việc đóng gói do electron-builder.yml đảm nhiệm, nơi khai báo appId, productName, thư mục output, và những file nào được đóng gói; trỏ tới file cấu hình khác bằng --config, hoặc bỏ qua đóng gói hoàn toàn bằng --no-pack.
Ví Dụ Ứng Dụng Nextron
- •Dựng một ứng dụng desktop dùng Tailwind từ mẫu with-tailwindcss thay vì tự nối Tailwind vào Electron bằng tay.
- •Ra mắt một ứng dụng mở từ một custom URL protocol, dùng mẫu basic-launch-app-from-url - README ghi rõ mẫu này chỉ hoạt động ở bản build production.
- •Bắt đầu một ứng dụng desktop cần lưu dữ liệu cục bộ, dùng basic-store-data làm nền thay vì tự xây cơ chế lưu trữ từ số không.
- •Gắn thẳng Ant Design, Chakra UI, Material UI, hay Emotion từ đúng thư mục mẫu tương ứng thay vì tự cấu hình từng bộ UI kit.
- •Đa ngôn ngữ hoá giao diện ứng dụng desktop bằng mẫu with-next-i18next khi sản phẩm cần hơn một ngôn ngữ.
Điểm mạnh
- ✓Có bảng tương thích nêu rõ bản Next.js nào đi cùng bản Nextron nào, thay vì để việc tương thích phụ thuộc vào thử sai.
- ✓create-nextron-app đi kèm hàng chục mẫu ví dụ, phủ các bộ UI kit và cách dùng phổ biến, nên dự án mới bắt đầu từ mã đã chạy được.
- ✓Chỉ một lệnh cho phát triển: `npm run dev` mở Electron với dev server của Next.js đã kết nối sẵn.
- ✓Các cờ CLI đáp ứng nhu cầu đóng gói thực tế: cờ build theo nền tảng, lối thoát --no-pack, và --electron-options để truyền thẳng cờ của Electron như --no-sandbox.
- ✓Giấy phép MIT, kèm danh sách maintainer có tên cụ thể trong README thay vì chỉ một người duy nhất nắm dự án.
Hạn Chế Và Lưu Ý Hiện Tại
- △README không nêu phiên bản Node.js tối thiểu, bộ kiểm thử, hay trạng thái CI, nên khả năng tương thích lúc chạy là thứ bạn phải tự kiểm tra theo bảng phiên bản Next.js/Nextron.
- △Build bản macOS đòi hỏi máy chủ chạy macOS, theo đúng ghi chú build của README - không có cách build chéo bản Mac từ Linux hay Windows.
- △Yêu cầu static export nghĩa là không có server-side rendering của Next.js, không có API route lúc chạy, và không có tối ưu hoá ảnh sẵn có cho renderer.
- △Nâng cấp giữa các bản lớn không tự động: chuyển từ v9 lên v10 nghĩa là phải tự đổi tên main/background.ts thành main/main.ts và sửa trường main trong package.json bằng tay.
- △README dẫn tới một thảo luận 'Looking for maintainers', điều đáng chú ý với một dự án.
Lựa Chọn Thay Thế Cho Phát Triển Desktop
Câu Hỏi Thường Gặp
Nextron là một framework mã nguồn mở, được duy trì tại saltyshiomix/nextron, kết hợp Next.js và Electron để nhà phát triển web xây ứng dụng desktop bằng React và TypeScript thay vì các API gốc của Electron.
Chạy `npx create-nextron-app my-app --example with-tailwindcss`, hoặc tương đương với yarn/pnpm, đổi giá trị --example sang bất kỳ mẫu có sẵn nào như basic-lang-typescript hay with-chakra-ui.
Đặt script dev trong package.json thành `nextron` rồi chạy `npm run dev`. Nextron tự mở cửa sổ Electron, với dev server của Next.js hot reload renderer.
Đặt script build thành `nextron build` rồi chạy `npm run build`. Nextron xuất các bản đóng gói vào thư mục dist, dùng electron-builder.yml cho cấu hình đóng gói theo nền tảng.
README của Nextron nêu trực tiếp: Next.js v16.x cần Nextron v10.x, v14.x-v16.x cần v9.x, v12.x-v13.x cần v8.x, v11.x cần v7.x, v10.x cần v6.x, v9.x cần v5.x, v8.x cần v4.x, v7.x cần v2.x-v3.x, và v6.x cần v1.x.
Nextron cho tuỳ chỉnh quy trình build Electron qua electron-builder.yml, nơi khai báo appId, productName, thư mục output, và các file được đóng gói; --config trỏ tới file khác, còn --no-pack bỏ qua đóng gói hoàn toàn.
Vấn đề Nextron giải quyết
Gắn một framework frontend hiện đại vào Electron thường có nghĩa là viết một entry point cho tiến trình chính riêng, tự cấu hình một bundler cho nó, và tìm cách nạp output của dev server vào một BrowserWindow khác với bản build tĩnh cho production. Next.js còn thêm một điểm khó riêng: renderer phải chạy dưới dạng static export, tắt tối ưu hoá ảnh và server rendering, trước khi Electron nạp được. README của Nextron đóng khung lý do tồn tại của dự án quanh chi phí thiết lập đó, mô tả mục tiêu là cho nhà phát triển một cách xây ứng dụng desktop chỉ bằng kỹ năng web thông thường, giữ mọi thứ dễ dùng, và cởi mở với người đóng góp bên ngoài, rồi gói toàn bộ phần nối Next.js với Electron vào một CLI và các dự án mẫu thay vì phải tích hợp lại từ đầu mỗi lần.
Ai nên dùng — và ai nên bỏ qua
Hãy thử Nextron nếu đội của bạn đã xây dựng bằng Next.js và React và muốn có bản desktop mà không cần thêm một framework frontend thứ hai hay tự viết boilerplate cho tiến trình chính của Electron. Bỏ qua nếu bạn cần dung lượng cài đặt nhỏ hơn những gì Electron tạo ra - Nextron không thay đổi runtime của Electron - hoặc nếu ứng dụng của bạn cần server-side rendering và API route lúc chạy, vì yêu cầu static export loại bỏ khả năng đó.
Repo liên quan
Chưa chắc nextron có hợp với bạn?
Để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm bên dưới và xem AI nói gì về nextron.
