解决bun x create-next-app交互式提问时卡死问题
在 WSL Ubuntu 中运行 bun x create-next-app 时,常因终端交互异常卡在 TypeScript 选项界面;可通过禁用交互模式、显式传参或升级 Bun 至 v1.0.2+ 快速解决。 如果你正在 Windows Subsystem for Linux (WSL) 的 Ub
在 WSL Ubuntu 中运行 bun x create-next-app 时,常因终端交互异常卡在 TypeScript 选项界面;可通过禁用交互模式、显式传参或升级 Bun 至 v1.0.2+ 快速解决。
如果你正在 Windows Subsystem for Linux (WSL) 的 Ubuntu 环境下尝试用 Bun 创建 Next.js 项目,大概率会遇到一个令人困扰的情况:命令 bun x create-next-app 运行后,会在询问“是否使用 TypeScript”的环节突然卡住。键盘输入毫无反应,进程如同挂起,只能无奈地终止。
不必怀疑自己的操作,这其实是一个已知的兼容性问题。问题根源在于 Bun v1.0.1 及更早的版本,其底层对伪终端(PTY)的处理逻辑与某些 WSL 配置存在不兼容,导致交互式流程失效。
推荐解决方案(按优先级排序)
解决这个问题的路径很清晰,下面两种方法都能让你顺利完成任务。
1. 立即升级 Bun(最简修复)
这是最一劳永逸的办法。Bun 团队在 v1.0.2 及之后的版本中已经合并了针对此问题的修复补丁。你只需要在终端中执行一条升级命令:
bun upgrade
升级完成后,再次运行 bun x create-next-app,交互式提问便能恢复正常工作。
2. 跳过交互,使用非交互式模式(兼容性强)
如果你暂时不想升级,或者追求绝对稳定的创建流程,那么绕过交互式提问是更佳选择。直接通过命令行参数一次性指定所有配置,干净利落:
create-next-app my-app \ --ts \ --tailwind \ --eslint \ --app \ --src-dir \ --use-bun \ --import-alias "@/*"
提示:上面这条命令启用了一系列常用配置(TypeScript, Tailwind CSS, ESLint, App Router 等)。你可以根据项目实际需要,自由删减或调整这些参数。例如,去掉
--ts就意味着不使用 TypeScript。所有可用的标志都可以在 Next.js 官方文档的“非交互模式”部分找到。
注意事项
在实施解决方案时,有几点细节值得留意:
- 旧版 Bun 的临时对策:如果因故必须使用旧版 Bun,请尽量避免在 WSL 中依赖
bun x来启动任何交互式脚手架工具。可以优先采用上面提到的非交互式命令,或者临时改用npx create-next-app@latest作为替代方案。 - 终端环境:确保你的 WSL 终端是默认配置(比如使用 Windows Terminal 搭配 Ubuntu)。一些第三方的终端模拟器可能会加剧 PTY 的兼容性问题。
- 工具准备:在执行非交互式命令前,建议先全局安装最新版的 create-next-app 工具(
bun add -g create-next-app),以保证功能的完整性。
总结
简单来说,这个卡死问题本质上是 Bun 早期版本在 WSL 特定环境下的一个终端控制缺陷。社区在 issue #4664 中早已确认并修复了它。
因此,升级 Bun 是治本之策。而使用显式参数创建项目,不仅稳定可靠,还能让整个过程可脚本化,这本身就是适合 CI/CD 流程的最佳实践,值得养成习惯。
