@tmsfe/tmskit 0.0.39 → 0.0.42
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.cjs.js +59 -8
- package/package.json +1 -1
- package/src/core/buildAppJson.js +59 -7
package/dist/index.cjs.js
CHANGED
|
@@ -1440,23 +1440,35 @@ const fixAppJson = appJson => {
|
|
|
1440
1440
|
const {
|
|
1441
1441
|
subpackages
|
|
1442
1442
|
} = appJson;
|
|
1443
|
+
// 创建插件映射,用于检测插件配置冲突
|
|
1443
1444
|
const pluginsMap = {};
|
|
1445
|
+
// 记录app.json顶层的插件配置
|
|
1444
1446
|
Object.keys(appJson.plugins || {}).forEach(key => pluginsMap[key] = ['app.json']);
|
|
1447
|
+
|
|
1448
|
+
// 处理每个分包的配置
|
|
1445
1449
|
const subps = subpackages.map(subp => {
|
|
1450
|
+
// 需要从分包提取到app.json顶层的数组类型字段
|
|
1446
1451
|
const arrOfFileType = ['requiredBackgroundModes', 'embeddedAppIdList'];
|
|
1452
|
+
// 需要从分包提取到app.json顶层的对象类型字段
|
|
1447
1453
|
const objOfFileType = ['preloadRule'];
|
|
1454
|
+
|
|
1455
|
+
// 遍历分包中的每个配置项
|
|
1448
1456
|
Object.keys(subp).forEach(key => {
|
|
1457
|
+
// 处理插件配置,检查是否有重复配置的插件
|
|
1449
1458
|
if (key === 'plugins') {
|
|
1450
1459
|
Object.keys(subp.plugins).forEach(pk => {
|
|
1460
|
+
// 记录每个插件被哪些地方配置
|
|
1451
1461
|
pluginsMap[pk] ? pluginsMap[pk].push(`分包${subp.name}`) : pluginsMap[pk] = [`分包${subp.name}`];
|
|
1452
1462
|
});
|
|
1453
1463
|
}
|
|
1454
|
-
|
|
1464
|
+
|
|
1465
|
+
// 处理数组类型字段(如requiredBackgroundModes),合并到app.json顶层并去重
|
|
1455
1466
|
if (arrOfFileType.indexOf(key) > -1) {
|
|
1456
1467
|
const preVal = appJson[key];
|
|
1457
1468
|
preVal ? appJson[key] = Array.from(new Set(preVal.slice(0).concat(subp[key]))) : appJson[key] = subp[key].slice(0);
|
|
1458
1469
|
}
|
|
1459
|
-
|
|
1470
|
+
|
|
1471
|
+
// 处理对象类型字段(如preloadRule),合并到app.json顶层,已存在的键值不覆盖
|
|
1460
1472
|
if (objOfFileType.indexOf(key) > -1) {
|
|
1461
1473
|
const preloadRuleMap = appJson[key] || {};
|
|
1462
1474
|
subp[key] && Object.keys(subp[key]).forEach(page => {
|
|
@@ -1467,9 +1479,12 @@ const fixAppJson = appJson => {
|
|
|
1467
1479
|
appJson[key] = preloadRuleMap;
|
|
1468
1480
|
}
|
|
1469
1481
|
});
|
|
1482
|
+
|
|
1483
|
+
// 从分包配置中移除已提取到顶层的字段以及一些构建相关的内部字段
|
|
1470
1484
|
return filterField$7(subp, [...arrOfFileType, ...objOfFileType, 'dependencies', 'path']);
|
|
1471
1485
|
});
|
|
1472
|
-
|
|
1486
|
+
|
|
1487
|
+
// 检查插件配置冲突,如果同一个插件在多处配置则报错
|
|
1473
1488
|
const pluginsErrMsg = Object.keys(pluginsMap).map(pk => {
|
|
1474
1489
|
if (pluginsMap[pk].length > 1) {
|
|
1475
1490
|
return `${pluginsMap[pk].join(',')}重复配置plugin(${pk});`;
|
|
@@ -1479,9 +1494,44 @@ const fixAppJson = appJson => {
|
|
|
1479
1494
|
if (pluginsErrMsg) {
|
|
1480
1495
|
throw new Error(`plugins配置出现错误:${pluginsErrMsg}`);
|
|
1481
1496
|
}
|
|
1497
|
+
|
|
1498
|
+
// 用处理后的分包配置更新app.json的subpackages字段
|
|
1482
1499
|
appJson.subpackages = subps;
|
|
1483
1500
|
};
|
|
1484
1501
|
|
|
1502
|
+
/**
|
|
1503
|
+
* 合并分包配置,保留已有分包,添加新分包
|
|
1504
|
+
* @param {Array} existingPackages 现有的分包配置
|
|
1505
|
+
* @param {Array} newPackages 新的分包配置
|
|
1506
|
+
* @returns {Array} 合并后的分包配置
|
|
1507
|
+
*/
|
|
1508
|
+
function mergeSubPackages(existingPackages, newPackages) {
|
|
1509
|
+
// 创建结果数组和root到索引的映射
|
|
1510
|
+
const resultPackages = [...existingPackages];
|
|
1511
|
+
const rootMap = {};
|
|
1512
|
+
|
|
1513
|
+
// 建立现有分包的root映射
|
|
1514
|
+
existingPackages.forEach((pkg, index) => {
|
|
1515
|
+
if (pkg.root) {
|
|
1516
|
+
rootMap[pkg.root] = index;
|
|
1517
|
+
}
|
|
1518
|
+
});
|
|
1519
|
+
|
|
1520
|
+
// 合并新分包
|
|
1521
|
+
newPackages.forEach(newPkg => {
|
|
1522
|
+
if (!newPkg.root) return; // 忽略没有root的分包
|
|
1523
|
+
|
|
1524
|
+
if (rootMap[newPkg.root] !== undefined) {
|
|
1525
|
+
// 如果已存在相同root的分包,则不覆盖保留原有配置
|
|
1526
|
+
info$f(`保留已有分包配置, root: ${newPkg.root}, name: ${newPkg.name || '未命名'}`);
|
|
1527
|
+
} else {
|
|
1528
|
+
// 如果不存在,则添加新分包
|
|
1529
|
+
resultPackages.push(newPkg);
|
|
1530
|
+
}
|
|
1531
|
+
});
|
|
1532
|
+
return resultPackages;
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1485
1535
|
/**
|
|
1486
1536
|
* 动态生成编译后的app.json
|
|
1487
1537
|
* @param {object} tmsConfig
|
|
@@ -1494,13 +1544,14 @@ async function buildOutputAppJson$3(tmsConfig, modules) {
|
|
|
1494
1544
|
// 获取所有模块,合并模块依赖的模块
|
|
1495
1545
|
const modulesConfig = getModulesConfig(modules, tmsConfig, false);
|
|
1496
1546
|
// 获取所有的分包
|
|
1497
|
-
const
|
|
1547
|
+
const newSubPackages = getSubPackages$3(modulesConfig);
|
|
1498
1548
|
// 获取app.json的配置
|
|
1499
1549
|
let appJson = getAppJsonContent(resolve$h('./app.json'));
|
|
1500
1550
|
|
|
1501
|
-
//
|
|
1502
|
-
appJson.subpackages
|
|
1503
|
-
appJson.subpackages
|
|
1551
|
+
// 保留已有分包配置,合并新的分包配置
|
|
1552
|
+
const existingSubpackages = appJson.subpackages || [];
|
|
1553
|
+
appJson.subpackages = mergeSubPackages(existingSubpackages, newSubPackages);
|
|
1554
|
+
appJson.subpackages.sort((item1, item2) => item1.root.localeCompare(item2.root));
|
|
1504
1555
|
|
|
1505
1556
|
// 处理appJson中重复||冲突的地方
|
|
1506
1557
|
fixAppJson(appJson);
|
|
@@ -4128,7 +4179,7 @@ var entry = [{
|
|
|
4128
4179
|
|
|
4129
4180
|
var require$$12 = {
|
|
4130
4181
|
name: "@tmsfe/tmskit",
|
|
4131
|
-
version: "0.0.
|
|
4182
|
+
version: "0.0.42",
|
|
4132
4183
|
description: "tmskit",
|
|
4133
4184
|
main: "dist/index.cjs",
|
|
4134
4185
|
bin: {
|
package/package.json
CHANGED
package/src/core/buildAppJson.js
CHANGED
|
@@ -71,27 +71,39 @@ const getAppJsonContent = (sourceAppJsonPath) => {
|
|
|
71
71
|
*/
|
|
72
72
|
const fixAppJson = (appJson) => {
|
|
73
73
|
const { subpackages } = appJson;
|
|
74
|
+
// 创建插件映射,用于检测插件配置冲突
|
|
74
75
|
const pluginsMap = {};
|
|
76
|
+
// 记录app.json顶层的插件配置
|
|
75
77
|
Object.keys(appJson.plugins || {}).forEach(key => pluginsMap[key] = ['app.json']);
|
|
78
|
+
|
|
79
|
+
// 处理每个分包的配置
|
|
76
80
|
const subps = subpackages.map((subp) => {
|
|
81
|
+
// 需要从分包提取到app.json顶层的数组类型字段
|
|
77
82
|
const arrOfFileType = ['requiredBackgroundModes', 'embeddedAppIdList'];
|
|
83
|
+
// 需要从分包提取到app.json顶层的对象类型字段
|
|
78
84
|
const objOfFileType = ['preloadRule'];
|
|
85
|
+
|
|
86
|
+
// 遍历分包中的每个配置项
|
|
79
87
|
Object.keys(subp).forEach((key) => {
|
|
88
|
+
// 处理插件配置,检查是否有重复配置的插件
|
|
80
89
|
if (key === 'plugins') {
|
|
81
90
|
Object.keys(subp.plugins).forEach((pk) => {
|
|
91
|
+
// 记录每个插件被哪些地方配置
|
|
82
92
|
pluginsMap[pk]
|
|
83
93
|
? pluginsMap[pk].push(`分包${subp.name}`)
|
|
84
94
|
: pluginsMap[pk] = [`分包${subp.name}`];
|
|
85
95
|
});
|
|
86
96
|
}
|
|
87
|
-
|
|
97
|
+
|
|
98
|
+
// 处理数组类型字段(如requiredBackgroundModes),合并到app.json顶层并去重
|
|
88
99
|
if (arrOfFileType.indexOf(key) > -1) {
|
|
89
100
|
const preVal = appJson[key];
|
|
90
101
|
preVal
|
|
91
102
|
? appJson[key] = Array.from(new Set(preVal.slice(0).concat(subp[key])))
|
|
92
103
|
: appJson[key] = subp[key].slice(0);
|
|
93
104
|
}
|
|
94
|
-
|
|
105
|
+
|
|
106
|
+
// 处理对象类型字段(如preloadRule),合并到app.json顶层,已存在的键值不覆盖
|
|
95
107
|
if (objOfFileType.indexOf(key) > -1) {
|
|
96
108
|
const preloadRuleMap = appJson[key] || {};
|
|
97
109
|
subp[key] && Object.keys(subp[key]).forEach((page) => {
|
|
@@ -102,9 +114,12 @@ const fixAppJson = (appJson) => {
|
|
|
102
114
|
appJson[key] = preloadRuleMap;
|
|
103
115
|
}
|
|
104
116
|
});
|
|
117
|
+
|
|
118
|
+
// 从分包配置中移除已提取到顶层的字段以及一些构建相关的内部字段
|
|
105
119
|
return filterField(subp, [...arrOfFileType, ...objOfFileType, 'dependencies', 'path']);
|
|
106
120
|
});
|
|
107
|
-
|
|
121
|
+
|
|
122
|
+
// 检查插件配置冲突,如果同一个插件在多处配置则报错
|
|
108
123
|
const pluginsErrMsg = Object.keys(pluginsMap).map((pk) => {
|
|
109
124
|
if (pluginsMap[pk].length > 1) {
|
|
110
125
|
return `${pluginsMap[pk].join(',')}重复配置plugin(${pk});`;
|
|
@@ -115,9 +130,45 @@ const fixAppJson = (appJson) => {
|
|
|
115
130
|
if (pluginsErrMsg) {
|
|
116
131
|
throw new Error(`plugins配置出现错误:${pluginsErrMsg}`);
|
|
117
132
|
}
|
|
133
|
+
|
|
134
|
+
// 用处理后的分包配置更新app.json的subpackages字段
|
|
118
135
|
appJson.subpackages = subps;
|
|
119
136
|
};
|
|
120
137
|
|
|
138
|
+
/**
|
|
139
|
+
* 合并分包配置,保留已有分包,添加新分包
|
|
140
|
+
* @param {Array} existingPackages 现有的分包配置
|
|
141
|
+
* @param {Array} newPackages 新的分包配置
|
|
142
|
+
* @returns {Array} 合并后的分包配置
|
|
143
|
+
*/
|
|
144
|
+
function mergeSubPackages(existingPackages, newPackages) {
|
|
145
|
+
// 创建结果数组和root到索引的映射
|
|
146
|
+
const resultPackages = [...existingPackages];
|
|
147
|
+
const rootMap = {};
|
|
148
|
+
|
|
149
|
+
// 建立现有分包的root映射
|
|
150
|
+
existingPackages.forEach((pkg, index) => {
|
|
151
|
+
if (pkg.root) {
|
|
152
|
+
rootMap[pkg.root] = index;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// 合并新分包
|
|
157
|
+
newPackages.forEach((newPkg) => {
|
|
158
|
+
if (!newPkg.root) return; // 忽略没有root的分包
|
|
159
|
+
|
|
160
|
+
if (rootMap[newPkg.root] !== undefined) {
|
|
161
|
+
// 如果已存在相同root的分包,则不覆盖保留原有配置
|
|
162
|
+
info(`保留已有分包配置, root: ${newPkg.root}, name: ${newPkg.name || '未命名'}`);
|
|
163
|
+
} else {
|
|
164
|
+
// 如果不存在,则添加新分包
|
|
165
|
+
resultPackages.push(newPkg);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
return resultPackages;
|
|
170
|
+
}
|
|
171
|
+
|
|
121
172
|
/**
|
|
122
173
|
* 动态生成编译后的app.json
|
|
123
174
|
* @param {object} tmsConfig
|
|
@@ -129,13 +180,14 @@ async function buildOutputAppJson(tmsConfig, modules) {
|
|
|
129
180
|
// 获取所有模块,合并模块依赖的模块
|
|
130
181
|
const modulesConfig = getModulesConfig(modules, tmsConfig, false);
|
|
131
182
|
// 获取所有的分包
|
|
132
|
-
const
|
|
183
|
+
const newSubPackages = getSubPackages(modulesConfig);
|
|
133
184
|
// 获取app.json的配置
|
|
134
185
|
let appJson = getAppJsonContent(resolve('./app.json'));
|
|
135
186
|
|
|
136
|
-
//
|
|
137
|
-
appJson.subpackages
|
|
138
|
-
appJson.subpackages
|
|
187
|
+
// 保留已有分包配置,合并新的分包配置
|
|
188
|
+
const existingSubpackages = appJson.subpackages || [];
|
|
189
|
+
appJson.subpackages = mergeSubPackages(existingSubpackages, newSubPackages);
|
|
190
|
+
appJson.subpackages.sort((item1, item2) => item1.root.localeCompare(item2.root));
|
|
139
191
|
|
|
140
192
|
// 处理appJson中重复||冲突的地方
|
|
141
193
|
fixAppJson(appJson);
|