package main import ( "fmt" "os" "os/exec" "io/ioutil" "strings" ) /* 用golang exec 总是说找不到uglifyjs命令, 需要全部路径 而且node, npm要在/usr/bin下, 已建ln */ /* */ //var jss = []string{"js/jquery-cookie", "js/bootstrap"} var jss = []string{"js/jquery-cookie", "js/bootstrap", "js/common", "js/app/note", "js/app/tag", "js/app/notebook", "js/app/share", "js/object_id", "js/ZeroClipboard/ZeroClipboard"} var base1 = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/" var base = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/public/" var cmdPath = "/usr/local/bin/uglifyjs" func cmdError(err error) { if err != nil { fmt.Println(err) fmt.Fprintf(os.Stderr, "The command failed to perform: %s (Command: %s, Arguments: %s)", err, "", "") } else { fmt.Println("OK") } } // filename没有扩展名 func compressJs(filename string) { source := base + filename + ".js" to := base + filename + "-min.js" cmd := exec.Command(cmdPath, source, "-o", to) _, err := cmd.CombinedOutput() cmdError(err) } func combineJs() { // 生成一个总文件 cmd := exec.Command("rm", base + "js/all.js") _, err := cmd.CombinedOutput() cmdError(err) for _, js := range jss { to := base + js + "-min.js" fmt.Println(to) compressJs(js) // 每个压缩后的文件放入之 cmd2 := exec.Command("/bin/sh", "-c", "cat " + to + " >> " + base + "js/all.js") _, err := cmd2.CombinedOutput() cmdError(err) cmd2 = exec.Command("/bin/sh", "-c", "cat \n >> " + base + "js/all.js") _, err = cmd2.CombinedOutput() cmdError(err) } } // 改note-dev->note func dev() { // 即替换note.js->note-min.js m := map[string]string{"note.js": "note-min.js", "app.js": "app-min.js", "page.js": "page-min.js", "common.js": "common-min.js", "notebook.js": "notebook-min.js", "share.js": "share-min.js", "tag.js": "tag-min.js", "main.js": "main-min.js", "jquery.contextmenu.js": "jquery.contextmenu-min.js", "editor/editor.js": "editor/editor-min.js", "/public/mdeditor/editor/scrollLink.js": "/public/mdeditor/editor/scrollLink-min.js", "console.log(o);": "", } path := base1 + "/src/views/note/note-dev.html" target := base1 + "/src/views/note/note.html" bs, _ := ioutil.ReadFile(path) content := string(bs) print(content) for key, value := range m { content = strings.Replace(content, key, value, -1) } ioutil.WriteFile(target, []byte(content), os.ModeAppend) } // 压缩js成一块 func tinymce() { // cmdStr := "node_modules/jake/bin/cli.js minify bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]" // cmd := exec.Command("/Users/life/Documents/eclipse-workspace/go/leanote_release/tinymce-master/node_modules/jake/bin/cli.js", "minify", "bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]") cmd := exec.Command("/Users/life/Documents/eclipse-workspace/go/leanote_release/tinymce-master/node_modules/jake/bin/cli.js", "minify") cmd.Dir = "/Users/life/Documents/eclipse-workspace/go/leanote_release/tinymce-master" c, err := cmd.CombinedOutput() fmt.Println(string(c)) cmdError(err) } func main() { dev(); // 其它零散的需要压缩的js otherJss := []string{"tinymce/tinymce", "js/main", "js/app/page", "js/contextmenu/jquery.contextmenu", "mdeditor/editor/scrollLink", "mdeditor/editor/editor", "mdeditor/editor/jquery.waitforimages", "mdeditor/editor/pagedown/local/Markdown.local.zh", "mdeditor/editor/pagedown/local/Markdown.local.en", "mdeditor/editor/pagedown/Markdown.Editor", "mdeditor/editor/pagedown/Markdown.Sanitizer", "mdeditor/editor/pagedown/Markdown.Converter", "mdeditor/editor/Markdown.Extra", "mdeditor/editor/underscore", "mdeditor/editor/mathJax", "js/jQuery-slimScroll-1.3.0/jquery.slimscroll", } for _, js := range otherJss { compressJs(js) } // 先压缩后合并 combineJs() // 压缩tinymce tinymce() }