示例#1
0
        public ProjectBuilder BuildClient()
        {
            var source = File.ReadAllText("client/bilibili-evolved.js");

            source = RegexReplacer.Replace(source, @"import (.*) from [""'](.*)[""'];", match =>
            {
                var module = File.ReadAllText("client/" + match.Groups[2].Value.Replace("./", "") + ".js").Replace("export ", "");
                return(module);
            });
            File.WriteAllText(SourcePath, source);
            Source = File.ReadAllText(SourcePath);
            WriteSuccess("Client Build complete.");
            return(this);
        }
        public ProjectBuilder BuildTypeScripts()
        {
            var tsc      = new BabelCompiler();
            var uglifyJs = new JavascriptMinifier();
            var files    = ResourceMinifier.GetFiles(file =>
                                                     file.Extension == ".ts" &&
                                                     !file.Name.EndsWith(".d.ts")
                                                     );

            using (var cache = new BuildCache())
            {
                var changedFiles = files.Where(file => !cache.Contains(file)).ToArray();
                if (changedFiles.Any())
                {
                    string getOutputCacheFilename(string f)
                    {
                        return(".ts-output/" + f
                               .Replace(".ts", ".js")
                               .Replace($"src{Path.DirectorySeparatorChar}", ""));
                    }

                    changedFiles.ForEach(file => {
                        cache.AddCache(file);
                        WriteInfo($"TypeScript build: {file}");
                    });
                    WriteInfo(tsc.Run("").Trim());
                    Parallel.ForEach(changedFiles
                                     .Where(f => !f.EndsWith(".vue.ts")),
                                     f => {
                        // var tsc = new BabelSingleCompiler(file);
                        // var js = tsc.Run(File.ReadAllText(file));
                        // File.WriteAllText(getOutputCacheFilename(file), js);
                        var file = getOutputCacheFilename(f);
                        var text = RegexReplacer.Replace(File.ReadAllText(file), @"import\(\(\(\)\s*=>\s*(.*)\)\(\)\)", match =>
                        {
                            return($"import({match.Groups[1].Value})");
                        });
                        var min     = uglifyJs.Minify(text);
                        var minFile = ResourceMinifier.GetMinimizedFileName(file);
                        File.WriteAllText(minFile, min);
                        UpdateCachedMinFile(minFile);
                        // WriteHint($"\t=> {minFile}");
                    });
                }
                cache.SaveCache();
            }
            WriteSuccess("TypeScript build complete.");
            return(this);
        }