@cloudbase/lowcode-builder 1.1.6 → 1.1.8

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.
@@ -54,35 +54,18 @@ const cals_1 = require("@cloudbase/cals");
54
54
  const templateDir = `${config_1.appTemplateDir}/mp/`;
55
55
  const em = chalk_1.default.blue.bold;
56
56
  const error = chalk_1.default.redBright;
57
- async function generateWxMp({ weapps, projDir, appId, domain, materials, plugins, isProduction, deployMode, extraData, isMixMode, options, buildTypeList, isBrowserMpBuilder = false, ignoreInstall = false, }) {
57
+ async function generateWxMp({ buildContext, weapps, plugins, deployMode, options, buildTypeList, isBrowserMpBuilder = false, ignoreInstall = false, }) {
58
58
  var _a;
59
+ const { appId, projDir, materialLibs: materials, isProduction, mainAppData, domain, isPrivateMode = false, } = buildContext;
59
60
  const operationLabel = em('Wexin MiniProgram Generated');
60
61
  console.time(operationLabel);
61
62
  console.log(`Generating ${em('Wexin MiniProgram')} to ${projDir}`);
62
- console.log(em('domain') + domain);
63
- let mainAppData = weapps[0];
64
- const buildContext = {
65
- projDir,
66
- appId,
67
- isProduction,
68
- materialLibs: materials,
69
- debugMode: !isProduction && !!process.env.WEAPPS_DEBUG,
70
- isMixMode,
71
- mainAppData,
72
- domain,
73
- isBrowserMpBuilder,
74
- };
75
- const yyptConfig = await (0, util_3.getYyptConfigInfo)(extraData);
76
- const { allAppUsedComps } = handleUsedComponents({
77
- buildContext,
78
- weapps,
79
- materials,
80
- });
63
+ const { allAppUsedComps } = handleUsedComponents({ buildContext, weapps });
81
64
  buildContext.miniprogramPlugins = (mainAppData.miniprogramPlugins || []).filter((plugin) => allAppUsedComps[plugin.name]);
82
65
  // 安装依赖库,生成 materials 目录
83
66
  await (0, materials_1.installMaterials)(projDir, allAppUsedComps, weapps, buildContext);
84
67
  const wxmlDataPrefix = (0, mp_1.getWxmlDataPrefix)(!isProduction);
85
- const { projConfig, appConfig, pageConfigs } = (0, mp_config_1.generateMpConfig)(weapps, buildContext, { mpAppId: options === null || options === void 0 ? void 0 : options.mpAppId });
68
+ const { projConfig, appConfig, pageConfigs } = (0, mp_config_1.generateMpConfig)(weapps, buildContext, { mpAppId: options.mpAppId });
86
69
  // #1 generate project files
87
70
  if (!mainAppData.mpPkgUrl) {
88
71
  const projectFileData = {
@@ -135,7 +118,8 @@ async function generateWxMp({ weapps, projDir, appId, domain, materials, plugins
135
118
  };
136
119
  }
137
120
  if (mainAppData.mpPkgUrl) {
138
- // 合并 project 和 app json
121
+ // 合并 project 和 app json,复写 appId
122
+ projectConfigJson.appId = projConfig.appId;
139
123
  if (!projectConfigJson.setting) {
140
124
  projectConfigJson.setting = {};
141
125
  }
@@ -153,7 +137,6 @@ async function generateWxMp({ weapps, projDir, appId, domain, materials, plugins
153
137
  const importor = (0, util_3.generateLowcodeImportor)(mainAppData.lowCodes || []);
154
138
  appFileData = {
155
139
  ...appFileData,
156
- 'common/wx_yypt_report_v2.js': {},
157
140
  'app.js': { appConfig, importor },
158
141
  'app.json': { content: appConfig },
159
142
  'app.wxss': {
@@ -166,6 +149,7 @@ async function generateWxMp({ weapps, projDir, appId, domain, materials, plugins
166
149
  },
167
150
  'package.json': {
168
151
  appId,
152
+ isPrivateMode,
169
153
  extraDeps: resolveNpmDeps(),
170
154
  },
171
155
  };
@@ -187,6 +171,7 @@ async function generateWxMp({ weapps, projDir, appId, domain, materials, plugins
187
171
  resourceAppid: !!options.isCrossAccount ? options.resourceAppId : '',
188
172
  isProd: deployMode === types_1.DEPLOY_MODE.UPLOAD,
189
173
  clientID: (_a = mainAppData.extra) === null || _a === void 0 ? void 0 : _a.clientId,
174
+ isPrivateMode,
190
175
  },
191
176
  'datasources/datasource-profiles.js.tpl': {
192
177
  datasourceProfiles: (0, util_3.JsonToStringWithVariableName)((0, lowcode_generator_1.getDatasourceProfiles)(
@@ -221,6 +206,7 @@ async function generateWxMp({ weapps, projDir, appId, domain, materials, plugins
221
206
  await (0, generateFiles_1.default)({
222
207
  'package.json': {
223
208
  appId,
209
+ isPrivateMode,
224
210
  extraDeps: resolveNpmDeps(),
225
211
  },
226
212
  }, templateDir, subpackageRootPath, buildContext);
@@ -228,7 +214,10 @@ async function generateWxMp({ weapps, projDir, appId, domain, materials, plugins
228
214
  }
229
215
  }));
230
216
  if (!isBrowserMpBuilder && fs.existsSync(path_1.default.join(miniprogramRoot, 'package.json'))) {
231
- await (0, webpack_1.installDependencies)(miniprogramRoot, { ignoreInstall });
217
+ await (0, webpack_1.installDependencies)(miniprogramRoot, {
218
+ ignoreInstall,
219
+ fixNodeModulesMap: { '@cloudbase/js-sdk': !isPrivateMode, mobx: true },
220
+ });
232
221
  }
233
222
  await handleMpPlugins();
234
223
  console.timeEnd(operationLabel);
@@ -240,7 +229,7 @@ async function generateWxMp({ weapps, projDir, appId, domain, materials, plugins
240
229
  var _a;
241
230
  const deps = [
242
231
  {
243
- deps: ((_a = weapps.find((a) => !a.rootPath)) === null || _a === void 0 ? void 0 : _a.npmDependencies) || [],
232
+ deps: ((_a = weapps.find((a) => !a.rootPath)) === null || _a === void 0 ? void 0 : _a.npmDependencies) || {},
244
233
  name: '主包',
245
234
  },
246
235
  ];
@@ -427,7 +416,7 @@ async function writeLowCodeFiles(appData, outDir, ctx) {
427
416
  // 混合模式,子包不生成顶级(应用级)的 lowcodes
428
417
  if (!(ctx.isMixMode && appData.rootPath)) {
429
418
  await Promise.all(lowCodes
430
- .filter((mod) => mod.type !== 'renderer')
419
+ .filter((mod) => mod.type !== cals_1.ECodeType.RENDERER)
431
420
  .map((m) => {
432
421
  (0, lowcode_1.writeCode2file)(m, lowcodeRootDir, { appDir: outDir }, themeStyle.code);
433
422
  }));
@@ -435,7 +424,7 @@ async function writeLowCodeFiles(appData, outDir, ctx) {
435
424
  await Promise.all((0, weapps_core_1.loopDealWithFn)(appData.pageInstanceList, async (page) => {
436
425
  const codes = (0, cals_1.processRuntimeCodeResources)({ id: page.id }, page.lowCodes || page.codeModules, 'page');
437
426
  await codes
438
- .filter((mod) => mod.type !== 'renderer')
427
+ .filter((mod) => mod.type !== cals_1.ECodeType.RENDERER)
439
428
  .forEach((m) => {
440
429
  (0, lowcode_1.writeCode2file)(m, lowcodeRootDir, { pageId: page.id, appDir: outDir }, themeStyle.code, ctx);
441
430
  });
@@ -463,7 +452,8 @@ function getAppendableJson(json) {
463
452
  * TODO: 与 cals 里的实现进行整合
464
453
  * 关键点在于 appUsedComps 分组, 与 generic componen 的实现
465
454
  */
466
- function handleUsedComponents({ buildContext, weapps, materials, }) {
455
+ function handleUsedComponents({ buildContext, weapps }) {
456
+ const { materialLibs: materials } = buildContext;
467
457
  const appUsedComps = weapps.map((app) => {
468
458
  var _a;
469
459
  const usedComps = {};
@@ -327,6 +327,12 @@ async function generateCompositeComponent(compositedComp, ctx, compLibCommonReso
327
327
  ${compLibCommonResource.theme.class || ''}
328
328
  `;
329
329
  }
330
+ /**
331
+ * 低码没有开放 index 类别,直接去掉
332
+ */
333
+ if (mod.name === 'index') {
334
+ return;
335
+ }
330
336
  return (0, lowcode_1.writeCode2file)(mod, path.join(outDir, LOWCODE_DIR_NAME), { comp: compositedComp }, themeCode, ctx);
331
337
  });
332
338
  // await writeLowCodeFiles(weapp, appRoot)
@@ -1,8 +1,9 @@
1
1
  import { IWeAppData, IPlugin, IMaterialItem } from '@cloudbase/lowcode-generator/lib/weapps-core';
2
2
  import { IAppUsedComp } from '../types/common';
3
- export declare function handleMixMode({ apps, generateMpPath, miniprogramRoot, plugins, }: {
3
+ import { IBuildContext } from '../mp/BuildContext';
4
+ export declare function handleMixMode({ buildContext, apps, miniprogramRoot, plugins, }: {
5
+ buildContext: IBuildContext;
4
6
  apps: IWeAppData[];
5
- generateMpPath: string;
6
7
  miniprogramRoot: string;
7
8
  plugins: IPlugin[];
8
9
  }): Promise<void>;
@@ -36,13 +36,16 @@ const chalk_1 = __importDefault(require("chalk"));
36
36
  const generateFiles_1 = require("../util/generateFiles");
37
37
  const webpack_1 = require("../service/webpack");
38
38
  // 将 BUILD 目录往混合模式移动
39
- async function handleMixMode({ apps = [], generateMpPath, miniprogramRoot, plugins = [], }) {
39
+ async function handleMixMode({ buildContext, apps = [], miniprogramRoot, plugins = [], }) {
40
+ const { projDir: generateMpPath, isPrivateMode } = buildContext;
40
41
  // await handleMainApp()
41
42
  // await handleAppPages()
42
43
  await handleSubApps();
43
44
  // await handleAppJson()
44
45
  // await handlePkgJson()
45
- await (0, webpack_1.installDependencies)(miniprogramRoot);
46
+ await (0, webpack_1.installDependencies)(miniprogramRoot, {
47
+ fixNodeModulesMap: { mobx: true, '@cloudbase/js-sdk': !isPrivateMode },
48
+ });
46
49
  await handlePlugins();
47
50
  // 复制框架公用内容
48
51
  async function handleMainApp() {
@@ -6,7 +6,7 @@ import { IBuildContext } from './BuildContext';
6
6
  * @param kboneConfig https://wechat-miniprogram.github.io/kbone/docs/config/
7
7
  * @param appConfigs app config from prop edit panel
8
8
  */
9
- export declare function generateMpConfig(weapps: IWeAppData[], ctx: IBuildContext, options?: {
9
+ export declare function generateMpConfig(weapps: IWeAppData[], ctx: IBuildContext, options: {
10
10
  mpAppId?: string;
11
11
  }): {
12
12
  appConfig: any;
@@ -117,6 +117,9 @@ function generateMpConfig(weapps, ctx, options) {
117
117
  });
118
118
  }
119
119
  });
120
+ if (options.mpAppId) {
121
+ projConfig.appId = options.mpAppId;
122
+ }
120
123
  // merge(pageConfigs, extractAllPagesConfig())
121
124
  return { appConfig, projConfig, pageConfigs };
122
125
  }
@@ -165,7 +168,7 @@ function transformDynamicData(originData) {
165
168
  const temp = {};
166
169
  for (const key in originData) {
167
170
  const target = originData[key];
168
- if (target && target.value) {
171
+ if (target === null || target === void 0 ? void 0 : target.value) {
169
172
  temp[key] = target.value;
170
173
  }
171
174
  }
@@ -2,6 +2,7 @@ import { IMaterialItem, IWebRuntimeAppData } from '@cloudbase/lowcode-generator/
2
2
  import { BuildType, WebpackModeType } from '../types/common';
3
3
  import { RUNTIME } from '../../types';
4
4
  export declare const PERSISTENT_DEPENDIENCES_MAP: {};
5
+ export declare const OUTPUT_DIR = "preview";
5
6
  export interface IMpConfig {
6
7
  origin: string;
7
8
  entry: string;
@@ -74,11 +75,17 @@ export interface IInstallOpts {
74
75
  version: string;
75
76
  downloadUrl: string;
76
77
  };
78
+ fixNodeModulesMap?: IFixNodeModulesMap;
77
79
  }
78
80
  export declare function installDependencies(targetDir: string, options?: IInstallOpts): Promise<void>;
81
+ interface IFixNodeModulesMap {
82
+ mobx?: boolean;
83
+ '@cloudbase/js-sdk'?: boolean;
84
+ }
79
85
  export declare function getMaterialNodeModulesPathList(dependencies: IMaterialItem[] | undefined, materialsDir: string, base?: string): string[];
80
86
  export declare function generateWebpackWebDevServerFile({ appBuildDir, buildTypeList }: {
81
87
  appBuildDir: any;
82
88
  buildTypeList: any;
83
89
  }): Promise<void>;
84
90
  export declare function downloadAssets(targetDir: string, assetUrl: string): Promise<unknown>;
91
+ export {};
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.downloadAssets = exports.generateWebpackWebDevServerFile = exports.getMaterialNodeModulesPathList = exports.installDependencies = exports.downloadDependencies = exports.downloadAndInstallDependencies = exports.getAllPageMpEntryPath = exports.getWebpackMpBuildParams = exports.getWebpackWebBuildParams = exports.getMpAllRouterConfig = exports.getPageName = exports.getHomePageInstance = exports.getMainAppDataByList = exports.generateMpJsonConfigFile = exports.generateKboneAppConfig = exports.generateKbonePageConfig = exports.downloadAndWriteTabBarIcon = exports.generateKboneTabBarConfig = exports.generateAppConfig = exports.generateWebpackWebBuildParamsFile = exports.fixAppJson = exports.PERSISTENT_DEPENDIENCES_MAP = void 0;
6
+ exports.downloadAssets = exports.generateWebpackWebDevServerFile = exports.getMaterialNodeModulesPathList = exports.installDependencies = exports.downloadDependencies = exports.downloadAndInstallDependencies = exports.getAllPageMpEntryPath = exports.getWebpackMpBuildParams = exports.getWebpackWebBuildParams = exports.getMpAllRouterConfig = exports.getPageName = exports.getHomePageInstance = exports.getMainAppDataByList = exports.generateMpJsonConfigFile = exports.generateKboneAppConfig = exports.generateKbonePageConfig = exports.downloadAndWriteTabBarIcon = exports.generateKboneTabBarConfig = exports.generateAppConfig = exports.generateWebpackWebBuildParamsFile = exports.fixAppJson = exports.OUTPUT_DIR = exports.PERSISTENT_DEPENDIENCES_MAP = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const fs_extra_1 = __importDefault(require("fs-extra"));
9
9
  const lodash_1 = require("lodash");
@@ -18,6 +18,7 @@ const common_2 = require("../util/common");
18
18
  const types_1 = require("../../types");
19
19
  const generateFiles_1 = require("../util/generateFiles");
20
20
  exports.PERSISTENT_DEPENDIENCES_MAP = {};
21
+ exports.OUTPUT_DIR = 'preview';
21
22
  async function fixAppJson(appBuildDir) {
22
23
  const appJsonPath = path_1.default.resolve(appBuildDir, 'dist/mp/app.json');
23
24
  if (!fs_extra_1.default.existsSync(appJsonPath)) {
@@ -273,7 +274,7 @@ function getWebpackWebBuildParams(appId, appBuildDir, publicPath = '/', mode = c
273
274
  watch: false,
274
275
  entry: path_1.default.resolve(appBuildDir, 'src/index.jsx'),
275
276
  output: {
276
- path: path_1.default.resolve(appBuildDir, './preview'),
277
+ path: path_1.default.resolve(appBuildDir, exports.OUTPUT_DIR),
277
278
  filename: '[name].[contenthash].bundle.js',
278
279
  chunkFilename: '[name].[contenthash].chunk.js',
279
280
  publicPath: buildTypeList.includes(common_1.BuildType.APP) || buildTypeList.includes(common_1.BuildType.ADMIN_PORTAL) ? '' : publicPath,
@@ -294,8 +295,6 @@ function getWebpackWebBuildParams(appId, appBuildDir, publicPath = '/', mode = c
294
295
  resolveModules: [path_1.default.resolve(appBuildDir), 'node_modules'],
295
296
  definePlugin: {
296
297
  'process.env.buildType': `"${buildTypeList[0]}"`,
297
- 'process.env.isApp': buildTypeList.includes(common_1.BuildType.APP),
298
- 'process.env.isAdminPortal': (0, common_1.buildAsAdminPortalByBuildType)(buildTypeList),
299
298
  ...extraDefine,
300
299
  },
301
300
  devtool: ['app-nvzcvt10', 'app-msa2ihs9'].includes(appId)
@@ -485,20 +484,25 @@ async function installDependencies(targetDir, options = {}) {
485
484
  };
486
485
  }
487
486
  }
488
- let installProcess;
489
487
  // 云端构建, 选用 npm
490
- const installlProcessOptions = {
488
+ const installProcessOptions = {
491
489
  cwd: targetDir,
492
490
  // NODE_ENV="production"时,devDependencies里的包不会下载,兼容h5在线编译
493
491
  env: { ...process.env, NODE_ENV: '' },
494
492
  stdio: 'inherit',
495
493
  };
494
+ let installprocess;
495
+ // TODO: install 失败 应该终止进程
496
496
  if (yarnExists && (options === null || options === void 0 ? void 0 : options.runtime) !== types_1.RUNTIME.CI) {
497
497
  const addPackage = packageName ? ['add', packageName] : [];
498
- installProcess = cross_spawn_1.default.sync('yarn', [...addPackage, registry], installlProcessOptions);
498
+ installprocess = cross_spawn_1.default.sync('yarn', [...addPackage, registry], installProcessOptions);
499
499
  }
500
500
  else {
501
- installProcess = cross_spawn_1.default.sync('npm', ['install', packageName, ...npmOptions], installlProcessOptions);
501
+ installprocess = cross_spawn_1.default.sync('npm', ['install', packageName, ...npmOptions], installProcessOptions);
502
+ }
503
+ // TODO: 确认 process.status 语义来判断是否标识进程正常退出
504
+ if (installprocess.status) {
505
+ throw new Error(`安装依赖失败 ${installprocess.error || ''}`);
502
506
  }
503
507
  fixNodeModules(targetDir);
504
508
  try {
@@ -509,14 +513,24 @@ async function installDependencies(targetDir, options = {}) {
509
513
  console.timeEnd(operationTag);
510
514
  }
511
515
  exports.installDependencies = installDependencies;
512
- function fixNodeModules(projDir) {
513
- // # fix mobx/package.json: "main": "lib/index.js" -> "main": "lib/index.js"
514
- const mobxPackageFile = path_1.default.join(projDir, 'node_modules', 'mobx/package.json');
515
- if (fs_extra_1.default.existsSync(mobxPackageFile)) {
516
- const mobxPackageFileContent = fs_extra_1.default.readJSONSync(mobxPackageFile);
517
- if (fs_extra_1.default.existsSync(path_1.default.join(projDir, 'node_modules', 'mobx/lib/mobx.min.js'))) {
518
- mobxPackageFileContent.main = 'lib/mobx.min.js';
519
- fs_extra_1.default.writeJSONSync(mobxPackageFile, mobxPackageFileContent);
516
+ function fixNodeModules(projDir, options = { mobx: false, '@cloudbase/js-sdk': false }) {
517
+ const { mobx = false, ['@cloudbase/js-sdk']: jsSDK = false } = options;
518
+ if (mobx) {
519
+ // # fix mobx/package.json: "main": "lib/index.js" -> "main": "lib/index.js"
520
+ const mobxPackageFile = path_1.default.join(projDir, 'node_modules', 'mobx/package.json');
521
+ if (fs_extra_1.default.existsSync(mobxPackageFile)) {
522
+ const mobxPackageFileContent = fs_extra_1.default.readJSONSync(mobxPackageFile);
523
+ if (fs_extra_1.default.existsSync(path_1.default.join(projDir, 'node_modules', 'mobx/lib/mobx.min.js'))) {
524
+ mobxPackageFileContent.main = 'lib/mobx.min.js';
525
+ fs_extra_1.default.writeJSONSync(mobxPackageFile, mobxPackageFileContent);
526
+ }
527
+ }
528
+ }
529
+ if (jsSDK) {
530
+ const scriptPath = path_1.default.resolve(projDir, 'node_modules', '@cloudbase/weda-cloud-sdk/scripts/fix-wx-none-private');
531
+ if (fs_extra_1.default.existsSync(scriptPath)) {
532
+ const fix = require(scriptPath);
533
+ fix();
520
534
  }
521
535
  }
522
536
  }