示例#1
0
 private void BuildScript(string path, VueFile vueFile, StringBuilder compiledText)
 {
     if (vueFile.Script is null)
     {
         throw new VueBuildException($"{path}: Missing <script>");
     }
     else
     {
         if (vueFile.ScriptLang == "js" || vueFile.ScriptLang == "javascript")
         {
             var script = vueFile.Script.Replace("export default ", "return {export:Object.assign({template},").Trim().TrimEnd(';');
             compiledText.Append($"{script})}}");
         }
         else if (vueFile.ScriptLang == "ts" || vueFile.ScriptLang == "typescript")
         {
             var tsFile = path + ".ts";
             var task   = tsWatcher.WaitForBuild(tsFile);
             // if (File.Exists(tsFile)) {
             //   File.Delete(tsFile);
             // }
             // Console.WriteLine($"writing file {tsFile}");
             File.WriteAllText(tsFile, vueFile.Script);
             // Console.WriteLine($"waiting for tsc...");
             var script = task.Result.Replace("export default ", "return {export:Object.assign({template},").Trim().TrimEnd(';');
             compiledText.Append($"{script})}}");
         }
         else
         {
             throw new VueBuildException($"{path}: Unsupported <script> lang '{vueFile.ScriptLang}'");
         }
     }
 }
示例#2
0
        protected override void OnFileChanged(FileSystemEventArgs e)
        {
            builder.WriteInfo($"[Vue] {e.Name} changed.");
            var source       = File.ReadAllText(e.FullPath);
            var vueFile      = new VueFile(source);
            var compiledText = new StringBuilder("");

            BuildTemplate(e.FullPath, vueFile, compiledText);
            BuildStyle(e.FullPath, vueFile, compiledText);
            BuildScript(e.FullPath, vueFile, compiledText);
            var minFile  = $"min{Path.DirectorySeparatorChar + Path.GetFileName(e.FullPath)}.min.js";
            var minifier = new JavascriptMinifier();

            File.WriteAllText(minFile, minifier.Minify(compiledText.ToString()));
            builder.UpdateCachedMinFile(minFile);
            cache.AddCache(e.FullPath);
            cache.SaveCache();
        }
示例#3
0
 private void BuildTemplate(string path, VueFile vueFile, StringBuilder compiledText)
 {
     if (vueFile.Tamplate is null)
     {
         throw new VueBuildException($"{path}: Missing <tamplate>");
     }
     else
     {
         var uglifyHtml = new UglifyHtml();
         if (vueFile.TamplateLang == "html")
         {
             compiledText.Append($"const template = /*html*/`{uglifyHtml.Run(vueFile.Tamplate)}`;");
         }
         else
         {
             throw new VueBuildException($"{path}: Unsupported <template> lang '{vueFile.TamplateLang}'");
         }
     }
 }
示例#4
0
 private void BuildStyle(string path, VueFile vueFile, StringBuilder compiledText)
 {
     if (vueFile.Style != null)
     {
         var styleID   = Path.ChangeExtension(Path.GetFileName(path), null).Replace(".", "-") + "-style";
         var uglifyCss = new UglifyCss();
         if (vueFile.StyleLang == "css")
         {
             compiledText.Append($"resources.applyStyleFromText(`{uglifyCss.Run(vueFile.Style)}`,'{styleID}');");
         }
         else if (vueFile.StyleLang == "scss")
         {
             var sass = new SassSingleCompiler();
             var css  = uglifyCss.Run(sass.Run(vueFile.Style).Replace("@charset \"UTF-8\";", ""));
             compiledText.Append($"resources.applyStyleFromText(`{css}`,'{styleID}');");
         }
         else
         {
             throw new VueBuildException($"{path}: Unsupported <style> lang '{vueFile.StyleLang}'");
         }
     }
 }