package main import ( "fmt" "github.com/ssgo/u" "os" "path/filepath" "strings" ) func main() { homeDir, _ := os.UserHomeDir() if !u.FileExists("../gojs.go") { fmt.Println(u.Red("请在gojs的项目跟目录中运行")) return } r, err := u.RunCommand("go", "get", "-u", "github.com/dop251/goja") fmt.Println(err) fmt.Println(strings.Join(r, "\n")) r, err = u.RunCommand("go", "get", "-u", "github.com/dop251/goja_nodejs") fmt.Println(err) fmt.Println(strings.Join(r, "\n")) r, err = u.RunCommand("go", "get", "-u", "github.com/dop251/base64dec") fmt.Println(err) fmt.Println(strings.Join(r, "\n")) gojaPkgPath := "" gojaPkgVer := int64(0) gojaNodejsPkgPath := "" gojaNodejsPkgVer := int64(0) gojaB64PkgPath := "" gojaB64PkgVer := int64(0) for _, f := range u.ReadDirN(homeDir + "/go/pkg/mod/github.com/dop251/") { if f.IsDir && strings.HasPrefix(f.Name, "goja@") { a := strings.Split(f.Name, "-") ver := u.Int64(a[1]) if ver > gojaPkgVer { gojaPkgPath = f.FullName gojaPkgVer = ver } } else if f.IsDir && strings.HasPrefix(f.Name, "goja_nodejs@") { a := strings.Split(f.Name, "-") ver := u.Int64(a[1]) if ver > gojaNodejsPkgVer { gojaNodejsPkgPath = f.FullName gojaNodejsPkgVer = ver } } else if f.IsDir && strings.HasPrefix(f.Name, "base64dec@") { a := strings.Split(f.Name, "-") ver := u.Int64(a[1]) if ver > gojaB64PkgVer { gojaB64PkgPath = f.FullName gojaB64PkgVer = ver } } } _ = os.RemoveAll("../dop251") u.CopyFile(gojaPkgPath, "../dop251/goja") _ = os.Remove("../dop251/goja/go.mod") _ = os.Remove("../dop251/goja/go.sum") replacePackage("../dop251/goja") u.CopyFile(gojaNodejsPkgPath, "../dop251/goja_nodejs") _ = os.Remove("../dop251/goja_nodejs/go.mod") _ = os.Remove("../dop251/goja_nodejs/go.sum") replacePackage("../dop251/goja_nodejs") u.CopyFile(gojaB64PkgPath, "../dop251/base64dec") _ = os.Remove("../dop251/base64dec/go.mod") _ = os.Remove("../dop251/base64dec/go.sum") replacePackage("../dop251/base64dec") _ = os.Chdir("..") r, err = u.RunCommand("go", "mod", "tidy") fmt.Println(err) fmt.Println(strings.Join(r, "\n")) } func replacePackage(root string) { for _, f := range u.ReadDirN(root) { if f.IsDir { if !strings.HasPrefix(f.Name, ".") { replacePackage(filepath.Join(f.FullName)) } else { _ = os.RemoveAll(f.FullName) } } else if strings.HasSuffix(f.Name, ".go") && !strings.HasSuffix(f.Name, "_test.go") { str := u.ReadFileN(f.FullName) if strings.Contains(str, "github.com/dop251/") { str = strings.ReplaceAll(str, "github.com/dop251/", "apigo.cc/apigo/gojs/dop251/") if strings.HasSuffix(f.FullName, "/dop251/goja/runtime.go") { str = strings.ReplaceAll(str, "type Runtime struct {", "type Runtime struct {\n\tGoData map[string]any") } _ = u.WriteFile(f.FullName, str) fmt.Println(u.BGreen("文件更新"), u.Green(f.FullName)) } } else { _ = os.Remove(f.FullName) } } }