From 6f0b17c64500f5cdcb663ade1a029323502776d9 Mon Sep 17 00:00:00 2001 From: weareoutman Date: Mon, 17 Oct 2022 10:21:08 +0800 Subject: [PATCH] fix(): support debugging with standalone v2 --- CONTRIBUTING.md | 20 ++++++ packages/brick-container/serve/getEnv.js | 5 ++ packages/brick-container/serve/getProxies.js | 64 +++++++++++++------- packages/brick-container/serve/serve.js | 44 ++++++++------ packages/brick-container/serve/serveLocal.js | 8 ++- packages/brick-container/serve/utils.js | 26 ++++++-- 6 files changed, 120 insertions(+), 47 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 52e0aa8de1..97da329edd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -92,6 +92,26 @@ yarn serve --local-bricks=abc exports.standaloneAppsConfig = [ { // 将相关参数替换成调试目标上对应的数据。 + // 该应用使用 v2 配置,当前默认为 v2。 + // 在 v2 版本中,框架和构件包被拎了出来,这样不同的微应用之间,如果使用了相同版本的框架或构件包, + // 那么可以访问同一路径的资源,以提升缓存命中率。 + standaloneVersion: 2, + appDir: "message-subscribe/", + appRoot: "/sa-static/message-subscribe/versions/2.4.16/webroot/-/", + bootstrapHash: "4c732a2e3488e65d", + // v2 相对于 v1 多了下面两个配置项: + publicPrefix: "/sa-static/-/", + coreVersion: "2.76.7", + }, + { + // 该应用使用 v1 配置。 + standaloneVersion: 1, + appDir: "auth/", + appRoot: "/next/auth/", + bootstrapHash: "9467de8737bcfadf", + }, + { + standaloneVersion: 1, appDir: "agile-task/", appRoot: "/sa-static/agile-task/versions/1.0.6/webroot/", bootstrapHash: "8d14a6be80273699", diff --git a/packages/brick-container/serve/getEnv.js b/packages/brick-container/serve/getEnv.js index bc92422633..4817d8f235 100644 --- a/packages/brick-container/serve/getEnv.js +++ b/packages/brick-container/serve/getEnv.js @@ -233,6 +233,11 @@ module.exports = (runtimeFlags) => { (!_standalone && devConfig && devConfig.nextRepoDir) || rootDir; const standaloneAppsConfig = (devConfig && devConfig.standaloneAppsConfig) || []; + for (const standaloneConfig of standaloneAppsConfig) { + if (!standaloneConfig.standaloneVersion) { + standaloneConfig.standaloneVersion = 2; + } + } const appConfig = (devConfig && devConfig.appConfig) || {}; const { usePublicScope, standalone: confStandalone } = diff --git a/packages/brick-container/serve/getProxies.js b/packages/brick-container/serve/getProxies.js index 1962d4a678..6637fbca85 100644 --- a/packages/brick-container/serve/getProxies.js +++ b/packages/brick-container/serve/getProxies.js @@ -56,15 +56,22 @@ module.exports = (env) => { }; if (useRemote) { for (const standaloneConfig of allAppsConfig) { - const assetRoot = standaloneConfig ? `${standaloneConfig.appRoot}-/` : ""; + const assetRoot = standaloneConfig + ? standaloneConfig.standaloneVersion === 2 + ? standaloneConfig.publicPrefix + : `${standaloneConfig.appRoot}-/` + : ""; if (standaloneConfig) { // 在「独立应用」模式中,静态资源路径在 `your-app/-/` 目录下。 proxyPaths.push(assetRoot); proxyPaths.push(`${standaloneConfig.appRoot}conf.yaml`); + if (standaloneConfig.standaloneVersion === 2) { + proxyPaths.push(`${standaloneConfig.appRoot}`); + } + } else { + const assetPaths = ["bricks", "micro-apps", "templates"]; + proxyPaths.push(...assetPaths.map((p) => `${assetRoot}${p}`)); } - - const assetPaths = ["bricks", "micro-apps", "templates"]; - proxyPaths.push(...assetPaths.map((p) => `${assetRoot}${p}`)); } apiProxyOptions.onProxyRes = (proxyRes, req, res) => { @@ -72,27 +79,35 @@ module.exports = (env) => { return; } // 设定透传远端请求时,可以指定特定的 brick-packages, micro-apps, templates 使用本地文件。 - const isStandaloneBootstrap = - hasStandaloneApps && - new RegExp( - `^${escapeRegExp( - // 匹配 `/next/your-app/-/bootstrap.[hash].json` - `${standaloneAppsConfig - .map((standaloneConfig) => escapeRegExp(standaloneConfig.appRoot)) - .join("|")}-/bootstrap.` - )}[^.]+\\.json$` - ).test(req.path); - if ( + + let reqIsBootstrap = req.path === "/next/api/auth/bootstrap" || - req.path === "/next/api/auth/v2/bootstrap" || - isStandaloneBootstrap - ) { + req.path === "/next/api/auth/v2/bootstrap"; + let matchedStandaloneConfig; + if (!reqIsBootstrap && hasStandaloneApps) { + for (const standaloneConfig of standaloneAppsConfig) { + const regex = new RegExp( + `^${escapeRegExp( + `${standaloneConfig.appRoot}${ + standaloneConfig.standaloneVersion === 2 ? "" : "-/" + }` + )}bootstrap\\.[^.]+\\.json$` + ); + if (regex.test(req.path)) { + reqIsBootstrap = true; + matchedStandaloneConfig = standaloneConfig; + } + } + } + + if (reqIsBootstrap) { + console.log("Modified bootstrap:", req.path); modifyResponse(res, proxyRes, (raw) => { if (res.statusCode !== 200) { return raw; } const result = JSON.parse(raw); - const data = isStandaloneBootstrap ? result : result.data; + const data = matchedStandaloneConfig ? result : result.data; if (localMicroApps.length > 0 || mockedMicroApps.length > 0) { data.storyboards = mockedMicroApps .map((id) => @@ -134,7 +149,14 @@ module.exports = (env) => { ); if (combinedLocalBrickPackages.length > 0) { data.brickPackages = combinedLocalBrickPackages - .map((id) => getSingleBrickPackage(env, id, data.brickPackages)) + .map((id) => + getSingleBrickPackage( + env, + id, + data.brickPackages, + matchedStandaloneConfig + ) + ) .filter(Boolean) .concat( data.brickPackages.filter( @@ -379,7 +401,7 @@ module.exports = (env) => { secure: false, changeOrigin: true, pathRewrite: pathRewriteFactory(seg), - ...(seg === "api" || seg.endsWith("/-") + ...(seg === "api" || seg.endsWith("/-/") ? apiProxyOptions : seg === "" ? rootProxyOptions diff --git a/packages/brick-container/serve/serve.js b/packages/brick-container/serve/serve.js index c1b5051856..43b364b810 100644 --- a/packages/brick-container/serve/serve.js +++ b/packages/brick-container/serve/serve.js @@ -41,20 +41,17 @@ module.exports = function serve(runtimeFlags) { ), env.baseHref ) - .replace( - new RegExp( - escapeRegExp(""), - "g" - ), - standaloneConfig ? standaloneConfig.appRoot : "" - ) .replace( new RegExp( escapeRegExp(""), "g" ), `${env.publicCdn ?? ""}${ - standaloneConfig ? `${standaloneConfig.appRoot}-/core/` : "" + standaloneConfig + ? standaloneConfig.standaloneVersion === 2 + ? `${standaloneConfig.appRoot}core/${standaloneConfig.coreVersion}/` + : `${standaloneConfig.appRoot}-/core/` + : "" }` ) .replace( @@ -78,14 +75,23 @@ module.exports = function serve(runtimeFlags) { [ "