如何通过Golang exec库执行bun create vite并选择Lit框架?
解决方法
方法一:使用非交互式命令参数(推荐)
大部分脚手架工具都支持通过命令行参数直接指定选项,跳过交互流程。对于bun create vite,你可以追加-- --template lit参数直接指定Lit框架,无需处理交互菜单:
package main import ( "os" "os/exec" ) func main() { // 直接指定template参数,跳过交互流程 cmd := exec.Command("bun", "create", "vite", "lit-element", "--", "--template", "lit") // 将命令输出绑定到当前终端,方便查看执行过程 cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { panic(err) } }
这里的--用于分隔bun命令和传递给vite create的参数,--template lit会告诉Vite直接使用Lit模板创建项目,完全跳过交互选择步骤。
方法二:通过标准输入模拟交互选择
如果必须通过交互菜单选择(比如工具不支持参数指定),你可以将选择内容写入命令的标准输入流。首先需要确认「Select a framework」菜单中Lit对应的选项序号或文本(比如假设Lit是列表中的第3个选项),代码实现如下:
package main import ( "io" "os" "os/exec" ) func main() { cmd := exec.Command("bun", "create", "vite", "lit-element") // 获取命令的标准输入管道 stdin, err := cmd.StdinPipe() if err != nil { panic(err) } defer stdin.Close() // 绑定命令输出到当前终端 cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr // 启动命令 if err := cmd.Start(); err != nil { panic(err) } // 向标准输入写入选择内容(根据实际菜单序号调整,这里假设Lit对应输入"3") _, err = io.WriteString(stdin, "3\n") if err != nil { panic(err) } // 等待命令执行完成 if err := cmd.Wait(); err != nil { panic(err) } }
注意:这种方法依赖于菜单的选项顺序,一旦脚手架更新调整了菜单结构,代码就会失效,因此优先推荐方法一。
内容的提问来源于stack exchange,提问作者David Serrano
相关产品推荐
相关产品推荐

