go写前端打包的自动化工具

发布于:2025-07-02 ⋅ 阅读:(23) ⋅ 点赞:(0)

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

网站公告

今日签到

点亮在社区的每一天
去签到