// workspace: path of tsconfig.json public static void CompileBytecode(string workspace) { var commonJSModule = false; var tsconfigPath = string.IsNullOrEmpty(workspace) ? "tsconfig.json" : Path.Combine(workspace, "tsconfig.json"); if (File.Exists(tsconfigPath)) { var text = Utils.TextUtils.NormalizeJson(File.ReadAllText(tsconfigPath)); var tsconfig = JsonUtility.FromJson <TSConfig>(text); var module = tsconfig.compilerOptions.module; if (module == "commonjs") { commonJSModule = true; Debug.LogFormat("read tsconfig.json: compile as commonjs module mode"); } } else { Debug.LogFormat("no tsconfig.json found, compile as ES6 module mode"); } using (var compiler = new UnityJSScriptCompiler()) { var objects = Selection.objects; for (var i = 0; i < objects.Length; ++i) { var obj = objects[i]; var assetPath = AssetDatabase.GetAssetPath(obj); CompileBytecode(compiler, assetPath, commonJSModule); } } }
private static void CompileBytecode(UnityJSScriptCompiler compiler, string assetPath, bool commonJSModule) { if (Directory.Exists(assetPath)) { foreach (var subDir in Directory.GetDirectories(assetPath)) { CompileBytecode(compiler, subDir, commonJSModule); } foreach (var subFile in Directory.GetFiles(assetPath)) { CompileBytecode(compiler, subFile, commonJSModule); } } else { if (!string.IsNullOrEmpty(assetPath) && assetPath.EndsWith(".js")) { var outPath = assetPath + ".bytes"; var bytes = File.ReadAllBytes(assetPath); var bytecode = compiler.Compile(assetPath, bytes, commonJSModule); if (bytecode != null) { File.WriteAllBytes(outPath, bytecode); Debug.LogFormat("compile {0}({1}) => {2}({3})", assetPath, bytes.Length, outPath, bytecode.Length); } else { Debug.LogErrorFormat("compilation failed: {0}", assetPath); if (File.Exists(outPath)) { File.Delete(outPath); } } } } }