private void ReadIndex() { string text = File.ReadAllText(indexPath); Lexer lexer = new Lexer(text); Parser parser = new Parser(lexer); NodeList htmlNodes = parser.Parse(new OrFilter(new NodeClassFilter(typeof(RemarkNode)), new NodeClassFilter(typeof(ScriptTag)))); MergeJSData mergeJSData = null; for (int i = 0; i < htmlNodes.Count; i++) { var node = htmlNodes[i]; ScriptTag script = node as ScriptTag; RemarkNode remark = node as RemarkNode; if (remark != null) { string remarkText = remark.GetText(); if (remarkText.StartsWith("MergeJSBegin")) { mergeJSData = new MergeJSData(); mergeJSData.name = remarkText.Split(":")[1].Trim(); list.Add(mergeJSData); } else if (remarkText.StartsWith("MergeJSEnd")) { mergeJSData = null; } } if (script != null) { if (mergeJSData != null) { mergeJSData.AddPath(script.GetAttribute("src")); } } } }
public void Run(IndexType indexType) { this.indexType = indexType; string indexTmp = null; switch (indexType) { case IndexType.Merge: indexTmp = Setting.Options.binCache + "/index-merge.html"; break; case IndexType.Min: indexTmp = Setting.Options.binCache + "/index-min.html"; break; } string indexSave = null; switch (indexType) { case IndexType.Merge: indexSave = Setting.Options.binRelease + "/index-merge.html"; break; case IndexType.Min: indexSave = Setting.Options.binRelease + "/index-min.html"; break; } string indexHtml = Setting.Options.binRelease + "/index.html"; if (File.Exists(indexHtml)) { if (File.ReadAllLines(indexHtml).Length > 100) { string indexBak = Setting.Options.binRelease + "/index-src.html"; PathHelper.CheckPath(indexBak); if (File.Exists(indexBak)) { File.Delete(indexBak); } File.Copy(indexHtml, indexBak); } } string text = File.ReadAllText(indexTmp); Lexer lexer = new Lexer(text); Parser parser = new Parser(lexer); NodeList htmlNodes = parser.Parse(new NodeClassFilter(typeof(ScriptTag))); List <string> folders = new List <string> (); for (int i = 0; i < htmlNodes.Count; i++) { var node = htmlNodes[i]; ScriptTag script = node as ScriptTag; if (script != null) { string key = script.GetAttribute("src").Trim(); key = Path.GetDirectoryName(key); if (folders.IndexOf(key) == -1) { Console.WriteLine("Folder:" + key); folders.Add(key); } } } List <string> list = new List <string>(); foreach (string folder in folders) { string path = Setting.Options.binRelease + "/" + folder; if (!Directory.Exists(path)) { Console.WriteLine($"不存在目录 {path}"); continue; } string[] files = Directory.GetFiles(path, "*.js"); list.AddRange(files); } Dictionary <string, long> dateDict = new Dictionary <string, long>(); Dictionary <string, string> dict = new Dictionary <string, string>(); foreach (string path in list) { FileInfo fileInfo = new FileInfo(path); long time = fileInfo.LastWriteTime.ToFileTime(); string js = path.Replace("\\", "/").Replace(Setting.Options.binRelease + "/", ""); string key = js; key = key.Substring(0, key.Length - 11) + ".js"; if (dateDict.ContainsKey(key)) { if (time > dateDict[key]) { dateDict[key] = time; dict[key] = js; } } else { dateDict.Add(key, time); dict.Add(key, js); } } for (int i = 0; i < htmlNodes.Count; i++) { var node = htmlNodes[i]; ScriptTag script = node as ScriptTag; if (script != null) { Console.WriteLine(script.GetAttribute("src")); string key = script.GetAttribute("src").Trim(); if (dict.ContainsKey(key)) { text = text.Replace(key, dict[key]); } } } File.WriteAllText(indexSave, text); File.WriteAllText(indexHtml, text); }