@tmsfe/tmskit 0.0.19 → 0.0.20

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.
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * 用来读取处理tms.config.js与module.config.json字段
3
3
  */
4
+ /* eslint-disable no-param-reassign, no-nested-ternary */
4
5
  const loadash = require('lodash');
5
6
  const fs = require('fs');
6
7
  const { TMS_CONFIG_FILENAME, MODULE_CONFIG_FILENAME, TMS_PRIVATE_FILENAME } = require('../config/constant');
@@ -50,7 +51,7 @@ const readTmsPrivateCf = function () {
50
51
  const checkModules = function (tmsConfig, modules, isQuit = false) {
51
52
  const targetModules = [];
52
53
  modules.forEach((moduleName) => {
53
- const module = tmsConfig.modules.all.find(module => module.name === moduleName);
54
+ const module = tmsConfig.modules.all.find(module => module.moduleName === moduleName);
54
55
  module && targetModules.push(module);
55
56
  });
56
57
 
@@ -79,7 +80,7 @@ function adaptMpCgContent(fileContent, appName) {
79
80
  return res;
80
81
  };
81
82
 
82
- let content = JSON.parse(fileContent);
83
+ let content = fileContent;
83
84
 
84
85
  if (isArray(content)) {
85
86
  let i = content.length - 1;
@@ -94,107 +95,119 @@ function adaptMpCgContent(fileContent, appName) {
94
95
  }
95
96
 
96
97
  /**
97
- * 递归获取本地所有模块的配置信息
98
+ * 获取模块module.config.json中的配置信息
98
99
  * @param {array} modules 用户要编译的模块列表
99
100
  * @param { string } appName 小程序的名称
100
- * @param { string } moduleConfigFilename moduleConfig的文件名
101
+ * @param {boolean} notFindIsQuit 找不到配置文件是否退出
101
102
  */
102
- function getModuleConfig(modules = [], appName, moduleConfigFilename) {
103
- const modulesConfig = {};
104
-
105
- modules.forEach(({ path }) => {
106
- const moduleConfigPath = resolve(path, moduleConfigFilename);
107
- if (fs.existsSync(moduleConfigPath)) {
108
- const content = fs.readFileSync(moduleConfigPath, 'utf-8');
109
- modulesConfig[moduleConfigPath] = adaptMpCgContent(content, appName);
103
+ function getModulesConfig(modules = [], appName, notFindIsQuit) {
104
+ const modulesConfig = [];
105
+ modules.forEach((moduleItem) => {
106
+ if (!moduleItem.path) {
107
+ throw new Error(`${moduleItem.moduleName}模块路径配置没有找到`);
110
108
  }
109
+ const moduleConfigPath = resolve(moduleItem.path, MODULE_CONFIG_FILENAME);
110
+ if (!fs.existsSync(moduleConfigPath)) {
111
+ if (notFindIsQuit) {
112
+ throw new Error(`${moduleItem.moduleName}模块的配置文件module.config.json在${moduleItem.path}目录下没有找到`);
113
+ }
114
+ return;
115
+ }
116
+ let moduleConfig;
117
+ try {
118
+ moduleConfig = JSON.parse(fs.readFileSync(moduleConfigPath, 'utf-8'));
119
+ } catch (e) {
120
+ throw new Error(`${moduleConfigPath}json解析报错: ${e}`);
121
+ }
122
+
123
+ // 兼容历史逻辑,后续可删除--- start
124
+ if (!moduleItem.moduleName) moduleItem.moduleName = moduleItem.name;
125
+ delete moduleItem.name;
126
+
127
+ let subPackages = isObject(moduleConfig) && moduleConfig.subPackages
128
+ ? moduleConfig.subPackages
129
+ : isObject(moduleConfig) ? [moduleConfig] : moduleConfig;
130
+
131
+ subPackages = adaptMpCgContent(subPackages, appName);
132
+ let dependencies = moduleConfig.dependencies || [];
133
+ subPackages.forEach((item) => {
134
+ item.path = moduleItem.path;
135
+ if (item.dependencies) {
136
+ dependencies = dependencies.concat(item.dependencies);
137
+ }
138
+ });
139
+ moduleItem.subPackages = subPackages;
140
+ moduleItem.dependencies = dependencies;
141
+ // 兼容逻辑--- end
142
+
143
+ modulesConfig.push(moduleItem);
111
144
  });
112
145
 
113
146
  return modulesConfig;
114
147
  }
115
148
 
116
149
  /**
117
- * tms.config.js的modules 合并 module.config.json的配置项
150
+ * 获取分包内容 (读取module.config.json的配置项)
118
151
  * @param {array} modules
119
- * @param {string} appName
120
- * @param {string} moduleDir
121
152
  * @returns
122
153
  */
123
- const tmsModulesMergeLocalModuleCfg = (modules, appName) => {
124
- const newModules = [];
125
- modules.forEach(({ path: relativePath, name: moduleName }, moduleIndex) => {
126
- const moduleConfigPath = resolve(relativePath, MODULE_CONFIG_FILENAME);
127
- if (fs.existsSync(moduleConfigPath)) {
128
- try {
129
- let findModule = false;
130
- let moduleConfigContent = fs.readFileSync(moduleConfigPath, 'utf-8');
131
- moduleConfigContent = adaptMpCgContent(moduleConfigContent, appName);
132
- const moduleContentArr = isObject(moduleConfigContent) ? [moduleConfigContent] : moduleConfigContent;
133
- moduleContentArr.forEach(({ name }, moduleContentArrIndex) => {
134
- if (name === moduleName) {
135
- findModule = true;
136
- newModules.push({
137
- ...modules[moduleIndex],
138
- ...moduleContentArr[moduleContentArrIndex],
139
- });
140
- }
141
- });
142
- if (!findModule) {
143
- fail(`启动模块${moduleName}在${moduleConfigPath}没有找到,请检查配置`);
144
- process.exit(1);
145
- }
146
- } catch (e) {
147
- fail(`${moduleConfigPath}配置错误: ${e}`);
148
- newModules.push({
149
- ...modules[moduleIndex],
150
- });
151
- }
152
- } else {
153
- newModules.push({
154
- ...modules[moduleIndex],
154
+ const getSubPackages = (modules) => {
155
+ const newSubPackages = [];
156
+ modules.forEach((module) => {
157
+ (module.subPackages || []).forEach((item) => {
158
+ newSubPackages.push({
159
+ path: module.path,
160
+ ...item,
155
161
  });
156
- }
162
+ });
157
163
  });
158
- return newModules;
164
+ return newSubPackages;
159
165
  };
160
166
 
161
167
  /**
162
- * 分包依赖了分包的模块 合并所依赖的modules
168
+ * 获取所有的模块,合并模块的依赖模块
163
169
  * @param { object } tmsConfig
164
170
  * @param {array} modules
165
- * @param {string} moduleDir
171
+ * @param {boolean} notFindIsQuit 找不到配置文件是否退出
166
172
  * @returns
167
173
  */
168
- const subModulesMergeDepModules = (tmsConfig, modules) => {
169
- const moduleNames = [];
170
- modules.forEach(({ name: moduleName }) => {
171
- moduleNames.push(moduleName);
172
- });
173
- let mergeModules = modules;
174
- let isOver = true;
175
-
176
- modules.forEach(({ dependencies: dependencyModules }) => {
177
- dependencyModules?.forEach((item) => {
178
- // 如果所有模块的dep都在moduleNames内,则所有依赖都齐了
179
- // 否则递归处理,根据name找到相关配置加到modules里
180
- if (moduleNames.indexOf(item) === -1) {
181
- const tmpModules = checkModules(tmsConfig, [...new Set([item])]);
182
- if (tmpModules.length > 0) {
183
- isOver = false;
184
- mergeModules = [...mergeModules, ...tmpModules];
185
- mergeModules = tmsModulesMergeLocalModuleCfg(mergeModules, tmsConfig.appName);
174
+ const getModulesByMergeDepModules = (tmsConfig, modules, notFindIsQuit = false) => {
175
+ const allModules = new Map();
176
+ function dfs(tmsConfig, modules) {
177
+ modules.forEach((moduleItem) => {
178
+ const [moduleConfig = {}] = getModulesConfig([moduleItem], tmsConfig.appName, notFindIsQuit);
179
+
180
+ if (!allModules.has(moduleItem.moduleName)) {
181
+ allModules.set(moduleItem.moduleName, { ...moduleItem, ...moduleConfig });
182
+
183
+ const dependenciesModules = [];
184
+ (moduleConfig?.dependencies || []).forEach((dependenciesModule) => {
185
+ tmsConfig.modules.all.forEach((module) => {
186
+ if (dependenciesModule === module.moduleName) {
187
+ dependenciesModules.push({ ...module });
188
+ }
189
+ });
190
+ });
191
+ if (dependenciesModules.length) {
192
+ dfs(tmsConfig, dependenciesModules);
186
193
  }
187
194
  }
188
195
  });
189
- });
190
- return isOver ? mergeModules : subModulesMergeDepModules(tmsConfig, mergeModules);
196
+ }
197
+ dfs(tmsConfig, modules);
198
+
199
+ const modulesArr = [];
200
+ for (const module of allModules.values()) {
201
+ modulesArr.push(module);
202
+ }
203
+ return modulesArr;
191
204
  };
192
205
 
193
206
  module.exports = {
194
207
  readTmsConfig,
195
208
  readTmsPrivateCf,
196
- getModuleConfig,
209
+ getModulesConfig,
197
210
  checkModules,
198
- tmsModulesMergeLocalModuleCfg,
199
- subModulesMergeDepModules,
211
+ getSubPackages,
212
+ getModulesByMergeDepModules,
200
213
  };
package/src/entry.js CHANGED
@@ -1,9 +1,9 @@
1
1
  module.exports = [
2
2
  {
3
- command: 'create <app-name>',
3
+ command: 'create <project-name>',
4
4
  description: '创建新的应用',
5
- action: (appName, cmd) => {
6
- require('./scripts/create')(appName, cmd);
5
+ action: (projectName) => {
6
+ require('./scripts/create')(projectName);
7
7
  },
8
8
  },
9
9
  {
@@ -3,8 +3,7 @@ const render = require('./render');
3
3
  const ask = require('./ask');
4
4
  const FILES_TO_IGNORE = require('./ignoreFiles');
5
5
 
6
-
7
- const generator = (buildDir, distDir, preMetadata) => new Promise((resolve, reject) => {
6
+ const generator = (buildDir, distDir, preMetadata = {}) => new Promise((resolve, reject) => {
8
7
  Metalsmith(buildDir)
9
8
  .metadata(preMetadata)
10
9
  .ignore(FILES_TO_IGNORE)
@@ -1,18 +1,27 @@
1
1
  const path = require('path');
2
2
  const fs = require('fs');
3
3
  const shelljs = require('shelljs');
4
- const { TEMPLATE_DIR, TEMPLATE_PATH, TEMPLATE_TKIT_DIR } = require('../../config/constant.js');
5
- const { downloadRepoForGit, createTask, resolve } = require('../../utils/widgets');
4
+ const inquirer = require('inquirer');
5
+ const {
6
+ TEMPLATE_DIR,
7
+ TEMPLATE_URL,
8
+ TEMPLATE_NAME,
9
+ TEMPLATE_TKIT_DIR,
10
+ CREATE_TEMPLATE_QUESTION,
11
+ } = require('../../config/constant.js');
12
+ const { resolve } = require('../../utils/widgets');
6
13
  const io = require('../../utils/io');
7
14
  const { fail, succeed, info } = require('../../utils/log');
8
15
  const generator = require('./generator');
16
+ const request = require('request');
17
+ const unzip = require('unzipper');
9
18
 
10
19
  /**
11
20
  * 如果该目录下面存在文件,换个名字
12
21
  * @param { string } targetDir 当前文件夹
13
22
  * @returns { undefined }
14
23
  */
15
- async function createAppDir(targetDir) {
24
+ async function createProjectDir(targetDir) {
16
25
  // 如果目录非空或者已经存在,提示用户,做选择
17
26
  if (fs.existsSync(targetDir)) {
18
27
  if (!await io.isDirEmpty(targetDir)) {
@@ -24,43 +33,75 @@ async function createAppDir(targetDir) {
24
33
  }
25
34
  }
26
35
 
36
+ /**
37
+ * 下载和解压远程的小程序模板
38
+ * @param {string} templateDir
39
+ * @param {string} templateUrl
40
+ * @param {string} templateName
41
+ * @returns
42
+ */
43
+ function downloadAndUnZipTemplate(templateDir, templateUrl, templateName) {
44
+ return new Promise((resolve, reject) => {
45
+ const localZipPath = `${templateDir}/${templateName}.zip`;
46
+ const stream = fs.createWriteStream(localZipPath);
47
+ request(`${templateUrl}?v=${new Date().getTime()}`).pipe(stream)
48
+ .on('close', (err) => {
49
+ if (err) {
50
+ reject(err);
51
+ return;
52
+ }
53
+ fs.createReadStream(localZipPath).pipe(unzip.Extract({ path: templateDir }))
54
+ .on('close', (err) => {
55
+ if (err) {
56
+ reject(err);
57
+ return;
58
+ }
59
+ resolve();
60
+ });
61
+ });
62
+ });
63
+ }
64
+
27
65
  /**
28
66
  * 创建本地小程序运行环境
29
- * @param { string } appType 项目类型
30
- * @param { string } appName 项目名称
67
+ * @param { string } projectType 项目类型
68
+ * @param { string } projectName 项目名称
31
69
  */
32
- async function create(appName) {
70
+ async function create(projectName) {
33
71
  const cwd = process.cwd();
34
- const targetDir = path.resolve(cwd, appName);
35
- const appType = 'mp';
36
- await createAppDir(targetDir);
72
+ const targetDir = path.resolve(cwd, projectName);
73
+ const { projectType } = await inquirer.prompt(CREATE_TEMPLATE_QUESTION);
37
74
 
38
- // 创建缓存目录
39
- io.ensureDirExist(TEMPLATE_DIR);
40
- // 拉取git模板
41
- await createTask(downloadRepoForGit, '拉取模板仓库', '拉取模板仓库完成')(
42
- 'https://git.woa.com/tmsfe/tms-frontend.git',
43
- TEMPLATE_DIR,
44
- 'master',
45
- );
75
+ // 创建项目目录
76
+ await createProjectDir(targetDir);
77
+
78
+ // 新创建缓存目录
79
+ if (fs.existsSync(TEMPLATE_DIR)) {
80
+ shelljs.rm('-rf', TEMPLATE_DIR);
81
+ }
82
+ fs.mkdirSync(TEMPLATE_DIR, { recursive: true });
83
+
84
+ // 下载和解压模板
85
+ await downloadAndUnZipTemplate(TEMPLATE_DIR, TEMPLATE_URL, TEMPLATE_NAME);
46
86
 
47
87
  // 生成模板(1. 询问问题, 2. ejs生成模板 3.生成到目标目录)
48
- generator(path.join(TEMPLATE_PATH, appType), targetDir, {
49
- appName,
50
- appType,
51
- }).then(() => {
52
- shelljs.cd(appName);
53
- const hooks = require(resolve(appName, TEMPLATE_TKIT_DIR, 'hooks.js'));
54
- if (hooks.afterCreate) {
55
- hooks.afterCreate.forEach((item) => {
56
- if (typeof item === 'function') {
57
- item.call(null, shelljs, { appName });
58
- } else {
59
- shelljs.exec(item);
60
- }
61
- });
88
+ generator(path.join(TEMPLATE_DIR, TEMPLATE_NAME, projectType), targetDir).then(() => {
89
+ shelljs.cd(projectName);
90
+ const hookFilePath = resolve(projectName, TEMPLATE_TKIT_DIR, 'hooks.js');
91
+ if (fs.existsSync(hookFilePath)) {
92
+ const hooks = require(hookFilePath);
93
+ if (hooks.afterCreate) {
94
+ hooks.afterCreate.forEach((item) => {
95
+ if (typeof item === 'function') {
96
+ item.call(null, shelljs, { projectName });
97
+ } else {
98
+ shelljs.exec(item);
99
+ }
100
+ });
101
+ }
102
+ shelljs.rm('-rf', resolve(projectName, TEMPLATE_TKIT_DIR));
62
103
  }
63
- shelljs.rm('-rf', resolve(appName, TEMPLATE_TKIT_DIR));
104
+
64
105
  succeed('项目创建完成.');
65
106
  })
66
107
  .catch((err) => {
@@ -3,19 +3,20 @@ const { resolve, filterField } = require('../../../utils/widgets');
3
3
  const init = require('../init/index');
4
4
  const compileBuild = require('../../../compile/build');
5
5
 
6
- async function build(tmsConfig, targetModules, env) {
6
+ async function build(tmsConfig, targetModules) {
7
7
  // 开始构建前,清理输出目录
8
8
  await shelljs.rm('-rf', resolve(tmsConfig.outputDir));
9
9
 
10
- const { targetModules: newModules } = await init(tmsConfig, targetModules);
10
+ const { modules: newModules, subPackages } = await init(tmsConfig, targetModules);
11
11
 
12
+ const isDev = false;
12
13
  if (typeof tmsConfig?.hooks?.beforeCompile === 'function') {
13
14
  await tmsConfig?.hooks?.beforeCompile({
14
- isDev: false,
15
+ isDev,
15
16
  tmsConfig: filterField(tmsConfig, ['gitAccount']),
16
17
  modules: newModules });
17
18
  };
18
- compileBuild(tmsConfig, newModules, env);
19
+ compileBuild(tmsConfig, newModules, subPackages, isDev);
19
20
  }
20
21
 
21
22
  module.exports = build;
@@ -2,18 +2,21 @@ const shelljs = require('shelljs');
2
2
  const compileDev = require('../../../compile/dev');
3
3
  const { resolve, filterField } = require('../../../utils/widgets');
4
4
  const init = require('../init/index');
5
- const { tmsModulesMergeLocalModuleCfg } = require('../../../core/tmsMpconfig');
5
+ const { getModulesByMergeDepModules, getSubPackages } = require('../../../core/tmsMpconfig');
6
6
  const { info } = require('../../../utils/log');
7
7
  const { global } = require('../../../utils/global');
8
8
  const { CACHE_DIR } = require('../../../config/constant');
9
9
 
10
10
 
11
11
  // 用户编译分包时,需要将dist中其他分包(主包不能删除)的内容删除,否则其他分包的内容混入到主包(导致主包的体积超2M)
12
- function delOtherModule(tmsConfig, targetModules) {
13
- const modules = tmsModulesMergeLocalModuleCfg(tmsConfig.modules.all, tmsConfig.appName);
14
- const targetModulesName = targetModules.map(item => item.name);
15
- modules.forEach((item) => {
16
- if (item.root && targetModulesName.indexOf(item.name) === -1) {
12
+ function delOtherPackages(tmsConfig, targetSubPackages) {
13
+ // 获取所有模块,合并模块依赖的模块
14
+ const allModules = getModulesByMergeDepModules(tmsConfig, tmsConfig.modules.all);
15
+ // 获取所有的分包
16
+ const allSubPackages = getSubPackages(allModules);
17
+ const targetSubPackagesName = targetSubPackages.map(item => item.name);
18
+ allSubPackages.forEach((item) => {
19
+ if (item.root && targetSubPackagesName.indexOf(item.name) === -1) {
17
20
  const moduleRootDir = resolve(`${tmsConfig.outputDir}/${item.root}`);
18
21
  shelljs.rm('-rf', `${moduleRootDir}/*`, { silent: true });
19
22
  // 解决微信开发者工具(dist/app.json: ["subpackages"][0]["root"] 字段需为 目录)错误 - 提前创建该目录
@@ -22,8 +25,7 @@ function delOtherModule(tmsConfig, targetModules) {
22
25
  });
23
26
  }
24
27
 
25
- async function dev(tmsConfig, targetModules, env) {
26
- let newModules = targetModules;
28
+ async function dev(tmsConfig, targetModules) {
27
29
  const { noCache } = global.getData('cmd');
28
30
  if (noCache) {
29
31
  shelljs.rm('-rf', resolve(tmsConfig.outputDir));
@@ -31,10 +33,9 @@ async function dev(tmsConfig, targetModules, env) {
31
33
  }
32
34
 
33
35
  // 初始化操作
34
- const initData = await init(tmsConfig, newModules);
35
- newModules = initData.targetModules;
36
+ const { subPackages, modules: newModules } = await init(tmsConfig, targetModules);
36
37
 
37
- info('当前dev启动的有效模块', newModules.map(item => item.name).sort());
38
+ info('当前dev启动的有效模块', newModules.map(item => item.moduleName).sort());
38
39
  if (typeof tmsConfig?.hooks?.beforeCompile === 'function') {
39
40
  await tmsConfig?.hooks?.beforeCompile({
40
41
  isDev: true,
@@ -42,8 +43,8 @@ async function dev(tmsConfig, targetModules, env) {
42
43
  modules: newModules,
43
44
  });
44
45
  };
45
- delOtherModule(tmsConfig, newModules);
46
- compileDev(tmsConfig, newModules, env);
46
+ delOtherPackages(tmsConfig, subPackages);
47
+ compileDev(tmsConfig, newModules, subPackages, true);
47
48
  }
48
49
 
49
50
  module.exports = dev;
@@ -5,13 +5,14 @@ const dev = require('./dev/index');
5
5
  const build = require('./build/index');
6
6
  const install = require('./install/index');
7
7
  const cloud = require('./cloud/index');
8
+ const { fail, info } = require('../../utils/log');
8
9
  const { global } = require('../../utils/global');
9
10
  const {
10
11
  readTmsConfig,
11
12
  readTmsPrivateCf,
12
13
  checkModules,
13
- tmsModulesMergeLocalModuleCfg,
14
- subModulesMergeDepModules,
14
+ getModulesByMergeDepModules,
15
+ getSubPackages,
15
16
  } = require('../../core/tmsMpconfig');
16
17
 
17
18
  const handleModuleArg = (cmd) => {
@@ -37,14 +38,20 @@ const getSpecificModules = (moduleArg, modules) => {
37
38
  return include;
38
39
  }
39
40
  if (exclude?.length > 0) {
40
- return all.filter(module => !exclude.includes(module.name)).map(item => item.name);
41
+ return all.filter(module => !exclude.includes(module.moduleName)).map(item => item.moduleName);
41
42
  }
42
43
  if (blockRemote === true) {
43
- return all.filter(module => module.repoInfo === undefined).map(item => item.name);
44
+ return all.filter(module => module.repoInfo === undefined).map(item => item.moduleName);
44
45
  }
45
- return all.map(item => item.name);
46
+ return all.map(item => item.moduleName);
46
47
  };
47
48
 
49
+ /**
50
+ * 合并tms.config.js 与 tms.private.config.js的配置项
51
+ * @param {*} tmsConfig
52
+ * @param {*} tmsPrivateCf
53
+ * @returns
54
+ */
48
55
  const mergeConfig = (tmsConfig, tmsPrivateCf) => {
49
56
  const modules = {};
50
57
  if (Array.isArray(tmsConfig.modules)) {
@@ -62,61 +69,68 @@ const mergeConfig = (tmsConfig, tmsPrivateCf) => {
62
69
  };
63
70
 
64
71
  async function run(commandName, cmd) {
72
+ try {
65
73
  // 用户本地的私有项目配置
66
- const tmsPrivateCf = readTmsPrivateCf();
67
- const { env = tmsPrivateCf?.env } = cmd;
68
- let tmsConfig = readTmsConfig(env);
69
- tmsConfig = mergeConfig(tmsConfig, tmsPrivateCf);
74
+ const tmsPrivateCf = readTmsPrivateCf();
75
+ const { env = tmsPrivateCf?.env } = cmd;
76
+ let tmsConfig = readTmsConfig(env);
77
+ tmsConfig = mergeConfig(tmsConfig, tmsPrivateCf);
70
78
 
71
- // 处理module参数
72
- const specificModules = getSpecificModules(
73
- handleModuleArg(cmd),
74
- tmsConfig.modules,
75
- );
79
+ // 处理module参数
80
+ const specificModules = getSpecificModules(
81
+ handleModuleArg(cmd),
82
+ tmsConfig.modules,
83
+ );
76
84
 
77
- const modules = checkModules(
78
- tmsConfig,
79
- [
80
- ...new Set([
81
- ...tmsConfig.mainPackages,
82
- ...specificModules,
83
- ]),
84
- ],
85
- true,
86
- );
85
+ const modules = checkModules(
86
+ tmsConfig,
87
+ [
88
+ ...new Set([
89
+ ...tmsConfig.mainPackages,
90
+ ...specificModules,
91
+ ]),
92
+ ],
93
+ true,
94
+ );
87
95
 
88
- // tms.config.js的modules 合并 module.config.json的配置项
89
- let newModules = tmsModulesMergeLocalModuleCfg(modules, tmsConfig.appName);
90
- // A分包依赖了B分包的代码, merge B分包进行编译;
91
- newModules = subModulesMergeDepModules(tmsConfig, newModules);
96
+ // 获取所有模块,合并模块依赖的模块
97
+ const newModules = getModulesByMergeDepModules(tmsConfig, modules);
98
+ // 获取所有的分包
99
+ const subPackages = getSubPackages(newModules);
92
100
 
93
- // 缓存数据
94
- global.setData({
95
- env,
96
- cmd,
97
- tmsConfig,
98
- });
101
+ // 缓存数据
102
+ global.setData({
103
+ env,
104
+ cmd,
105
+ tmsConfig,
106
+ });
99
107
 
100
- switch (commandName) {
101
- case 'init':
102
- init(tmsConfig, newModules, env);
103
- return;
104
- case 'dev':
105
- global.setData('isDev', true);
106
- dev(tmsConfig, newModules, env);
107
- return;
108
- case 'cloud':
109
- cloud(tmsConfig, env);
110
- return;
111
- case 'install':
112
- install(tmsConfig, newModules, env, false);
113
- return;
114
- case 'build':
115
- global.setData('isDev', false);
116
- build(tmsConfig, newModules, env);
117
- return;
118
- default:
119
- return;
108
+ switch (commandName) {
109
+ case 'init':
110
+ init(tmsConfig, newModules);
111
+ return;
112
+ case 'dev':
113
+ global.setData('isDev', true);
114
+ dev(tmsConfig, newModules);
115
+ return;
116
+ case 'cloud':
117
+ cloud(tmsConfig);
118
+ return;
119
+ case 'install':
120
+ install(tmsConfig, subPackages, false);
121
+ return;
122
+ case 'build':
123
+ global.setData('isDev', false);
124
+ build(tmsConfig, newModules);
125
+ return;
126
+ default:
127
+ return;
128
+ }
129
+ } catch (error) {
130
+ const errMsg = typeof error === 'object' ? error.message : error;
131
+ fail(`构建出现错误: ${errMsg}`);
132
+ info('详细错误信息', error);
133
+ process.exit(1);
120
134
  }
121
135
  }
122
136