uvue.js 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.buildUVue = exports.runUVueAndroidBuild = exports.runUVueAndroidDev = exports.initUVueEnv = void 0;
  4. const vite_1 = require("vite");
  5. const shared_1 = require("@vue/shared");
  6. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  7. const build_1 = require("./build");
  8. const utils_1 = require("./utils");
  9. const easycom_1 = require("../utils/easycom");
  10. function initUVueEnv() {
  11. // 直接指定了
  12. if (process.env.UNI_APP_X === 'false') {
  13. return;
  14. }
  15. const manifestJson = (0, uni_cli_shared_1.parseManifestJsonOnce)(process.env.UNI_INPUT_DIR);
  16. const isNVueEnabled = (0, shared_1.hasOwn)(manifestJson, 'uni-app-x');
  17. if (!isNVueEnabled) {
  18. return;
  19. }
  20. process.env.UNI_APP_X = 'true';
  21. if (manifestJson['uni-app-x']?.singleThread === false) {
  22. process.env.UNI_APP_X_SINGLE_THREAD = 'false';
  23. }
  24. }
  25. exports.initUVueEnv = initUVueEnv;
  26. async function runUVueAndroidDev(options) {
  27. if (options.platform !== 'app') {
  28. (0, uni_cli_shared_1.output)('error', uni_cli_shared_1.M['uvue.unsupported'].replace('{platform}', options.platform));
  29. return process.exit(0);
  30. }
  31. (0, easycom_1.initEasycom)();
  32. const watcher = (await buildUVue(options));
  33. let isFirstStart = true;
  34. let isFirstEnd = true;
  35. watcher.on('event', (event) => {
  36. if (event.code === 'BUNDLE_START') {
  37. if (isFirstStart) {
  38. isFirstStart = false;
  39. return;
  40. }
  41. (0, uni_cli_shared_1.output)('log', uni_cli_shared_1.M['dev.watching.start']);
  42. // 重置一下,uts编译报错会导致下一次开始差量编译紧接着上一次的差量编译,导致无法正常输出
  43. (0, uni_cli_shared_1.resetOutput)('log');
  44. }
  45. else if (event.code === 'BUNDLE_END') {
  46. event.result.close();
  47. const dex = process.env.UNI_APP_UTS_CHANGED_FILES;
  48. process.env.UNI_APP_UTS_CHANGED_FILES = '';
  49. if (isFirstEnd) {
  50. // 首次全量同步
  51. isFirstEnd = false;
  52. (0, uni_cli_shared_1.output)('log', uni_cli_shared_1.M['dev.watching.end']);
  53. (0, utils_1.printStartupDuration)((0, vite_1.createLogger)(options.logLevel), false);
  54. return;
  55. }
  56. if (dex) {
  57. const files = JSON.parse(dex);
  58. if (!files.length) {
  59. // 本次无变动
  60. return (0, uni_cli_shared_1.output)('log', uni_cli_shared_1.M['uvue.dev.watching.end.empty']);
  61. }
  62. return (0, uni_cli_shared_1.output)('log', uni_cli_shared_1.M['dev.watching.end.files'].replace('{files}', JSON.stringify(files)));
  63. }
  64. return (0, uni_cli_shared_1.output)('log', uni_cli_shared_1.M['dev.watching.end']);
  65. }
  66. });
  67. }
  68. exports.runUVueAndroidDev = runUVueAndroidDev;
  69. async function runUVueAndroidBuild(options) {
  70. try {
  71. (0, uni_cli_shared_1.initEasycomsOnce)(process.env.UNI_INPUT_DIR, {
  72. dirs: [(0, uni_cli_shared_1.resolveComponentsLibPath)()],
  73. platform: process.env.UNI_PLATFORM,
  74. isX: true,
  75. });
  76. await buildUVue(options);
  77. console.log(uni_cli_shared_1.M['build.done']);
  78. }
  79. catch (e) {
  80. console.error(`Build failed with errors.`);
  81. process.exit(1);
  82. }
  83. }
  84. exports.runUVueAndroidBuild = runUVueAndroidBuild;
  85. /**
  86. * 目前的简易实现逻辑
  87. * node层:
  88. * 1. 监听项目,生成资源到临时目录 .uts/android
  89. * 2. uvue 文件,做解析,拆分生成 render.kt, css.kt, uts.uvue
  90. * 3. static 文件,copy 到最终目录
  91. * 4. uvue、vue、uts 文件发生变化,调用 uts 编译器
  92. * @param options
  93. */
  94. async function buildUVue(options) {
  95. return (0, build_1.buildByVite)((0, utils_1.addConfigFile)((0, shared_1.extend)({ nvueAppService: true, uvue: true }, (0, build_1.initBuildOptions)(options, (0, utils_1.cleanOptions)(options)))));
  96. }
  97. exports.buildUVue = buildUVue;