@dd-code/uni-tools 1.0.12 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import path from 'path';
2
+ import fsExtra from 'fs-extra';
2
3
  import fs from 'fs';
3
4
  import crypto from 'crypto';
4
5
  import chokidar from 'chokidar';
5
6
  import { MultiBar, Presets } from 'cli-progress';
6
7
  import chalk from 'chalk';
7
- import fsExtra from 'fs-extra';
8
+ import 'child_process';
8
9
  import WebSocket, { WebSocketServer } from 'ws';
9
10
  import express from 'express';
10
11
  import http from 'http';
11
12
  import cors from 'cors';
12
- import 'child_process';
13
13
 
14
14
  /******************************************************************************
15
15
  Copyright (c) Microsoft Corporation.
@@ -262,6 +262,22 @@ var createFileWatcher = function (filePath, opt) {
262
262
  };
263
263
  var checkIsBuildInChild = function () { return process.env.MFE_TARGET_DIR === "root"; };
264
264
  var checkIsInnerBuild = function () { return process.env.MFE_INNER_BUILD === "true"; };
265
+ var unlinkDeepDirOrFile = function (filePath) {
266
+ try {
267
+ if (fsExtra.pathExistsSync(filePath)) {
268
+ // 同步检查是否存在
269
+ fsExtra.removeSync(filePath); // 同步递归删除
270
+ }
271
+ }
272
+ catch (err) {
273
+ console.error("删除文件夹失败:", err);
274
+ }
275
+ };
276
+ var getFilePathWithoutExt = function (filePath) {
277
+ var dirName = path.dirname(filePath);
278
+ var baseName = path.basename(filePath, path.extname(filePath));
279
+ return path.join(dirName, baseName);
280
+ };
265
281
 
266
282
  var UniCdnManager = /** @class */ (function () {
267
283
  function UniCdnManager() {
@@ -403,7 +419,7 @@ var formatCliCommandConfig = function (mode) {
403
419
  var checkIsRootManifest = function (manifest) {
404
420
  return manifest.isRoot || manifest.appCode === ROOT_APP_CODE;
405
421
  };
406
- var WS_PORT = 3560;
422
+ var WS_PORT = 3561;
407
423
  var WS_PATH = "/__mfe__ws__";
408
424
  var HTTP_PATH = "/__mfe__http__";
409
425
  var E_WS_TYPE;
@@ -479,18 +495,6 @@ var getNodeModulesEnvAppCodeFilePath = function (conf, fileName) {
479
495
  var savePath = getDownloadedFilePath(conf);
480
496
  return path.resolve(savePath, fileName);
481
497
  };
482
- /**
483
- * 获取清单文件 URL 列表
484
- * @description 根据环境和配置生成所有应用的清单文件 URL
485
- * @param {string} mode - 环境标识,默认为 'dev'
486
- * @returns {Array<Object>} 清单 URL 对象数组
487
- * @returns {string} returns[].url - 清单文件 URL
488
- * @returns {string} returns[].appCode - 应用代码
489
- * @returns {string} returns[].code - 项目代码
490
- * @example
491
- * const urls = getManifestJsonUrl('prod');
492
- * // 返回: [{ url: '...', appCode: 'main', code: 'my-project' }]
493
- */
494
498
  var getManifestJsonUrl = function (mode) { return __awaiter(void 0, void 0, void 0, function () {
495
499
  var _a, _b, isRoot, _c, code, apps, mfeJson, configApps, result;
496
500
  return __generator(this, function (_d) {
@@ -512,14 +516,11 @@ var getManifestJsonUrl = function (mode) { return __awaiter(void 0, void 0, void
512
516
  configApps = __spreadArray(__spreadArray([], configApps, true), [{ appCode: ROOT_APP_CODE }], false);
513
517
  _d.label = 4;
514
518
  case 4:
515
- // console.log(JSON, isRoot, "JSON");
516
- // debugger
517
- // const configApps = JSON.apps; // isRoot ? JSON.apps : [{ appCode: ROOT_APP_CODE }];
518
519
  apps = Array.from(new Set(__spreadArray([], (configApps || []).map(function (i) { return i.appCode; }), true)));
519
520
  return [3 /*break*/, 6];
520
521
  case 5:
521
522
  _d.sent();
522
- apps = []; // BASE_APP_CODE_LIST;
523
+ apps = [];
523
524
  return [3 /*break*/, 6];
524
525
  case 6:
525
526
  result = apps.map(function (appCode) {
@@ -561,24 +562,6 @@ var downloadManifestJson = function (urls) { return __awaiter(void 0, void 0, vo
561
562
  }
562
563
  });
563
564
  }); };
564
- /**
565
- * 下载项目文件
566
- * @description 根据清单列表并行下载所有项目文件到指定目录
567
- * @param {Array<Object>} manifestList - 清单数据数组
568
- * @param {string} manifestList[].env - 环境标识
569
- * @returns {Promise<void>} 下载完成
570
- * @example
571
- * await downloadProjectFiles([
572
- * { env: 'prod', files: [...] },
573
- * { env: 'test', files: [...] }
574
- * ]);
575
- */
576
- /**
577
- * 根据manifest文件下载所有相关文件
578
- * 用于微前端架构中的模块文件下载
579
- * @param {Object} manifestJson - manifest文件内容
580
- * @param {string} outDir - 输出目录
581
- */
582
565
  function downloadFilesByManifestJson(manifestJson, outDir, onDownload) {
583
566
  return __awaiter(this, void 0, void 0, function () {
584
567
  var cdn, appCode, publicPath, files, _a, _b, _c, _i, i, file, fileUrl, fileName, downloadUrl, content;
@@ -603,7 +586,6 @@ function downloadFilesByManifestJson(manifestJson, outDir, onDownload) {
603
586
  return [4 /*yield*/, fetchFileByPath(downloadUrl)];
604
587
  case 2:
605
588
  content = _d.sent();
606
- // console.log(path.join(outDir, appCode || "", fileName), 'path.join(outDir, appCode || "", fileName)');
607
589
  writeFiles(path.join(outDir, appCode || "", fileName), content);
608
590
  onDownload && onDownload(Number(i), file.length);
609
591
  _d.label = 3;
@@ -672,31 +654,20 @@ var createManifestManager = function () {
672
654
  return row;
673
655
  },
674
656
  setFiles: function (files) {
675
- // const files = all.map((i) => {
676
- // const filePath = path.resolve(outDir, i);
677
- // const content = fs.readFileSync(filePath, "utf-8");
678
- // const contentHash = generateSHA256(content).slice(0, 8);
679
- // const dirName = path.dirname(i);
680
- // const fileName = path.basename(i)
681
- // const suffixName = dirName === "." ? "" : `${dirName}/`;
682
- // return {
683
- // fileName: i,
684
- // fileUrl: `${suffixName}${contentHash}_${fileName}`,
685
- // };
686
- // });
687
657
  row.files = files;
688
658
  },
689
659
  setPagesJson: function (pagesJson) {
690
660
  row.pagesJson = pagesJson;
691
661
  },
692
662
  saveFile: function (filePath) {
693
- // const files = row.files.filter((i) => i.fileName !== MANIFEST_NAME);
694
663
  var newManifest = __assign(__assign({}, row), { isServe: undefined });
695
664
  newManifest.hash = generateSHA256(JSON.stringify(__assign({}, newManifest)));
696
665
  writeFiles(filePath, JSON.stringify(newManifest, null, 2));
697
666
  },
667
+ setExposes: function (exposes) {
668
+ row.exposes = exposes || {};
669
+ },
698
670
  setEnv: function (mode) {
699
- // const env = loadViteConfig(mode);
700
671
  var env = formatCliCommandConfig(mode);
701
672
  var mfeJson = getMfeJson();
702
673
  row.cdn = env.cdn;
@@ -715,13 +686,49 @@ var createManifestManager = function () {
715
686
  setDependencies: function (list) {
716
687
  this.dependencies = list;
717
688
  },
718
- // getFullManifestJsonList() {
719
- // const files = import.meta.globEager("./**/*.json");
720
- // console.log(files);
721
- // // return [...this.dependencies, this.value];
722
- // },
723
689
  };
724
690
  };
691
+ var getRootMainManifestJson = function (code, mode) { return __awaiter(void 0, void 0, void 0, function () {
692
+ var pageManifest, nodeModulesManifest, cdnUrl, manifestJson;
693
+ return __generator(this, function (_b) {
694
+ switch (_b.label) {
695
+ case 0:
696
+ try {
697
+ pageManifest = uniReadFile(path.join(process.env.UNI_OUTPUT_DIR, MANIFEST_NAME));
698
+ if (Object.keys(pageManifest).length !== 0) {
699
+ return [2 /*return*/, pageManifest];
700
+ }
701
+ }
702
+ catch (_c) { }
703
+ try {
704
+ nodeModulesManifest = uniReadFile(path.join(SAVE_CDN_FILE_PATH, mode, ROOT_APP_CODE, MANIFEST_NAME));
705
+ if (Object.keys(nodeModulesManifest).length !== 0) {
706
+ return [2 /*return*/, nodeModulesManifest];
707
+ }
708
+ }
709
+ catch (_d) { }
710
+ _b.label = 1;
711
+ case 1:
712
+ _b.trys.push([1, 3, , 4]);
713
+ cdnUrl = cdn.getManifestUrl({
714
+ code: code,
715
+ appCode: ROOT_APP_CODE,
716
+ mode: mode,
717
+ });
718
+ return [4 /*yield*/, fetchFileByPath(cdnUrl)];
719
+ case 2:
720
+ manifestJson = _b.sent();
721
+ if (Object.keys(manifestJson).length !== 0) {
722
+ return [2 /*return*/, manifestJson];
723
+ }
724
+ return [3 /*break*/, 4];
725
+ case 3:
726
+ _b.sent();
727
+ return [3 /*break*/, 4];
728
+ case 4: return [2 /*return*/, { exposes: {} }];
729
+ }
730
+ });
731
+ }); };
725
732
 
726
733
  var num = 5;
727
734
  var getMainProcess = function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -810,7 +817,6 @@ var addUniCopyPluginHook = function (_a) {
810
817
  var before = _a.before, after = _a.after;
811
818
  var FileWatcher = require("@dcloudio/uni-cli-shared/dist/watcher").FileWatcher;
812
819
  var originalCopy = FileWatcher.prototype.copy;
813
- // Hook copy方法
814
820
  FileWatcher.prototype.copy = function (from) {
815
821
  var to = this.to(from);
816
822
  var fromPath = this.from(from);
@@ -828,7 +834,23 @@ var copyFilesByTargetPath = function (sourcePath, targetPath) {
828
834
  fsExtra.ensureDirSync(targetDir);
829
835
  }
830
836
  catch (err) { }
831
- fsExtra.copySync(sourcePath, targetPath, { overwrite: true });
837
+ var shouldSkip = function () {
838
+ try {
839
+ var s = fs.statSync(sourcePath);
840
+ var t = fs.statSync(targetPath);
841
+ if (s.isDirectory() || t.isDirectory())
842
+ return false;
843
+ var sb = fs.readFileSync(sourcePath);
844
+ var tb = fs.readFileSync(targetPath);
845
+ return sb.length === tb.length && sb.equals(tb);
846
+ }
847
+ catch (_a) {
848
+ return false;
849
+ }
850
+ };
851
+ if (!shouldSkip()) {
852
+ fsExtra.copySync(sourcePath, targetPath, { overwrite: true });
853
+ }
832
854
  };
833
855
 
834
856
  var downloadFullApps = function (manifestJson) { return __awaiter(void 0, void 0, void 0, function () {
@@ -913,24 +935,18 @@ var getPagesJson = function (jsonFile, isFormat) {
913
935
  var platform = process.env.UNI_PLATFORM;
914
936
  initPreContext(platform);
915
937
  var context = getPreVueContext();
916
- // 使用uni的预处理器处理pages.json
917
938
  var processedJsonStr = preprocess(jsonFile, context, { type: "js" });
918
- // 解析为JSON对象
919
939
  var pagesConfig = eval("(".concat(processedJsonStr, ")"));
920
- // 针对微信小程序平台,处理特有的配置项
921
940
  if (isFormat && platform === "mp-weixin") {
922
941
  return transformToWeixinFormat(pagesConfig);
923
942
  }
924
943
  return pagesConfig;
925
944
  };
926
- // 将uni-app的pages.json转换为微信小程序格式
927
945
  var transformToWeixinFormat = function (uniPagesConfig) {
928
946
  var _a;
929
947
  var weixinConfig = __assign({ pages: [], window: {}, tabBar: null, subPackages: [], usingComponents: {} }, uniPagesConfig);
930
- // 处理globalStyle -> window
931
948
  if (uniPagesConfig.globalStyle) {
932
949
  var globalStyle = uniPagesConfig.globalStyle;
933
- // 基础窗口配置
934
950
  weixinConfig.window = {
935
951
  navigationBarBackgroundColor: globalStyle.navigationBarBackgroundColor || "#000000",
936
952
  navigationBarTextStyle: globalStyle.navigationBarTextStyle || "white",
@@ -940,30 +956,25 @@ var transformToWeixinFormat = function (uniPagesConfig) {
940
956
  enablePullDownRefresh: globalStyle.enablePullDownRefresh || false,
941
957
  onReachBottomDistance: globalStyle.onReachBottomDistance || 50,
942
958
  };
943
- // 处理微信小程序特有配置
944
959
  if (globalStyle.pageOrientation) {
945
960
  weixinConfig.window.pageOrientation = globalStyle.pageOrientation;
946
961
  }
947
962
  if (globalStyle.renderingMode) {
948
963
  weixinConfig.window.renderingMode = globalStyle.renderingMode;
949
964
  }
950
- // 处理usingComponents
951
965
  if (globalStyle.usingComponents) {
952
966
  weixinConfig.usingComponents = globalStyle.usingComponents;
953
967
  }
954
- // 处理微信小程序平台特定配置
955
968
  if (globalStyle["mp-weixin"]) {
956
969
  Object.assign(weixinConfig.window, globalStyle["mp-weixin"]);
957
970
  }
958
971
  }
959
- // 处理pages配置
960
972
  if (uniPagesConfig.pages) {
961
973
  weixinConfig.pages = uniPagesConfig.pages.map(function (page) {
962
974
  var weixinPage = page.path;
963
975
  return weixinPage;
964
976
  });
965
977
  }
966
- // 处理tabBar配置
967
978
  if (uniPagesConfig.tabBar) {
968
979
  weixinConfig.tabBar = __assign(__assign({}, uniPagesConfig.tabBar), { list: (_a = uniPagesConfig.tabBar.list) === null || _a === void 0 ? void 0 : _a.map(function (item) { return ({
969
980
  pagePath: item.pagePath,
@@ -972,7 +983,6 @@ var transformToWeixinFormat = function (uniPagesConfig) {
972
983
  selectedIconPath: item.selectedIconPath,
973
984
  }); }) });
974
985
  }
975
- // 处理分包配置
976
986
  if (uniPagesConfig.subPackages) {
977
987
  weixinConfig.subPackages = uniPagesConfig.subPackages.map(function (subPackage) {
978
988
  var _a;
@@ -982,11 +992,9 @@ var transformToWeixinFormat = function (uniPagesConfig) {
982
992
  });
983
993
  });
984
994
  }
985
- // 处理预下载规则
986
995
  if (uniPagesConfig.preloadRule) {
987
996
  weixinConfig.preloadRule = uniPagesConfig.preloadRule;
988
997
  }
989
- // 移除uni-app特有的配置项
990
998
  delete weixinConfig.globalStyle;
991
999
  delete weixinConfig.easycom;
992
1000
  delete weixinConfig.condition;
@@ -1112,10 +1120,93 @@ var createManifestPlugin = function (manifestJson) {
1112
1120
  };
1113
1121
  };
1114
1122
 
1123
+ var renderPagesJsonByArray = function (appPages, pageJson) {
1124
+ var _loop_1 = function (app) {
1125
+ var _a = getPagesJson(JSON.stringify((app === null || app === void 0 ? void 0 : app.pagesJson) || {}), true).pages, pages = _a === void 0 ? [] : _a;
1126
+ var currentTemp = {
1127
+ root: app.appCode,
1128
+ pages: __spreadArray([], pages, true),
1129
+ };
1130
+ pageJson.subPackages = pageJson.subPackages.filter(function (i) { return i.root !== currentTemp.root; });
1131
+ pageJson.subPackages.push(currentTemp);
1132
+ pageJson.subPackages = pageJson.subPackages.filter(function (i) { return i.pages.length; });
1133
+ };
1134
+ for (var _i = 0, appPages_1 = appPages; _i < appPages_1.length; _i++) {
1135
+ var app = appPages_1[_i];
1136
+ _loop_1(app);
1137
+ }
1138
+ if (!pageJson.tabBar) {
1139
+ delete pageJson.tabBar;
1140
+ }
1141
+ return pageJson;
1142
+ };
1143
+ var genreFullMainAppJsonByManifestList = function (appJson, manifestList) {
1144
+ return renderPagesJsonByArray(manifestList, appJson);
1145
+ };
1146
+ var genreNewAppJson = function (outputPageJsonPath, appJson, manifestList) {
1147
+ var newAppJSon = genreFullMainAppJsonByManifestList(__assign({ subPackages: [] }, appJson), manifestList);
1148
+ var old = uniFsReadJSONFile(outputPageJsonPath) || {};
1149
+ var nextStr = JSON.stringify(newAppJSon);
1150
+ var oldStr = JSON.stringify(old);
1151
+ if (nextStr !== oldStr) {
1152
+ writeFiles(outputPageJsonPath, newAppJSon);
1153
+ }
1154
+ };
1155
+
1156
+ var getAppsManifestList = function (mode) {
1157
+ var _a;
1158
+ var manifest = formatCliCommandConfig(mode);
1159
+ if (!manifest.isRoot) {
1160
+ return [];
1161
+ }
1162
+ if (manifest.serve) {
1163
+ return [];
1164
+ }
1165
+ var mfeJson = getMfeJson();
1166
+ if (!((_a = mfeJson === null || mfeJson === void 0 ? void 0 : mfeJson.apps) === null || _a === void 0 ? void 0 : _a.length)) {
1167
+ throw new Error("mfeJson.apps is empty");
1168
+ }
1169
+ var apps = ((mfeJson === null || mfeJson === void 0 ? void 0 : mfeJson.apps) || []).map(function (_a) {
1170
+ var appCode = _a.appCode;
1171
+ return {
1172
+ appCode: appCode,
1173
+ filePath: "".concat(process.env.UNI_OUTPUT_DIR, "/").concat(appCode, "/").concat(MANIFEST_NAME),
1174
+ };
1175
+ });
1176
+ return apps;
1177
+ };
1178
+ var startDistWatcher = function (mainPwd, onReady, onChange) {
1179
+ var root = process.env.MFE_SOURCE_OUTPUT_DIR;
1180
+ if (!root)
1181
+ return;
1182
+ var filePath = path.resolve(root);
1183
+ checkAndgenreDir(filePath);
1184
+ var parentDir = path.dirname(filePath);
1185
+ var watcher = createFileWatcher(parentDir);
1186
+ var isTargetFile = function (p) {
1187
+ return p.startsWith(filePath + path.sep) || p === filePath;
1188
+ };
1189
+ watcher.on("ready", onReady);
1190
+ ["add", "change", "unlink"].forEach(function (evt) {
1191
+ // @ts-ignore
1192
+ watcher.on(evt, function (p) {
1193
+ if (!isTargetFile(p))
1194
+ return;
1195
+ var rel = path.relative(filePath, p);
1196
+ var sourcePath = p;
1197
+ var targetPath = path.join(mainPwd, rel);
1198
+ if (["add", "change"].includes(evt)) {
1199
+ copyFilesByTargetPath(sourcePath, targetPath);
1200
+ }
1201
+ onChange === null || onChange === void 0 ? void 0 : onChange({ type: evt, p: p, sourcePath: sourcePath, targetPath: targetPath });
1202
+ });
1203
+ });
1204
+ };
1205
+
1115
1206
  var app = null;
1116
1207
  var createHttpServer = function () {
1117
1208
  if (app)
1118
- return app;
1209
+ return { server: app, start: function () { } };
1119
1210
  app = express();
1120
1211
  var server = http.createServer(app);
1121
1212
  app.get("".concat(HTTP_PATH, "/root-path"), function (req, res) {
@@ -1287,37 +1378,6 @@ var WsClientServer = /** @class */ (function () {
1287
1378
  // export const mfeServer = new WsServer();
1288
1379
  // export const mfeClientServer = new WsClientServer();
1289
1380
 
1290
- // export const addRunningAppToSave = (appCode, filePath: string) => {
1291
- // const content = uniReadFile(SERVE_MPWEIXIN_MANIFEST);
1292
- // if (content) {
1293
- // content[appCode] = filePath;
1294
- // }
1295
- // writeFiles(SERVE_MPWEIXIN_MANIFEST, JSON.stringify(content, null, 2));
1296
- // };
1297
- var getAppsManifestList = function (mode) {
1298
- var _a;
1299
- var manifest = formatCliCommandConfig(mode);
1300
- if (!manifest.isRoot) {
1301
- return [];
1302
- }
1303
- if (manifest.serve) {
1304
- return [];
1305
- }
1306
- var mfeJson = getMfeJson();
1307
- if (!((_a = mfeJson === null || mfeJson === void 0 ? void 0 : mfeJson.apps) === null || _a === void 0 ? void 0 : _a.length)) {
1308
- throw new Error("mfeJson.apps is empty");
1309
- }
1310
- var apps = ((mfeJson === null || mfeJson === void 0 ? void 0 : mfeJson.apps) || []).map(function (_a) {
1311
- var appCode = _a.appCode;
1312
- return {
1313
- appCode: appCode,
1314
- filePath: "".concat(process.env.UNI_OUTPUT_DIR, "/").concat(appCode, "/").concat(MANIFEST_NAME),
1315
- };
1316
- });
1317
- // console.log(apps);
1318
- return apps;
1319
- };
1320
-
1321
1381
  var filterManifestJsonListAndMainPageJson = function (manifestJsonList) {
1322
1382
  var outputPageJsonPath = getMainAppJsonPath();
1323
1383
  return {
@@ -1325,71 +1385,7 @@ var filterManifestJsonListAndMainPageJson = function (manifestJsonList) {
1325
1385
  manifestList: manifestJsonList.filter(function (item) { return !checkIsRootManifest(item); }),
1326
1386
  };
1327
1387
  };
1328
- var renderPagesJsonByArray = function (appPages, pageJson) {
1329
- var _loop_1 = function (app) {
1330
- var _a = getPagesJson(JSON.stringify((app === null || app === void 0 ? void 0 : app.pagesJson) || {}), true).pages, pages = _a === void 0 ? [] : _a;
1331
- var currentTemp = {
1332
- root: app.appCode,
1333
- pages: __spreadArray([], pages, true),
1334
- };
1335
- pageJson.subPackages = pageJson.subPackages.filter(function (i) { return i.root !== currentTemp.root; });
1336
- pageJson.subPackages.push(currentTemp);
1337
- pageJson.subPackages = pageJson.subPackages.filter(function (i) { return i.pages.length; });
1338
- };
1339
- for (var _i = 0, appPages_1 = appPages; _i < appPages_1.length; _i++) {
1340
- var app = appPages_1[_i];
1341
- _loop_1(app);
1342
- }
1343
- if (!pageJson.tabBar) {
1344
- delete pageJson.tabBar;
1345
- }
1346
- return pageJson;
1347
- };
1348
- var genreFullMainAppJsonByManifestList = function (appJson, manifestList) {
1349
- return renderPagesJsonByArray(manifestList, appJson);
1350
- };
1351
- var DistWatcher = /** @class */ (function () {
1352
- function DistWatcher() {
1353
- }
1354
- DistWatcher.prototype.start = function (mainPwd, onReady, onChange) {
1355
- var root = process.env.MFE_SOURCE_OUTPUT_DIR;
1356
- if (!root)
1357
- return;
1358
- var filePath = path.resolve(root);
1359
- checkAndgenreDir(filePath);
1360
- var parentDir = path.dirname(filePath);
1361
- var watcher = createFileWatcher(parentDir);
1362
- var isTargetFile = function (p) {
1363
- return p.startsWith(filePath + path.sep) || p === filePath;
1364
- };
1365
- watcher.on("ready", onReady);
1366
- ["add", "change", "unlink"].forEach(function (evt) {
1367
- // @ts-ignore
1368
- watcher.on(evt, function (p) {
1369
- if (!isTargetFile(p))
1370
- return;
1371
- var rel = path.relative(filePath, p);
1372
- var sourcePath = p;
1373
- var targetPath = path.join(mainPwd, rel);
1374
- if (["add", "change"].includes(evt)) {
1375
- copyFilesByTargetPath(sourcePath, targetPath);
1376
- }
1377
- onChange === null || onChange === void 0 ? void 0 : onChange({ type: evt, p: p, sourcePath: sourcePath, targetPath: targetPath });
1378
- });
1379
- });
1380
- };
1381
- return DistWatcher;
1382
- }());
1383
- var genreNewAppJson = function (outputPageJsonPath, appJson, manifestList) {
1384
- try {
1385
- var newAppJSon = genreFullMainAppJsonByManifestList(__assign({ subPackages: [] }, appJson), manifestList);
1386
- writeFiles(outputPageJsonPath, newAppJSon);
1387
- }
1388
- catch (error) {
1389
- console.error("[AppJSON] Genre failed:", error);
1390
- }
1391
- };
1392
- var createMainAppServer = function (manifestJson) {
1388
+ var createMainAppServer = function () {
1393
1389
  var mfeServer = WsServer.getInstance(function (opt) {
1394
1390
  var type = opt.type, data = opt.data;
1395
1391
  if (type === E_WS_TYPE.CHANGE) {
@@ -1418,17 +1414,36 @@ var createMainAppClient = function (manifestJson, onInit) {
1418
1414
  return client;
1419
1415
  };
1420
1416
  var createMainAppPlugin = function (manifestJson) {
1421
- var mainPwd = "";
1422
- var isWatcherReady = false;
1423
- var mfeClientServer;
1424
- var fn = null;
1417
+ var state = {
1418
+ mainPwd: "",
1419
+ isWatcherReady: false,
1420
+ mfeClientServer: undefined,
1421
+ fn: null,
1422
+ };
1425
1423
  var isBuild = function () { return process.env.MFE_BUILD_MODE === EBuildMode.BUILD; };
1426
1424
  var isServe = function () { return manifestJson.value.isServe; };
1427
1425
  var isRoot = function () { return manifestJson.value.isRoot; };
1428
- var isStartServer = function () {
1429
- if (isBuild())
1430
- return false;
1431
- return isServe();
1426
+ var initSync = function () {
1427
+ if (state.isWatcherReady)
1428
+ return;
1429
+ startDistWatcher(state.mainPwd, function () {
1430
+ state.isWatcherReady = true;
1431
+ }, function (change) {
1432
+ state.fn = function () {
1433
+ return state.mfeClientServer.sendMessage(E_WS_TYPE.CHANGE, __assign(__assign({}, change), { appCode: manifestJson.value.appCode }));
1434
+ };
1435
+ });
1436
+ };
1437
+ var copyAppDistModule = function (_a) {
1438
+ var pwd = _a.pwd;
1439
+ if (!process.env.MFE_SOURCE_OUTPUT_DIR) {
1440
+ console.error("[Plugin] MFE_SOURCE_OUTPUT_DIR not defined");
1441
+ return;
1442
+ }
1443
+ state.mainPwd = path.join(pwd, manifestJson.value.appCode);
1444
+ var targetPath = state.mainPwd;
1445
+ var sourcePath = process.env.MFE_SOURCE_OUTPUT_DIR;
1446
+ copyFilesByTargetPath(sourcePath, targetPath);
1432
1447
  };
1433
1448
  var watchFile = function () {
1434
1449
  var allManifest = getAppsManifestList(manifestJson.value.mode);
@@ -1441,70 +1456,53 @@ var createMainAppPlugin = function (manifestJson) {
1441
1456
  genreNewAppJson(outputPageJsonPath, mainAppJson, [manifestJson]);
1442
1457
  });
1443
1458
  };
1444
- var distWatcher = new DistWatcher();
1445
- var serverPlugin = {
1459
+ var createServePlugin = function () { return ({
1446
1460
  name: "@dd-code:main-app:serve",
1447
1461
  config: function () {
1448
1462
  return __awaiter(this, void 0, void 0, function () {
1449
- var isServe, _a, start;
1450
- return __generator(this, function (_b) {
1451
- isServe = isStartServer();
1452
- if (isBuild())
1453
- return [2 /*return*/];
1454
- if (!isServe) {
1455
- if (!isBuild() && isRoot()) {
1456
- _a = createHttpServer(), _a.server, start = _a.start;
1457
- start();
1458
- }
1463
+ var start;
1464
+ return __generator(this, function (_a) {
1465
+ if (isBuild()) {
1459
1466
  return [2 /*return*/];
1460
1467
  }
1461
1468
  if (isRoot()) {
1469
+ if (!isServe()) {
1470
+ start = createHttpServer().start;
1471
+ start();
1472
+ return [2 /*return*/];
1473
+ }
1462
1474
  createMainAppServer();
1475
+ // const subs = findLocalSubApps();
1476
+ // if (subs.length) {
1477
+ // startLocalSubApps(subs, "mp-weixin", manifestJson.value.mode);
1478
+ // }
1463
1479
  }
1464
1480
  else {
1465
- mfeClientServer = createMainAppClient(manifestJson, function (data) {
1466
- serverPlugin.copyAppDistModule(data);
1481
+ state.mfeClientServer = createMainAppClient(manifestJson, function (data) {
1482
+ copyAppDistModule(data);
1467
1483
  });
1468
1484
  }
1469
1485
  return [2 /*return*/];
1470
1486
  });
1471
1487
  });
1472
1488
  },
1473
- closeBundle: function () {
1474
- var isServe = isStartServer();
1475
- if (!isServe)
1476
- return;
1477
- if (!isRoot()) {
1478
- serverPlugin.initWatchChange();
1479
- fn === null || fn === void 0 ? void 0 : fn();
1480
- fn = null;
1481
- }
1482
- },
1483
- initWatchChange: function () {
1484
- if (isWatcherReady)
1485
- return;
1486
- distWatcher.start(mainPwd, function () {
1487
- isWatcherReady = true;
1488
- }, function (change) {
1489
- fn = function () {
1490
- return mfeClientServer.sendMessage(E_WS_TYPE.CHANGE, __assign(__assign({}, change), { appCode: manifestJson.value.appCode }));
1491
- };
1492
- });
1493
- },
1494
- copyAppDistModule: function (_a) {
1495
- var pwd = _a.pwd;
1496
- if (!process.env.MFE_SOURCE_OUTPUT_DIR) {
1497
- console.error("[Plugin] MFE_SOURCE_OUTPUT_DIR not defined");
1498
- return;
1499
- }
1500
- mainPwd = path.join(pwd, manifestJson.value.appCode);
1501
- var targetPath = mainPwd;
1502
- var sourcePath = process.env.MFE_SOURCE_OUTPUT_DIR;
1503
- copyFilesByTargetPath(sourcePath, targetPath);
1504
- },
1505
- };
1489
+ }); };
1506
1490
  return [
1507
- serverPlugin,
1491
+ createServePlugin(),
1492
+ {
1493
+ name: "@dd-code:main-app:sync",
1494
+ closeBundle: function () {
1495
+ var _a;
1496
+ var start = isServe();
1497
+ if (!start || isBuild())
1498
+ return;
1499
+ if (isRoot())
1500
+ return;
1501
+ initSync();
1502
+ (_a = state.fn) === null || _a === void 0 ? void 0 : _a.call(state);
1503
+ state.fn = null;
1504
+ },
1505
+ },
1508
1506
  {
1509
1507
  name: "@dd-code:main-app:watch",
1510
1508
  closeBundle: function () {
@@ -1516,7 +1514,6 @@ var createMainAppPlugin = function (manifestJson) {
1516
1514
  return [2 /*return*/];
1517
1515
  if (!checkIsBuildInChild())
1518
1516
  return [2 /*return*/];
1519
- // if (!isServe) return;
1520
1517
  watchFile === null || watchFile === void 0 ? void 0 : watchFile();
1521
1518
  watchFile = null;
1522
1519
  return [2 /*return*/];
@@ -1550,8 +1547,170 @@ var createMainAppPlugin = function (manifestJson) {
1550
1547
  ];
1551
1548
  };
1552
1549
 
1550
+ var buildName = "mfe_runtime/__mfe_{template}_runtime__.js";
1551
+ var RUNTIME_NAME = "@dd-code/runtime";
1552
+ // const runtimeDir = 'mfe_runtime'
1553
+ var RUNTIME_NAME_REGEXP = new RegExp(RUNTIME_NAME + "(/.*)?");
1554
+ var renderRuntimeCode = function (moduleExpose, appCode) {
1555
+ var deepPath = path.relative(path.join(appCode, path.dirname(buildName)), ".");
1556
+ var resultCode = "";
1557
+ var _a = moduleExpose || {}, _b = _a.exports, exportName = _b === void 0 ? [] : _b, filePath = _a.path;
1558
+ exportName.forEach(function (item) {
1559
+ resultCode += "export const {".concat(item, "} = require('").concat(deepPath, "/").concat(filePath, "');");
1560
+ });
1561
+ return resultCode;
1562
+ };
1563
+ var createExposesPlugin = function (options, currentManifestJson) {
1564
+ if (options === void 0) { options = {}; }
1565
+ options.exposes = options.exposes || {};
1566
+ var mainAppExposeCode = {};
1567
+ return [
1568
+ {
1569
+ name: "@chagee:uni-exposes",
1570
+ enforce: "post",
1571
+ configResolved: function (config) {
1572
+ return __awaiter(this, void 0, void 0, function () {
1573
+ var manifestJson;
1574
+ return __generator(this, function (_a) {
1575
+ switch (_a.label) {
1576
+ case 0: return [4 /*yield*/, getRootMainManifestJson(currentManifestJson.value.code, currentManifestJson.value.mode)];
1577
+ case 1:
1578
+ manifestJson = _a.sent();
1579
+ mainAppExposeCode = manifestJson.exposes || {};
1580
+ return [2 /*return*/];
1581
+ }
1582
+ });
1583
+ });
1584
+ },
1585
+ resolveId: function (id, importer) {
1586
+ return __awaiter(this, void 0, void 0, function () {
1587
+ return __generator(this, function (_a) {
1588
+ if (RUNTIME_NAME_REGEXP.test(id)) {
1589
+ return [2 /*return*/, id];
1590
+ }
1591
+ return [2 /*return*/];
1592
+ });
1593
+ });
1594
+ },
1595
+ load: function (id) {
1596
+ return __awaiter(this, void 0, void 0, function () {
1597
+ var matched, deepPath, moduleExpose;
1598
+ return __generator(this, function (_a) {
1599
+ if (RUNTIME_NAME_REGEXP.test(id)) {
1600
+ matched = id.match(RUNTIME_NAME_REGEXP);
1601
+ deepPath = "." + ((matched === null || matched === void 0 ? void 0 : matched[1]) || "");
1602
+ moduleExpose = mainAppExposeCode[deepPath] || {};
1603
+ return [2 /*return*/, renderRuntimeCode(moduleExpose, currentManifestJson.value.appCode)];
1604
+ }
1605
+ return [2 /*return*/];
1606
+ });
1607
+ });
1608
+ },
1609
+ buildStart: function () {
1610
+ return __awaiter(this, void 0, void 0, function () {
1611
+ var _i, _a, _b, spec, r, id, fileName, fileNameWithoutExt;
1612
+ var _this = this;
1613
+ return __generator(this, function (_c) {
1614
+ switch (_c.label) {
1615
+ case 0:
1616
+ // 显式发射 runtime chunk,确保它被打包到根目录
1617
+ Object.keys(mainAppExposeCode).forEach(function (key) {
1618
+ var keyDir = key.replace(/\./g, "").replace(/\//g, "_");
1619
+ _this.emitFile({
1620
+ type: "chunk",
1621
+ id: path.join(RUNTIME_NAME, key),
1622
+ fileName: buildName.replace("{template}", keyDir),
1623
+ });
1624
+ });
1625
+ _i = 0, _a = Object.entries(options.exposes || {});
1626
+ _c.label = 1;
1627
+ case 1:
1628
+ if (!(_i < _a.length)) return [3 /*break*/, 4];
1629
+ _b = _a[_i], _b[0], spec = _b[1];
1630
+ return [4 /*yield*/, this.resolve(spec)];
1631
+ case 2:
1632
+ r = _c.sent();
1633
+ if (r) {
1634
+ id = r === null || r === void 0 ? void 0 : r.id;
1635
+ fileName = path.relative(process.cwd() + "/src/", id);
1636
+ fileNameWithoutExt = getFilePathWithoutExt(fileName);
1637
+ this.emitFile({
1638
+ type: "chunk",
1639
+ id: r.id,
1640
+ name: fileNameWithoutExt,
1641
+ });
1642
+ }
1643
+ _c.label = 3;
1644
+ case 3:
1645
+ _i++;
1646
+ return [3 /*break*/, 1];
1647
+ case 4: return [2 /*return*/];
1648
+ }
1649
+ });
1650
+ });
1651
+ },
1652
+ generateBundle: function (_, bundles) {
1653
+ return __awaiter(this, void 0, void 0, function () {
1654
+ var chunks, resolveIdsMap, _loop_1, this_1, _a, _b, _c, _i, i;
1655
+ return __generator(this, function (_d) {
1656
+ switch (_d.label) {
1657
+ case 0:
1658
+ chunks = Object.values(bundles).filter(function (b) { return b.type === "chunk"; });
1659
+ resolveIdsMap = {};
1660
+ _loop_1 = function (i) {
1661
+ var moduleId, owner;
1662
+ return __generator(this, function (_e) {
1663
+ switch (_e.label) {
1664
+ case 0: return [4 /*yield*/, this_1.resolve(options.exposes[i])];
1665
+ case 1:
1666
+ moduleId = _e.sent();
1667
+ if (moduleId) {
1668
+ owner = chunks.find(function (c) { return c.modules && c.modules[moduleId.id]; });
1669
+ if (owner) {
1670
+ resolveIdsMap[i] = {
1671
+ path: owner.fileName,
1672
+ exports: owner.exports,
1673
+ };
1674
+ }
1675
+ }
1676
+ return [2 /*return*/];
1677
+ }
1678
+ });
1679
+ };
1680
+ this_1 = this;
1681
+ _a = options.exposes;
1682
+ _b = [];
1683
+ for (_c in _a)
1684
+ _b.push(_c);
1685
+ _i = 0;
1686
+ _d.label = 1;
1687
+ case 1:
1688
+ if (!(_i < _b.length)) return [3 /*break*/, 4];
1689
+ _c = _b[_i];
1690
+ if (!(_c in _a)) return [3 /*break*/, 3];
1691
+ i = _c;
1692
+ return [5 /*yield**/, _loop_1(i)];
1693
+ case 2:
1694
+ _d.sent();
1695
+ _d.label = 3;
1696
+ case 3:
1697
+ _i++;
1698
+ return [3 /*break*/, 1];
1699
+ case 4:
1700
+ currentManifestJson.setExposes(resolveIdsMap);
1701
+ return [2 /*return*/];
1702
+ }
1703
+ });
1704
+ });
1705
+ },
1706
+ },
1707
+ ];
1708
+ };
1709
+
1553
1710
  var createMpWeixinUniPlugin = function (options) {
1711
+ if (options === void 0) { options = {}; }
1554
1712
  var currentManifestJson = createManifestManager();
1713
+ options.exposes = options.exposes || {};
1555
1714
  return [
1556
1715
  {
1557
1716
  name: "@dd-code:genre-params",
@@ -1561,7 +1720,9 @@ var createMpWeixinUniPlugin = function (options) {
1561
1720
  return __generator(this, function (_a) {
1562
1721
  switch (_a.label) {
1563
1722
  case 0:
1564
- currentManifestJson.setEnv(config.mode);
1723
+ currentManifestJson.setEnv(config.mode || "dev");
1724
+ // 清空 PUBLISH_PATH 目录
1725
+ unlinkDeepDirOrFile(PUBLISH_PATH);
1565
1726
  return [4 /*yield*/, resetOutDir(currentManifestJson, config)];
1566
1727
  case 1:
1567
1728
  _a.sent();
@@ -1571,6 +1732,7 @@ var createMpWeixinUniPlugin = function (options) {
1571
1732
  });
1572
1733
  },
1573
1734
  },
1735
+ createExposesPlugin(options, currentManifestJson),
1574
1736
  createAppsAssetsPlugin(currentManifestJson),
1575
1737
  createManifestPlugin(currentManifestJson),
1576
1738
  createMainAppPlugin(currentManifestJson),
@@ -1591,7 +1753,7 @@ var createMpWeixinUniPlugin = function (options) {
1591
1753
  var index = (function (options) {
1592
1754
  var platform = getPlatform();
1593
1755
  return platform === EPlaform.MP_WEIXIN
1594
- ? createMpWeixinUniPlugin()
1756
+ ? createMpWeixinUniPlugin(options)
1595
1757
  : [];
1596
1758
  });
1597
1759