From 003c745d38faad40f747f4b28e736ab50fa2faf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=80=86=E8=91=B5?= Date: Thu, 28 Oct 2021 15:43:59 +0800 Subject: [PATCH 1/2] feat(miniapp): migrate transformAppConfig method to shared --- packages/miniapp-builder-shared/src/index.js | 5 ++- .../src/transformConfig}/adaptConfig.js | 4 +- .../src/transformConfig/index.js} | 35 ++++++++++-------- .../src/handleIcon.js | 21 ----------- .../src/index.js | 11 ++++-- .../src/processIconFile.js | 37 +++++++++++++++++++ 6 files changed, 70 insertions(+), 43 deletions(-) rename packages/{rax-miniapp-config-webpack-plugin/src => miniapp-builder-shared/src/transformConfig}/adaptConfig.js (92%) rename packages/{rax-miniapp-config-webpack-plugin/src/transformAppConfig.js => miniapp-builder-shared/src/transformConfig/index.js} (62%) delete mode 100644 packages/rax-miniapp-config-webpack-plugin/src/handleIcon.js create mode 100644 packages/rax-miniapp-config-webpack-plugin/src/processIconFile.js diff --git a/packages/miniapp-builder-shared/src/index.js b/packages/miniapp-builder-shared/src/index.js index 4c9485f0..ba1d05cf 100644 --- a/packages/miniapp-builder-shared/src/index.js +++ b/packages/miniapp-builder-shared/src/index.js @@ -5,6 +5,7 @@ const pathHelper = require('./pathHelper'); const platformMap = require('./platformMap'); const constants = require('./constants'); const autoInstallNpm = require('./autoInstallNpm'); +const { transformAppConfig, transformPageConfig } = require('./transformConfig'); module.exports = { filterNativePages, @@ -13,5 +14,7 @@ module.exports = { pathHelper, platformMap, constants, - autoInstallNpm + autoInstallNpm, + transformAppConfig, + transformPageConfig }; diff --git a/packages/rax-miniapp-config-webpack-plugin/src/adaptConfig.js b/packages/miniapp-builder-shared/src/transformConfig/adaptConfig.js similarity index 92% rename from packages/rax-miniapp-config-webpack-plugin/src/adaptConfig.js rename to packages/miniapp-builder-shared/src/transformConfig/adaptConfig.js index 2188893d..f815962e 100644 --- a/packages/rax-miniapp-config-webpack-plugin/src/adaptConfig.js +++ b/packages/miniapp-builder-shared/src/transformConfig/adaptConfig.js @@ -1,4 +1,4 @@ -const { constants: { MINIAPP, WECHAT_MINIPROGRAM, BYTEDANCE_MICROAPP, QUICKAPP } } = require('miniapp-builder-shared'); +const { MINIAPP, WECHAT_MINIPROGRAM, BYTEDANCE_MICROAPP, QUICKAPP } = require('../constants'); const configKeyMap = { [MINIAPP]: { @@ -85,7 +85,7 @@ const configValueMap = { } }; -module.exports = function adaptConfig(originalConfig, property, target) { +module.exports = function adaptConfig(originalConfig = {}, property, target) { const config = {}; const configKeyAdapter = configKeyMap[target] && configKeyMap[target][property]; diff --git a/packages/rax-miniapp-config-webpack-plugin/src/transformAppConfig.js b/packages/miniapp-builder-shared/src/transformConfig/index.js similarity index 62% rename from packages/rax-miniapp-config-webpack-plugin/src/transformAppConfig.js rename to packages/miniapp-builder-shared/src/transformConfig/index.js index fbc6cde4..5cff4a00 100644 --- a/packages/rax-miniapp-config-webpack-plugin/src/transformAppConfig.js +++ b/packages/miniapp-builder-shared/src/transformConfig/index.js @@ -1,9 +1,8 @@ const { relative } = require('path'); -const adaptAppConfig = require('./adaptConfig'); -const handleIcon = require('./handleIcon'); -const { pathHelper: { normalizeOutputFilePath }} = require('miniapp-builder-shared'); +const adaptConfig = require('./adaptConfig'); +const { normalizeOutputFilePath } = require('../pathHelper'); -module.exports = function transformAppConfig(outputPath, originalAppConfig, target, subPackages) { +function transformAppConfig (originalAppConfig, target, subPackages) { const appConfig = {}; for (let configKey in originalAppConfig) { const config = originalAppConfig[configKey]; @@ -13,20 +12,17 @@ module.exports = function transformAppConfig(outputPath, originalAppConfig, targ // filter routes and applications break; case 'window': - appConfig[configKey] = adaptAppConfig(config, 'window', target); + appConfig[configKey] = adaptConfig(config, 'window', target); break; case 'tabBar': // Handle tab item if (config.items) { config.items = config.items.map(itemConfig => { const { icon, activeIcon, path: itemPath, pageName, ...others } = itemConfig; - const newItemConfig = {}; - if (icon) { - newItemConfig.icon = handleIcon(icon, outputPath); - } - if (activeIcon) { - newItemConfig.activeIcon = handleIcon(activeIcon, outputPath); - } + const newItemConfig = { + icon, + activeIcon + }; if (!itemConfig.pagePath) { const targetRoute = originalAppConfig.routes.find(({ path }) => path === itemPath || path === pageName @@ -35,10 +31,10 @@ module.exports = function transformAppConfig(outputPath, originalAppConfig, targ newItemConfig.pagePath = targetRoute.source; } } - return adaptAppConfig(Object.assign(newItemConfig, others), 'items', target); + return adaptConfig(Object.assign(newItemConfig, others), 'items', target); }); } - appConfig[configKey] = adaptAppConfig(config, 'tabBar', target); + appConfig[configKey] = adaptConfig(config, 'tabBar', target); break; case 'subAppRoot': appConfig.root = config; @@ -55,4 +51,13 @@ module.exports = function transformAppConfig(outputPath, originalAppConfig, targ } return appConfig; -}; +} + +function transformPageConfig (route = {}, target) { + return adaptConfig(route.window, 'window', target); +} + +module.exports = { + transformAppConfig, + transformPageConfig +} diff --git a/packages/rax-miniapp-config-webpack-plugin/src/handleIcon.js b/packages/rax-miniapp-config-webpack-plugin/src/handleIcon.js deleted file mode 100644 index 074d47e6..00000000 --- a/packages/rax-miniapp-config-webpack-plugin/src/handleIcon.js +++ /dev/null @@ -1,21 +0,0 @@ -const { dirname, join } = require('path'); -const { copy, existsSync, ensureDirSync, unlinkSync } = require('fs-extra'); - -function isUrl(src) { - return /^(https?:)?\/\//.test(src); -} - -module.exports = function(path, outputPath) { - if (!isUrl(path)) { - const sourcePath = join(process.cwd(), 'src', path); - if (existsSync(sourcePath)) { - const distPath = join(outputPath, path); - ensureDirSync(dirname(distPath)); - if (existsSync(distPath)) { - unlinkSync(distPath); - } - copy(sourcePath, distPath); - } - } - return path; -}; diff --git a/packages/rax-miniapp-config-webpack-plugin/src/index.js b/packages/rax-miniapp-config-webpack-plugin/src/index.js index 3a30e08c..0199b696 100644 --- a/packages/rax-miniapp-config-webpack-plugin/src/index.js +++ b/packages/rax-miniapp-config-webpack-plugin/src/index.js @@ -1,9 +1,9 @@ -const transformAppConfig = require('./transformAppConfig'); const { join } = require('path'); const { ensureDirSync } = require('fs-extra'); const safeWriteFile = require('./safeWriteFile'); -const adaptConfig = require('./adaptConfig'); const transformNativeConfig = require('./transformNativeConfig'); +const processIconFile = require('./processIconFile'); +const { transformAppConfig, transformPageConfig } = require('miniapp-builder-shared'); const PluginName = 'MiniAppConfigPlugin'; @@ -26,6 +26,7 @@ module.exports = class MiniAppConfigPlugin { function transformConfig(compilation, callback) { const config = transformAppConfig(outputPath, appConfig, target); + processIconFile(config, outputPath); if (subPackages) { // Transform subpackages config.subPackages = subAppConfigList @@ -46,7 +47,8 @@ module.exports = class MiniAppConfigPlugin { subAppConfig.routes.map((route) => { if (route && route.window) { ensureDirSync(outputPath); - safeWriteFile(join(outputPath, route.source + '.json'), adaptConfig(route.window, 'window', target), true); + const pageConfig = transformPageConfig(route.window, 'window', target); + safeWriteFile(join(outputPath, route.source + '.json'), pageConfig, true); } if (route && route.miniappPreloadRule) { config.preloadRule[route.source] = route.miniappPreloadRule; @@ -58,7 +60,8 @@ module.exports = class MiniAppConfigPlugin { appConfig.routes.map((route) => { if (route && route.window) { ensureDirSync(outputPath); - safeWriteFile(join(outputPath, route.source + '.json'), adaptConfig(route.window, 'window', target), true); + const pageConfig = transformPageConfig(route.window, 'window', target); + safeWriteFile(join(outputPath, route.source + '.json'), pageConfig, true); } }); } diff --git a/packages/rax-miniapp-config-webpack-plugin/src/processIconFile.js b/packages/rax-miniapp-config-webpack-plugin/src/processIconFile.js new file mode 100644 index 00000000..cebed55b --- /dev/null +++ b/packages/rax-miniapp-config-webpack-plugin/src/processIconFile.js @@ -0,0 +1,37 @@ +const { dirname, join } = require('path'); +const { copy, existsSync, ensureDirSync, unlinkSync } = require('fs-extra'); + +function isUrl(src) { + return /^(https?:)?\/\//.test(src); +} + +module.exports = function processIconFile(appConfig, outputPath) { + const iconFiles = []; + if (appConfig.tabBar) { + const items = appConfig.tabBar.items; + if (items) { + items.forEach(itemConfig => { + const { icon, activeIcon } = itemConfig; + if (icon) { + iconFiles.push(icon); + } + if (activeIcon) { + iconFiles.push(activeIcon); + } + }) + } + } + iconFiles.forEach(iconFile => { + if (!isUrl(iconFile)) { + const sourcePath = join(process.cwd(), 'src', iconFile); + if (existsSync(sourcePath)) { + const distPath = join(outputPath, iconFile); + ensureDirSync(dirname(distPath)); + if (existsSync(distPath)) { + unlinkSync(distPath); + } + copy(sourcePath, distPath); + } + } + }); +} From 287071ff8d521355ffa1c9bef77669d9ae179b8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=80=86=E8=91=B5?= Date: Mon, 1 Nov 2021 17:47:52 +0800 Subject: [PATCH 2/2] feat(miniapp): update transformAppConfig --- .../src/transformConfig/index.js | 18 ++++++++++++------ .../src/index.js | 4 ++-- .../src/processIconFile.js | 6 +++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/miniapp-builder-shared/src/transformConfig/index.js b/packages/miniapp-builder-shared/src/transformConfig/index.js index 5cff4a00..9fbb0df1 100644 --- a/packages/miniapp-builder-shared/src/transformConfig/index.js +++ b/packages/miniapp-builder-shared/src/transformConfig/index.js @@ -2,7 +2,7 @@ const { relative } = require('path'); const adaptConfig = require('./adaptConfig'); const { normalizeOutputFilePath } = require('../pathHelper'); -function transformAppConfig (originalAppConfig, target, subPackages) { +function transformAppConfig(originalAppConfig, target, { subPackages = false, projectType = 'spa' }) { const appConfig = {}; for (let configKey in originalAppConfig) { const config = originalAppConfig[configKey]; @@ -24,9 +24,15 @@ function transformAppConfig (originalAppConfig, target, subPackages) { activeIcon }; if (!itemConfig.pagePath) { - const targetRoute = originalAppConfig.routes.find(({ path }) => - path === itemPath || path === pageName - ); + const targetRoute = originalAppConfig.routes.find(({ path, name }) => { + if (projectType === 'spa') { // For miniapp + return path === itemPath || path === pageName; + } else if (projectType === 'mpa') { // For FRM + return name === pageName; + } else { + return false; + } + }); if (targetRoute) { newItemConfig.pagePath = targetRoute.source; } @@ -53,11 +59,11 @@ function transformAppConfig (originalAppConfig, target, subPackages) { return appConfig; } -function transformPageConfig (route = {}, target) { +function transformPageConfig(route = {}, target) { return adaptConfig(route.window, 'window', target); } module.exports = { transformAppConfig, transformPageConfig -} +}; diff --git a/packages/rax-miniapp-config-webpack-plugin/src/index.js b/packages/rax-miniapp-config-webpack-plugin/src/index.js index 0199b696..fe493d1b 100644 --- a/packages/rax-miniapp-config-webpack-plugin/src/index.js +++ b/packages/rax-miniapp-config-webpack-plugin/src/index.js @@ -25,13 +25,13 @@ module.exports = class MiniAppConfigPlugin { }); function transformConfig(compilation, callback) { - const config = transformAppConfig(outputPath, appConfig, target); + const config = transformAppConfig(appConfig, target); processIconFile(config, outputPath); if (subPackages) { // Transform subpackages config.subPackages = subAppConfigList .filter(subAppConfig => !subAppConfig.miniappMain) - .map(subAppConfig => transformAppConfig(outputPath, subAppConfig, target, subPackages)); + .map(subAppConfig => transformAppConfig(subAppConfig, target, { subPackages })); if (subPackages.shareMemory) { config.subPackageBuildType = 'shared'; diff --git a/packages/rax-miniapp-config-webpack-plugin/src/processIconFile.js b/packages/rax-miniapp-config-webpack-plugin/src/processIconFile.js index cebed55b..d52259b2 100644 --- a/packages/rax-miniapp-config-webpack-plugin/src/processIconFile.js +++ b/packages/rax-miniapp-config-webpack-plugin/src/processIconFile.js @@ -5,7 +5,7 @@ function isUrl(src) { return /^(https?:)?\/\//.test(src); } -module.exports = function processIconFile(appConfig, outputPath) { +module.exports = function processIconFile(appConfig, outputPath) { const iconFiles = []; if (appConfig.tabBar) { const items = appConfig.tabBar.items; @@ -18,7 +18,7 @@ module.exports = function processIconFile(appConfig, outputPath) { if (activeIcon) { iconFiles.push(activeIcon); } - }) + }); } } iconFiles.forEach(iconFile => { @@ -34,4 +34,4 @@ module.exports = function processIconFile(appConfig, outputPath) { } } }); -} +};