pagesJson.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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.uniAppPagesPlugin = void 0;
  7. const path_1 = __importDefault(require("path"));
  8. const fs_extra_1 = __importDefault(require("fs-extra"));
  9. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  10. const utils_1 = require("./utils");
  11. const utils_2 = require("../utils");
  12. function uniAppPagesPlugin() {
  13. const pagesJsonPath = path_1.default.resolve(process.env.UNI_INPUT_DIR, 'pages.json');
  14. const pagesJsonUTSPath = path_1.default.resolve(process.env.UNI_INPUT_DIR, uni_cli_shared_1.PAGES_JSON_UTS);
  15. let imports = [];
  16. let routes = [];
  17. let globalStyle = 'new Map()';
  18. let tabBar = 'null';
  19. let launchPage = 'null';
  20. let conditionUrl = '';
  21. let uniIdRouter = 'new Map()';
  22. return {
  23. name: 'uni:app-pages',
  24. apply: 'build',
  25. resolveId(id) {
  26. if ((0, utils_2.isPages)(id)) {
  27. return pagesJsonUTSPath;
  28. }
  29. },
  30. load(id) {
  31. if ((0, utils_2.isPages)(id)) {
  32. return fs_extra_1.default.readFileSync(pagesJsonPath, 'utf8');
  33. }
  34. },
  35. transform(code, id) {
  36. if ((0, utils_2.isPages)(id)) {
  37. this.addWatchFile(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'pages.json'));
  38. let pagesJson = {
  39. pages: [],
  40. globalStyle: {
  41. navigationBar: {},
  42. },
  43. };
  44. // 调整换行符,确保 parseTree 的loc正确
  45. code = code.replace(/\r\n/g, '\n');
  46. try {
  47. pagesJson = (0, uni_cli_shared_1.normalizeUniAppXAppPagesJson)(code);
  48. }
  49. catch (err) {
  50. if (err.loc) {
  51. const error = (0, uni_cli_shared_1.createRollupError)('uni:app-pages', pagesJsonPath, err, code);
  52. this.error(error);
  53. }
  54. else {
  55. throw err;
  56. }
  57. }
  58. imports = [];
  59. routes = [];
  60. process.env.UNI_APP_X_PAGE_COUNT = pagesJson.pages.length + '';
  61. pagesJson.pages.forEach((page, index) => {
  62. const className = (0, uni_cli_shared_1.genUTSClassName)(page.path);
  63. let isQuit = index === 0;
  64. imports.push(page.path);
  65. routes.push(`{ path: "${page.path}", component: ${className}Class, meta: { isQuit: ${isQuit} } as PageMeta, style: ${stringifyPageStyle(page.style)}${page.needLogin === undefined
  66. ? ''
  67. : ', needLogin: ' + page.needLogin} } as PageRoute`);
  68. });
  69. if (pagesJson.globalStyle) {
  70. globalStyle = stringifyPageStyle(pagesJson.globalStyle);
  71. }
  72. if (pagesJson.tabBar) {
  73. tabBar = (0, utils_1.stringifyMap)(pagesJson.tabBar);
  74. }
  75. if (pagesJson.condition) {
  76. const conditionInfo = (0, uni_cli_shared_1.parseArguments)(pagesJson);
  77. if (conditionInfo) {
  78. const { path, query } = JSON.parse(conditionInfo);
  79. conditionUrl = `${path}${query ? '?' + query : ''}`;
  80. }
  81. }
  82. if (pagesJson.uniIdRouter) {
  83. uniIdRouter = (0, utils_1.stringifyMap)(pagesJson.uniIdRouter);
  84. }
  85. launchPage = stringifyLaunchPage(pagesJson.pages[0]);
  86. return {
  87. code: `${imports.map((p) => `import './${p}.uvue'`).join('\n')}
  88. export default 'pages.json'`,
  89. map: null,
  90. };
  91. }
  92. },
  93. generateBundle(_, bundle) {
  94. if (bundle[utils_1.ENTRY_FILENAME]) {
  95. const asset = bundle[utils_1.ENTRY_FILENAME];
  96. asset.source =
  97. asset.source +
  98. `
  99. ${imports
  100. .map((p) => {
  101. const className = (0, uni_cli_shared_1.genUTSClassName)(p);
  102. return `import ${className}Class from './${p}.uvue?type=page'`;
  103. })
  104. .join('\n')}
  105. function definePageRoutes() {
  106. ${routes.map((route) => `__uniRoutes.push(${route})`).join('\n')}
  107. }
  108. const __uniTabBar: Map<string, any | null> | null = ${tabBar}
  109. const __uniLaunchPage: Map<string, any | null> = ${launchPage}
  110. @Suppress("UNCHECKED_CAST")
  111. function defineAppConfig(){
  112. __uniConfig.entryPagePath = '/${imports[0]}'
  113. __uniConfig.globalStyle = ${globalStyle}
  114. __uniConfig.tabBar = __uniTabBar as Map<string, any> | null
  115. __uniConfig.conditionUrl = '${conditionUrl}'
  116. __uniConfig.uniIdRouter = ${uniIdRouter}
  117. __uniConfig.ready = true
  118. }
  119. `;
  120. }
  121. },
  122. };
  123. }
  124. exports.uniAppPagesPlugin = uniAppPagesPlugin;
  125. function stringifyLaunchPage(launchPage) {
  126. return (0, utils_1.stringifyMap)({
  127. url: launchPage.path,
  128. style: launchPage.style,
  129. }, true);
  130. }
  131. function stringifyPageStyle(pageStyle) {
  132. return (0, utils_1.stringifyMap)(pageStyle);
  133. }