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