pages.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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.mergeMiniProgramAppJson = exports.parseMiniProgramPagesJson = void 0;
  7. const fs_1 = __importDefault(require("fs"));
  8. const path_1 = __importDefault(require("path"));
  9. const shared_1 = require("@vue/shared");
  10. const json_1 = require("../json");
  11. const pages_1 = require("../pages");
  12. const utils_1 = require("./utils");
  13. const utils_2 = require("../../utils");
  14. const project_1 = require("./project");
  15. const manifest_1 = require("../manifest");
  16. const theme_1 = require("../theme");
  17. function parseMiniProgramPagesJson(jsonStr, platform, options = { subpackages: false }) {
  18. return parsePagesJson(jsonStr, platform, options);
  19. }
  20. exports.parseMiniProgramPagesJson = parseMiniProgramPagesJson;
  21. const NON_APP_JSON_KEYS = [
  22. 'unipush',
  23. 'secureNetwork',
  24. 'usingComponents',
  25. 'optimization',
  26. 'scopedSlotsCompiler',
  27. 'uniStatistics',
  28. 'mergeVirtualHostAttributes',
  29. 'styleIsolation',
  30. ];
  31. function mergeMiniProgramAppJson(appJson, platformJson = {}) {
  32. Object.keys(platformJson).forEach((name) => {
  33. if (!(0, project_1.isMiniProgramProjectJsonKey)(name) &&
  34. !NON_APP_JSON_KEYS.includes(name)) {
  35. appJson[name] = platformJson[name];
  36. }
  37. });
  38. }
  39. exports.mergeMiniProgramAppJson = mergeMiniProgramAppJson;
  40. function parsePagesJson(jsonStr, platform, { debug, darkmode, networkTimeout, subpackages, windowOptionsMap, tabBarOptionsMap, tabBarItemOptionsMap, } = {
  41. subpackages: false,
  42. }) {
  43. let appJson = {
  44. pages: [],
  45. };
  46. let pageJsons = {};
  47. let nvuePages = [];
  48. // preprocess
  49. const pagesJson = (0, json_1.parseJson)(jsonStr, true);
  50. if (!pagesJson) {
  51. throw new Error(`[vite] Error: pages.json parse failed.\n`);
  52. }
  53. function addPageJson(pagePath, style) {
  54. const filename = path_1.default.join(process.env.UNI_INPUT_DIR, pagePath);
  55. if (fs_1.default.existsSync(filename + '.nvue') &&
  56. !fs_1.default.existsSync(filename + '.vue')) {
  57. nvuePages.push(pagePath);
  58. }
  59. const windowOptions = {};
  60. if (platform === 'mp-baidu') {
  61. // 仅百度小程序需要页面配置 component:true
  62. // 快手小程序反而不能配置 component:true,故不能统一添加,目前硬编码处理
  63. windowOptions.component = true;
  64. }
  65. pageJsons[pagePath] = (0, shared_1.extend)(windowOptions, (0, utils_1.parseWindowOptions)(style, platform, windowOptionsMap));
  66. }
  67. // pages
  68. (0, pages_1.validatePages)(pagesJson, jsonStr);
  69. pagesJson.pages.forEach((page) => {
  70. appJson.pages.push(page.path);
  71. addPageJson(page.path, page.style);
  72. });
  73. // subpackages
  74. pagesJson.subPackages = pagesJson.subPackages || pagesJson.subpackages;
  75. if (pagesJson.subPackages) {
  76. if (subpackages) {
  77. appJson.subPackages = pagesJson.subPackages.map(({ root, pages, ...rest }) => {
  78. return (0, shared_1.extend)({
  79. root,
  80. pages: pages.map((page) => {
  81. addPageJson((0, utils_2.normalizePath)(path_1.default.join(root, page.path)), page.style);
  82. return page.path;
  83. }),
  84. }, rest);
  85. });
  86. }
  87. else {
  88. pagesJson.subPackages.forEach(({ root, pages }) => {
  89. pages.forEach((page) => {
  90. const pagePath = (0, utils_2.normalizePath)(path_1.default.join(root, page.path));
  91. appJson.pages.push(pagePath);
  92. addPageJson(pagePath, page.style);
  93. });
  94. });
  95. }
  96. }
  97. // window
  98. if (pagesJson.globalStyle) {
  99. const windowOptions = (0, utils_1.parseWindowOptions)(pagesJson.globalStyle, platform, windowOptionsMap);
  100. const { usingComponents } = windowOptions;
  101. if (usingComponents) {
  102. delete windowOptions.usingComponents;
  103. appJson.usingComponents = usingComponents;
  104. }
  105. else {
  106. delete appJson.usingComponents;
  107. }
  108. appJson.window = windowOptions;
  109. }
  110. // tabBar
  111. if (pagesJson.tabBar) {
  112. const tabBar = (0, utils_1.parseTabBar)(pagesJson.tabBar, platform, tabBarOptionsMap, tabBarItemOptionsMap);
  113. if (tabBar) {
  114. appJson.tabBar = tabBar;
  115. }
  116. }
  117. (0, pages_1.filterPlatformPages)(platform, pagesJson);
  118. ['preloadRule', 'workers', 'plugins', 'entryPagePath'].forEach((name) => {
  119. if ((0, shared_1.hasOwn)(pagesJson, name)) {
  120. appJson[name] = pagesJson[name];
  121. }
  122. });
  123. if (debug) {
  124. appJson.debug = debug;
  125. }
  126. if (networkTimeout) {
  127. appJson.networkTimeout = networkTimeout;
  128. }
  129. const manifestJson = (0, manifest_1.getPlatformManifestJsonOnce)();
  130. if (!darkmode) {
  131. const { pages, window, tabBar } = (0, theme_1.initTheme)(manifestJson, appJson);
  132. (0, shared_1.extend)(appJson, JSON.parse(JSON.stringify({ pages, window, tabBar })));
  133. delete appJson.darkmode;
  134. delete appJson.themeLocation;
  135. pageJsons = (0, theme_1.initTheme)(manifestJson, pageJsons);
  136. }
  137. else {
  138. const themeLocation = manifestJson.themeLocation || 'theme.json';
  139. if ((0, theme_1.hasThemeJson)(path_1.default.join(process.env.UNI_INPUT_DIR, themeLocation)))
  140. appJson.themeLocation = themeLocation;
  141. }
  142. return {
  143. appJson,
  144. pageJsons,
  145. nvuePages,
  146. };
  147. }