index.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. exports.compileApp = void 0;
  7. const path_1 = __importDefault(require("path"));
  8. const fs_extra_1 = __importDefault(require("fs-extra"));
  9. const kotlin_1 = require("../kotlin");
  10. const stacktrace_1 = require("../stacktrace");
  11. const utils_1 = require("../utils");
  12. const shared_1 = require("../shared");
  13. const DEFAULT_IMPORTS = [
  14. 'kotlinx.coroutines.async',
  15. 'kotlinx.coroutines.CoroutineScope',
  16. 'kotlinx.coroutines.Deferred',
  17. 'kotlinx.coroutines.Dispatchers',
  18. 'io.dcloud.uts.Map',
  19. 'io.dcloud.uts.UTSAndroid',
  20. 'io.dcloud.uts.*',
  21. 'io.dcloud.uts.framework.*',
  22. 'io.dcloud.uts.vue.*',
  23. 'io.dcloud.uts.vue.shared.*',
  24. 'io.dcloud.uts.vue.reactivity.*',
  25. 'io.dcloud.uniapp.runtime.*',
  26. ];
  27. async function compileApp(entry, options) {
  28. const { bundle, UTSTarget } = (0, utils_1.getUTSCompiler)();
  29. const imports = [...DEFAULT_IMPORTS];
  30. const { package: pkg, inputDir, outputDir, sourceMap, uni_modules, extApis, } = options;
  31. const input = {
  32. root: inputDir,
  33. filename: entry,
  34. paths: {
  35. vue: 'io.dcloud.uts.vue',
  36. },
  37. uniModules: uni_modules,
  38. globals: {
  39. envs: {
  40. // 自动化测试
  41. UNI_AUTOMATOR_WS_ENDPOINT: process.env.UNI_AUTOMATOR_WS_ENDPOINT || '',
  42. },
  43. },
  44. };
  45. const bundleOptions = {
  46. input,
  47. output: {
  48. isX: true,
  49. isPlugin: false,
  50. outDir: outputDir,
  51. package: pkg,
  52. sourceMap: sourceMap !== false ? (0, utils_1.resolveUTSSourceMapPath)() : false,
  53. extname: 'kt',
  54. imports,
  55. logFilename: true,
  56. noColor: true,
  57. transform: {
  58. uniExtApiDefaultNamespace: 'io.dcloud.uts.extapi',
  59. uniExtApiNamespaces: extApis,
  60. uvueClassNamePrefix: 'Gen',
  61. },
  62. },
  63. };
  64. const result = await bundle(UTSTarget.KOTLIN, bundleOptions);
  65. if (!result) {
  66. return;
  67. }
  68. if (result.error) {
  69. throw (0, stacktrace_1.parseUTSSyntaxError)(result.error, inputDir);
  70. }
  71. if (process.env.NODE_ENV !== 'development') {
  72. return runKotlinBuild(options, result);
  73. }
  74. return runKotlinDev(options, result);
  75. }
  76. exports.compileApp = compileApp;
  77. async function runKotlinDev(options, result) {
  78. result.type = 'kotlin';
  79. result.changed = [];
  80. const { inputDir, outputDir } = options;
  81. const kotlinFile = path_1.default.resolve(outputDir, result.filename);
  82. // 开发模式下,需要生成 dex
  83. if (fs_extra_1.default.existsSync(kotlinFile)) {
  84. const compilerServer = (0, utils_1.getCompilerServer)('uniapp-runextension');
  85. if (!compilerServer) {
  86. throw `项目使用了uts插件,正在安装 uts Android 运行扩展...`;
  87. }
  88. const { getDefaultJar, getKotlincHome, compile: compileDex, } = compilerServer;
  89. const cacheDir = process.env.HX_DEPENDENCIES_DIR || '';
  90. // time = Date.now()
  91. const jarFile = (0, kotlin_1.resolveJarPath)('app-android', '', '', kotlinFile);
  92. const options = {
  93. kotlinc: (0, kotlin_1.resolveKotlincArgs)(kotlinFile, jarFile, getKotlincHome(), getDefaultJar(2)
  94. .concat((0, kotlin_1.getUniModulesCacheJars)(cacheDir))
  95. .concat((0, kotlin_1.getUniModulesJars)(outputDir))),
  96. d8: (0, kotlin_1.resolveD8Args)(jarFile),
  97. sourceRoot: inputDir,
  98. sourceMapPath: (0, utils_1.resolveSourceMapFile)(outputDir, kotlinFile),
  99. };
  100. const res = await compileDex(options, inputDir);
  101. // console.log('dex compile time: ' + (Date.now() - time) + 'ms')
  102. if (res) {
  103. try {
  104. fs_extra_1.default.unlinkSync(jarFile);
  105. // 短期内先不删除,方便排查问题
  106. // fs.unlinkSync(kotlinFile)
  107. }
  108. catch (e) { }
  109. const dexFile = (0, kotlin_1.resolveDexFile)(jarFile);
  110. if (fs_extra_1.default.existsSync(dexFile)) {
  111. result.changed = [(0, shared_1.normalizePath)(path_1.default.relative(outputDir, dexFile))];
  112. }
  113. }
  114. }
  115. return result;
  116. }
  117. async function runKotlinBuild(options, result) {
  118. const { outputDir } = options;
  119. const kotlinFile = path_1.default.resolve(outputDir, result.filename);
  120. fs_extra_1.default.moveSync(kotlinFile, path_1.default.resolve(outputDir, '.uniappx/android/src/' + path_1.default.basename(result.filename)));
  121. }