go编写前端打包工具
npm run build打包工具
package main
import (
"fmt"
"os"
"os/exec"
"path/filepath"
)
func main() {
test1()
}
func test1() {
const buildC = "npm run build"
webPath := filepath.Join("./", "web")
distPath := filepath.Join("./", "dist")
var exists = func(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
// 是一个错误类型断言函数,用于检查 os.Stat 返回的错误是否是因为指定的文件或目录不存在
return false, nil
}
return false, nil
}
var removeDir = func(path string) error {
return os.RemoveAll(path)
}
var renameDir = func(oldPath, newPath string) error {
return os.Rename(oldPath, newPath)
}
// 1.简称web对应的文件是否存在,存在即删除
exist, err := exists(webPath)
if exist {
fmt.Println("删除旧文件,请稍等...")
if err := removeDir(webPath); err != nil {
fmt.Print(err)
return
}
fmt.Printf("移除文件:%v\n", webPath)
}
// 2.node编译
// cmd.exe 是 Windows 系统中的命令提示符。
// /C 参数表示执行命令后立即退出。
// "go version" 是要执行的命令字符串。
cmd := exec.Command("cmd", "/c", buildC)
fmt.Println("正在编译前端文件,请稍等...")
_, err2 := cmd.CombinedOutput()
if err != nil {
fmt.Printf("命令执行失败: %v\n", err2)
return
}
// 文件重命名
// 3.查看dist文件夹,存在将dist重命名为web
distExist, err := exists(distPath)
if distExist {
fmt.Println("重命名,请稍等...")
err := renameDir(distPath, webPath)
if err != nil {
fmt.Print(err)
}
}
const (
reset = "\033[0m"
green = "\033[32m"
)
fmt.Printf("%s编译完成%s\n", green, reset)
}
代码解释:
1. exec.Command:
- exec.Command 用于创建一个新的命令对象。第一个参数是命令的名称(如 npm),后续参数是命令的参数(如 run build)。
2. cmd.Dir:
- cmd.Dir 用于设置命令的工作目录。如果你的 npm run build 命令需要在特定的项目目录下运行,可以设置这个属性。如果不设置,默认为当前工作目录。
3 .cmd.CombinedOutput:
- cmd.CombinedOutput 用于执行命令并捕获命令的标准输出和标准错误输出。返回的 output 是命令的输出内容,err 是执行过程中可能发生的错误。
4.错误处理
- 如果命令执行失败,err 将不为 nil,你可以根据需要处理错误。
5. 打印输出:
- 将命令的输出内容转换为字符串并打印出来。
6.编译成可执行文件
go build -o compiler.exe ./main.go