@simplysm/sd-cli 14.0.96 → 14.0.97
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/commands/init/generators/client.d.ts.map +1 -1
- package/dist/commands/init/generators/client.js +3 -0
- package/dist/commands/init/generators/client.js.map +1 -1
- package/dist/commands/init/normalize.d.ts.map +1 -1
- package/dist/commands/init/normalize.js +1 -0
- package/dist/commands/init/normalize.js.map +1 -1
- package/dist/commands/init/prompts.d.ts.map +1 -1
- package/dist/commands/init/prompts.js +8 -1
- package/dist/commands/init/prompts.js.map +1 -1
- package/dist/commands/init/types.d.ts +3 -0
- package/dist/commands/init/types.d.ts.map +1 -1
- package/dist/engines/EsbuildClientEngine.d.ts.map +1 -1
- package/dist/engines/EsbuildClientEngine.js +1 -0
- package/dist/engines/EsbuildClientEngine.js.map +1 -1
- package/dist/esbuild/esbuild-client-config.d.ts.map +1 -1
- package/dist/esbuild/esbuild-client-config.js +2 -11
- package/dist/esbuild/esbuild-client-config.js.map +1 -1
- package/dist/esbuild/esbuild-postcss-plugin.d.ts +4 -0
- package/dist/esbuild/esbuild-postcss-plugin.d.ts.map +1 -1
- package/dist/esbuild/esbuild-postcss-plugin.js +15 -0
- package/dist/esbuild/esbuild-postcss-plugin.js.map +1 -1
- package/dist/esbuild/esbuild-ssr-config.d.ts +27 -0
- package/dist/esbuild/esbuild-ssr-config.d.ts.map +1 -0
- package/dist/esbuild/esbuild-ssr-config.js +113 -0
- package/dist/esbuild/esbuild-ssr-config.js.map +1 -0
- package/dist/sd-config.types.d.ts +7 -0
- package/dist/sd-config.types.d.ts.map +1 -1
- package/dist/ssg/prerender.d.ts +19 -0
- package/dist/ssg/prerender.d.ts.map +1 -0
- package/dist/ssg/prerender.js +43 -0
- package/dist/ssg/prerender.js.map +1 -0
- package/dist/workers/client.worker.d.ts +2 -0
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +21 -0
- package/dist/workers/client.worker.js.map +1 -1
- package/package.json +6 -6
- package/src/commands/init/generators/client.ts +8 -0
- package/src/commands/init/normalize.ts +1 -0
- package/src/commands/init/prompts.ts +9 -1
- package/src/commands/init/templates/client/package.json.hbs +2 -1
- package/src/commands/init/templates/client/src/main.server.ts.hbs +24 -0
- package/src/commands/init/templates/client/src/main.ts.hbs +13 -0
- package/src/commands/init/templates/workspace-root/sd.config.ts.hbs +3 -0
- package/src/commands/init/types.ts +3 -0
- package/src/engines/EsbuildClientEngine.ts +1 -0
- package/src/esbuild/esbuild-client-config.ts +2 -12
- package/src/esbuild/esbuild-postcss-plugin.ts +18 -0
- package/src/esbuild/esbuild-ssr-config.ts +149 -0
- package/src/sd-config.types.ts +7 -0
- package/src/ssg/prerender.ts +65 -0
- package/src/workers/client.worker.ts +26 -0
- package/tests/engines/base-engine.spec.ts +1 -26
- package/tests/init/__snapshots__/render.spec.ts.snap +38 -20
- package/tests/init/render.spec.ts +113 -33
- package/tests/utils/hmr-client-script.acc.spec.ts +0 -21
- package/tests/angular/vite-angular-plugin.spec.ts +0 -102
- package/tests/engines/engine-adapter-isolation.spec.ts +0 -79
- package/tests/runtime/signal-handler.spec.ts +0 -21
- package/tests/utils/angular-build.spec.ts +0 -109
- package/tests/utils/esbuild-client-config.acc.spec.ts +0 -438
- package/tests/utils/esbuild-client-config.spec.ts +0 -659
- package/tests/utils/hmr-client-script.spec.ts +0 -44
- package/tests/utils/tsconfig-angular.spec.ts +0 -9
|
@@ -18,6 +18,8 @@ export interface ClientBuildInfo {
|
|
|
18
18
|
base?: string;
|
|
19
19
|
/** 브라우저 지원 설정 (메인 프로세스에서 전달, Worker 내 sd.config.ts 재로드 방지) */
|
|
20
20
|
browserSupport?: SdBrowserSupportConfig;
|
|
21
|
+
/** SSG(빌드 타임 프리렌더) 라우트 목록. 지정 시 프로덕션 빌드에서만 적용 */
|
|
22
|
+
prerender?: string[];
|
|
21
23
|
}
|
|
22
24
|
/** Client 빌드 결과 */
|
|
23
25
|
export interface ClientBuildResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAO9E,sBAAsB;AACtB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,2CAA2C;IAC3C,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC1B,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,mBAAmB;AACnB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oBAAoB;AACpB,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAqCD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiHtE;AAyHD;;GAEG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2G3E;AAED;;GAEG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCxC;AAcD,QAAA,MAAM,MAAM;;;eAED,OAAO,KAAK;oBACP,OAAO,UAAU;mBAClB,OAAO,SAAS;;;CAGI,CAAC;AAEpC,eAAe,MAAM,CAAC"}
|
|
@@ -11,6 +11,8 @@ import { createDevHttpServer } from "../dev-server/dev-http-server.js";
|
|
|
11
11
|
import { createHmrService } from "../dev-server/hmr-service.js";
|
|
12
12
|
import { createHmrPostTransform } from "../dev-server/hmr-client-script.js";
|
|
13
13
|
import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public.js";
|
|
14
|
+
import { buildSsrBundle } from "../esbuild/esbuild-ssr-config.js";
|
|
15
|
+
import { prerenderRoutes } from "../ssg/prerender.js";
|
|
14
16
|
import { IncrementalMtimeTracker } from "./incremental-mtime-tracker.js";
|
|
15
17
|
//#endregion
|
|
16
18
|
//#region Worker
|
|
@@ -80,6 +82,25 @@ async function build(info) {
|
|
|
80
82
|
postTransform: pwaHtmlTransform,
|
|
81
83
|
});
|
|
82
84
|
fs.writeFileSync(path.join(outdir, "index.html"), indexResult.content);
|
|
85
|
+
// 5.5. SSG 프리렌더 (opt-in — prerender 설정이 있을 때만)
|
|
86
|
+
if (info.prerender != null && info.prerender.length > 0 && indexResult.errors.length === 0) {
|
|
87
|
+
// SPA 셸 별도 보존 (비프리렌더 라우트 딥링크 폴백용 — 서버 정적 핸들러가 사용)
|
|
88
|
+
fs.writeFileSync(path.join(outdir, "index.csr.html"), indexResult.content);
|
|
89
|
+
const { bundlePath } = await buildSsrBundle({
|
|
90
|
+
pkgDir: info.pkgDir,
|
|
91
|
+
cwd: info.cwd,
|
|
92
|
+
env: info.env,
|
|
93
|
+
postcssPlugins: info.browserSupport?.postCss?.plugins,
|
|
94
|
+
});
|
|
95
|
+
// 라우트별 HTML 생성 ("/"는 index.html을 프리렌더 결과로 대체)
|
|
96
|
+
await prerenderRoutes({
|
|
97
|
+
bundlePath,
|
|
98
|
+
routes: info.prerender,
|
|
99
|
+
documentHtml: indexResult.content,
|
|
100
|
+
basePath,
|
|
101
|
+
outdir,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
83
104
|
// 6. PWA 적용
|
|
84
105
|
await applyPwa({
|
|
85
106
|
pkgDir: info.pkgDir,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.worker.js","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.worker.js","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "14.0.
|
|
3
|
+
"version": "14.0.97",
|
|
4
4
|
"description": "Simplysm package - CLI tool",
|
|
5
5
|
"author": "simplysm",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"sideEffects": false,
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@angular/build": "^21.2.14",
|
|
23
|
-
"@angular/compiler-cli": "^21.2.
|
|
23
|
+
"@angular/compiler-cli": "^21.2.17",
|
|
24
24
|
"@fastify/http-proxy": "^11.5.0",
|
|
25
25
|
"@inquirer/prompts": "^8.5.2",
|
|
26
26
|
"acorn": "^8.16.0",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"mime": "^4.1.0",
|
|
38
38
|
"postcss": "^8.5.15",
|
|
39
39
|
"sass": "^1.100.0",
|
|
40
|
-
"semver": "^7.8.
|
|
40
|
+
"semver": "^7.8.4",
|
|
41
41
|
"sharp": "^0.34.5",
|
|
42
42
|
"smol-toml": "^1.6.1",
|
|
43
43
|
"ssh2": "^1.17.0",
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"ws": "^8.21.0",
|
|
46
46
|
"yaml": "^2.9.0",
|
|
47
47
|
"yargs": "^18.0.0",
|
|
48
|
-
"@simplysm/core-
|
|
49
|
-
"@simplysm/core-
|
|
50
|
-
"@simplysm/storage": "14.0.
|
|
48
|
+
"@simplysm/core-node": "14.0.97",
|
|
49
|
+
"@simplysm/core-common": "14.0.97",
|
|
50
|
+
"@simplysm/storage": "14.0.97"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/semver": "^7.7.1",
|
|
@@ -39,6 +39,14 @@ export async function generateClient(
|
|
|
39
39
|
await renderToFile(path.join(TPL, "src/routes.ts.hbs"), path.join(out, "src/routes.ts"), data);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
if (client.useSsg) {
|
|
43
|
+
await renderToFile(
|
|
44
|
+
path.join(TPL, "src/main.server.ts.hbs"),
|
|
45
|
+
path.join(out, "src/main.server.ts"),
|
|
46
|
+
data,
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
42
50
|
if (data.hasAuth && client.hasRouter) {
|
|
43
51
|
await renderToFile(
|
|
44
52
|
path.join(TPL, "src/app/login/login.view.ts.hbs"),
|
|
@@ -57,6 +57,7 @@ export function normalize(input: InitInput): NormalizedInput {
|
|
|
57
57
|
isMobile,
|
|
58
58
|
appStructureName: `${str.toCamelCase(baseName)}AppStructureItems`,
|
|
59
59
|
needsNgIcons: (hasRouter && hasAuth) || hasDb,
|
|
60
|
+
useSsg: hasRouter && !isMobile && (c.useSsg ?? false),
|
|
60
61
|
};
|
|
61
62
|
});
|
|
62
63
|
|
|
@@ -112,7 +112,15 @@ export async function promptInit(workspaceNameDefault: string): Promise<InitInpu
|
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
let useSsg = false;
|
|
116
|
+
if (clientType === "web" && hasRouter) {
|
|
117
|
+
useSsg = await confirm({
|
|
118
|
+
message: `${clientName}: SSG (SEO 용 빌드 타임 프리렌더) 를 쓸까요?`,
|
|
119
|
+
default: false,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
clients.push({ name: clientName, type: clientType, hasRouter, useSsg });
|
|
116
124
|
}
|
|
117
125
|
|
|
118
126
|
let mobileAppId: string | undefined;
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
"@{{workspaceName}}/client-common": "workspace:*"{{/if}}{{#if hasServer}},
|
|
16
16
|
"@simplysm/service-client": "^14.0.0",
|
|
17
17
|
"@simplysm/service-common": "^14.0.0"{{/if}}{{#if client.hasRouter}},
|
|
18
|
-
"@angular/router": "^21.2.0"{{/if}}{{#if client.
|
|
18
|
+
"@angular/router": "^21.2.0"{{/if}}{{#if client.useSsg}},
|
|
19
|
+
"@angular/platform-server": "^21.2.0"{{/if}}{{#if client.needsNgIcons}},
|
|
19
20
|
"@ng-icons/core": "^33.2.3",
|
|
20
21
|
"@ng-icons/tabler-icons": "^33.2.3"{{/if}}{{#if hasDb}},
|
|
21
22
|
"@{{workspaceName}}/common": "workspace:*",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { bootstrapApplication, type BootstrapContext } from "@angular/platform-browser";
|
|
2
|
+
import { provideServerRendering } from "@angular/platform-server";
|
|
3
|
+
import { provideHttpClient, withFetch } from "@angular/common/http";
|
|
4
|
+
import { provideRouter } from "@angular/router";
|
|
5
|
+
import { provideSdAngular } from "@simplysm/angular";
|
|
6
|
+
import { AppRoot } from "./app.root";
|
|
7
|
+
import { routes } from "./routes";
|
|
8
|
+
|
|
9
|
+
// 프리렌더(빌드 시점) 전용 부트스트랩 — 서버 연결·로그 배선 등 브라우저 전용 초기화는 제외
|
|
10
|
+
const bootstrap = (context: BootstrapContext) =>
|
|
11
|
+
bootstrapApplication(
|
|
12
|
+
AppRoot,
|
|
13
|
+
{
|
|
14
|
+
providers: [
|
|
15
|
+
provideHttpClient(withFetch()),
|
|
16
|
+
provideRouter(routes),
|
|
17
|
+
provideSdAngular({ clientName: "{{client.name}}" }),
|
|
18
|
+
provideServerRendering(),
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
context,
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
export default bootstrap;
|
|
@@ -3,11 +3,19 @@ import { enableProdMode, inject, provideAppInitializer } from "@angular/core";
|
|
|
3
3
|
{{else}}
|
|
4
4
|
import { enableProdMode } from "@angular/core";
|
|
5
5
|
{{/if}}
|
|
6
|
+
{{#if client.useSsg}}
|
|
7
|
+
import { bootstrapApplication, provideClientHydration } from "@angular/platform-browser";
|
|
8
|
+
{{else}}
|
|
6
9
|
import { bootstrapApplication } from "@angular/platform-browser";
|
|
10
|
+
{{/if}}
|
|
7
11
|
import { provideHttpClient, withFetch } from "@angular/common/http";
|
|
8
12
|
{{#if client.hasRouter}}
|
|
13
|
+
{{#if client.useSsg}}
|
|
14
|
+
import { provideRouter } from "@angular/router";
|
|
15
|
+
{{else}}
|
|
9
16
|
import { provideRouter, withHashLocation } from "@angular/router";
|
|
10
17
|
{{/if}}
|
|
18
|
+
{{/if}}
|
|
11
19
|
import {
|
|
12
20
|
provideSdAngular,
|
|
13
21
|
{{#if hasAuth}}
|
|
@@ -68,7 +76,12 @@ bootstrapApplication(AppRoot, {
|
|
|
68
76
|
providers: [
|
|
69
77
|
provideHttpClient(withFetch()),
|
|
70
78
|
{{#if client.hasRouter}}
|
|
79
|
+
{{#if client.useSsg}}
|
|
80
|
+
provideRouter(routes),
|
|
81
|
+
provideClientHydration(),
|
|
82
|
+
{{else}}
|
|
71
83
|
provideRouter(routes, withHashLocation()),
|
|
84
|
+
{{/if}}
|
|
72
85
|
{{/if}}
|
|
73
86
|
provideSdAngular({ clientName: CLIENT_NAME }),
|
|
74
87
|
{{#if hasDb}}
|
|
@@ -5,6 +5,8 @@ export interface ClientInputSpec {
|
|
|
5
5
|
name: string;
|
|
6
6
|
type: ClientType;
|
|
7
7
|
hasRouter: boolean;
|
|
8
|
+
/** SSG(빌드 타임 프리렌더) 사용 여부 (web + 라우팅 클라이언트만) */
|
|
9
|
+
useSsg?: boolean;
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
export interface InitInput {
|
|
@@ -29,6 +31,7 @@ export interface ClientSpec {
|
|
|
29
31
|
isMobile: boolean;
|
|
30
32
|
appStructureName: string;
|
|
31
33
|
needsNgIcons: boolean;
|
|
34
|
+
useSsg: boolean;
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
export interface NormalizedInput {
|
|
@@ -72,6 +72,7 @@ export class EsbuildClientEngine implements BuildEngine {
|
|
|
72
72
|
outDir: this._outDir,
|
|
73
73
|
base: this._base,
|
|
74
74
|
browserSupport: this._pkg.config.browserSupport,
|
|
75
|
+
prerender: this._pkg.config.prerender,
|
|
75
76
|
});
|
|
76
77
|
|
|
77
78
|
logger.debug(`[${this._pkg.name}] EsbuildClientEngine.run 완료 (success: ${result.success})`);
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import fs from "fs";
|
|
3
|
-
import { createRequire } from "module";
|
|
4
3
|
import esbuild from "esbuild";
|
|
5
4
|
import browserslistToEsbuild from "browserslist-to-esbuild";
|
|
6
|
-
import type { AcceptedPlugin } from "postcss";
|
|
7
5
|
import { AngularSourceFileCache } from "../angular/angular-compiler.js";
|
|
8
6
|
import { createClientTransformStylesheet } from "../angular/client-transform-stylesheet.js";
|
|
9
7
|
import {
|
|
@@ -12,7 +10,7 @@ import {
|
|
|
12
10
|
} from "./esbuild-angular-compiler-plugin.js";
|
|
13
11
|
import { MemoryLoadResultCache } from "./load-result-cache.js";
|
|
14
12
|
import { createScssPlugin } from "./esbuild-scss-plugin";
|
|
15
|
-
import { createPostcssPlugin } from "./esbuild-postcss-plugin";
|
|
13
|
+
import { createPostcssPlugin, loadPostcssPlugins } from "./esbuild-postcss-plugin";
|
|
16
14
|
|
|
17
15
|
export interface CreateClientEsbuildOptions {
|
|
18
16
|
/** 패키지 디렉토리 경로 */
|
|
@@ -82,15 +80,7 @@ export async function createClientEsbuildContext(
|
|
|
82
80
|
const stylesheetErrors: string[] = [];
|
|
83
81
|
|
|
84
82
|
// PostCSS 플러그인 로딩 (튜플 → 인스턴스) — transformStylesheet와 createPostcssPlugin 양쪽에 사용
|
|
85
|
-
|
|
86
|
-
if (options.postcssPlugins != null && options.postcssPlugins.length > 0) {
|
|
87
|
-
const req = createRequire(path.join(options.pkgDir, "package.json"));
|
|
88
|
-
loadedPostcssPlugins = options.postcssPlugins.map(([name, pluginOpts]) => {
|
|
89
|
-
const pluginFn = req(name);
|
|
90
|
-
const fn = pluginFn.default ?? pluginFn;
|
|
91
|
-
return pluginOpts != null ? fn(pluginOpts) : fn;
|
|
92
|
-
});
|
|
93
|
-
}
|
|
83
|
+
const loadedPostcssPlugins = loadPostcssPlugins(options.pkgDir, options.postcssPlugins);
|
|
94
84
|
|
|
95
85
|
// transformStylesheet 콜백 생성
|
|
96
86
|
const cachePath = path.join(options.pkgDir, ".angular", "cache");
|
|
@@ -2,6 +2,8 @@ import type esbuild from "esbuild";
|
|
|
2
2
|
import type { AcceptedPlugin } from "postcss";
|
|
3
3
|
import postcss from "postcss";
|
|
4
4
|
import fs from "fs";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import { createRequire } from "module";
|
|
5
7
|
import * as acorn from "acorn";
|
|
6
8
|
import * as walk from "acorn-walk";
|
|
7
9
|
|
|
@@ -10,6 +12,22 @@ export interface CreatePostcssPluginOptions {
|
|
|
10
12
|
plugins: AcceptedPlugin[];
|
|
11
13
|
}
|
|
12
14
|
|
|
15
|
+
/**
|
|
16
|
+
* PostCSS 플러그인 설정 튜플([name, options])을 패키지 기준으로 로딩해 인스턴스 배열로 변환한다.
|
|
17
|
+
*/
|
|
18
|
+
export function loadPostcssPlugins(
|
|
19
|
+
pkgDir: string,
|
|
20
|
+
postcssPlugins: [string, (object | string)?][] | undefined,
|
|
21
|
+
): AcceptedPlugin[] | undefined {
|
|
22
|
+
if (postcssPlugins == null || postcssPlugins.length === 0) return undefined;
|
|
23
|
+
const req = createRequire(path.join(pkgDir, "package.json"));
|
|
24
|
+
return postcssPlugins.map(([pluginName, pluginOpts]) => {
|
|
25
|
+
const pluginFn = req(pluginName);
|
|
26
|
+
const fn = pluginFn.default ?? pluginFn;
|
|
27
|
+
return pluginOpts != null ? fn(pluginOpts) : fn;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
13
31
|
export function createPostcssPlugin(options: CreatePostcssPluginOptions): esbuild.Plugin {
|
|
14
32
|
return {
|
|
15
33
|
name: "sd-postcss",
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import esbuild from "esbuild";
|
|
3
|
+
import { AngularSourceFileCache } from "../angular/angular-compiler.js";
|
|
4
|
+
import { createClientTransformStylesheet } from "../angular/client-transform-stylesheet.js";
|
|
5
|
+
import {
|
|
6
|
+
createAngularCompilerPlugin,
|
|
7
|
+
type AngularCompilerPluginOptions,
|
|
8
|
+
} from "./esbuild-angular-compiler-plugin.js";
|
|
9
|
+
import { MemoryLoadResultCache } from "./load-result-cache.js";
|
|
10
|
+
import { createScssPlugin } from "./esbuild-scss-plugin";
|
|
11
|
+
import { createPostcssPlugin, loadPostcssPlugins } from "./esbuild-postcss-plugin";
|
|
12
|
+
|
|
13
|
+
export interface BuildSsrBundleOptions {
|
|
14
|
+
/** 패키지 디렉토리 경로 */
|
|
15
|
+
pkgDir: string;
|
|
16
|
+
/** 모노레포 루트 (workspaceRoot) */
|
|
17
|
+
cwd: string;
|
|
18
|
+
/** tsconfig 경로 (기본: pkgDir/tsconfig.json) */
|
|
19
|
+
tsconfig?: string;
|
|
20
|
+
/** 빌드 시 치환할 환경변수 */
|
|
21
|
+
env?: Record<string, string>;
|
|
22
|
+
/** PostCSS 플러그인 ([name, options] 튜플 배열) */
|
|
23
|
+
postcssPlugins?: [string, (object | string)?][];
|
|
24
|
+
/** 번들 출력 디렉토리 (기본: pkgDir/.angular/ssg) */
|
|
25
|
+
outdir?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface SsrBundleResult {
|
|
29
|
+
/** 생성된 server 번들 파일 경로 */
|
|
30
|
+
bundlePath: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
class SsrSourceFileCache extends AngularSourceFileCache {
|
|
34
|
+
readonly typeScriptFileCache = new Map<string, string | Uint8Array>();
|
|
35
|
+
readonly loadResultCache = new MemoryLoadResultCache();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* SSG 프리렌더용 server 번들을 빌드한다.
|
|
40
|
+
*
|
|
41
|
+
* - 진입점: 가상 래퍼 — src/main.server.ts(부트스트랩 default export)를
|
|
42
|
+
* @angular/platform-server의 renderApplication으로 감싸 render(url, document)를 export
|
|
43
|
+
* - platform: node, format: esm (server 패키지 빌드 패턴과 동일)
|
|
44
|
+
*/
|
|
45
|
+
export async function buildSsrBundle(options: BuildSsrBundleOptions): Promise<SsrBundleResult> {
|
|
46
|
+
const outdir = options.outdir ?? path.join(options.pkgDir, ".angular", "ssg");
|
|
47
|
+
const bundlePath = path.join(outdir, "sd-ssg-entry.mjs");
|
|
48
|
+
|
|
49
|
+
// SourceFileCache 생성 (일회성 빌드 — 증분 캐시 불필요)
|
|
50
|
+
const sourceFileCache = new SsrSourceFileCache();
|
|
51
|
+
|
|
52
|
+
// SCSS 스타일시트 변환용 공유 상태
|
|
53
|
+
const stylesheetDependencies = new Map<string, Set<string>>();
|
|
54
|
+
const stylesheetErrors: string[] = [];
|
|
55
|
+
|
|
56
|
+
// PostCSS 플러그인 로딩 (튜플 → 인스턴스)
|
|
57
|
+
const loadedPostcssPlugins = loadPostcssPlugins(options.pkgDir, options.postcssPlugins);
|
|
58
|
+
|
|
59
|
+
const cachePath = path.join(options.pkgDir, ".angular", "cache");
|
|
60
|
+
const transformStylesheet = createClientTransformStylesheet({
|
|
61
|
+
loadPaths: [
|
|
62
|
+
path.join(options.pkgDir, "node_modules"),
|
|
63
|
+
path.join(options.cwd, "node_modules"),
|
|
64
|
+
],
|
|
65
|
+
postcssPlugins: loadedPostcssPlugins,
|
|
66
|
+
scssErrors: stylesheetErrors,
|
|
67
|
+
scssDependencies: stylesheetDependencies,
|
|
68
|
+
cacheDir: path.join(cachePath, "scss"),
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const pluginOptions: AngularCompilerPluginOptions = {
|
|
72
|
+
tsconfig: options.tsconfig ?? path.join(options.pkgDir, "tsconfig.json"),
|
|
73
|
+
sourcemap: false,
|
|
74
|
+
advancedOptimizations: true,
|
|
75
|
+
thirdPartySourcemaps: false,
|
|
76
|
+
incremental: false,
|
|
77
|
+
sourceFileCache,
|
|
78
|
+
typeScriptFileCache: sourceFileCache.typeScriptFileCache,
|
|
79
|
+
loadResultCache: sourceFileCache.loadResultCache,
|
|
80
|
+
includeTestMetadata: false,
|
|
81
|
+
persistentCachePath: cachePath,
|
|
82
|
+
transformStylesheet,
|
|
83
|
+
stylesheetDependencies,
|
|
84
|
+
stylesheetErrors,
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const angularPlugin = createAngularCompilerPlugin(pluginOptions);
|
|
88
|
+
|
|
89
|
+
const scssPlugin = createScssPlugin({
|
|
90
|
+
loadPaths: [
|
|
91
|
+
path.join(options.pkgDir, "node_modules"),
|
|
92
|
+
path.join(options.cwd, "node_modules"),
|
|
93
|
+
],
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// define 주입 (client 빌드 패턴 + 서버 렌더 플래그)
|
|
97
|
+
const define: Record<string, string> = {
|
|
98
|
+
ngDevMode: "false",
|
|
99
|
+
ngJitMode: "false",
|
|
100
|
+
ngHmrMode: "false",
|
|
101
|
+
ngServerMode: "true",
|
|
102
|
+
};
|
|
103
|
+
if (options.env != null) {
|
|
104
|
+
define["import.meta.env"] = JSON.stringify(options.env);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// CJS 패키지 require() 지원 banner (server 패키지 빌드 패턴과 동일)
|
|
108
|
+
const bannerJs =
|
|
109
|
+
"import { createRequire } from 'module'; const require = createRequire(import.meta.url);";
|
|
110
|
+
|
|
111
|
+
await esbuild.build({
|
|
112
|
+
stdin: {
|
|
113
|
+
contents: [
|
|
114
|
+
'import bootstrap from "./src/main.server";',
|
|
115
|
+
'import { renderApplication } from "@angular/platform-server";',
|
|
116
|
+
"export function render(url: string, document: string): Promise<string> {",
|
|
117
|
+
" return renderApplication(bootstrap, { document, url });",
|
|
118
|
+
"}",
|
|
119
|
+
].join("\n"),
|
|
120
|
+
resolveDir: options.pkgDir,
|
|
121
|
+
sourcefile: "sd-ssg-entry.ts",
|
|
122
|
+
loader: "ts",
|
|
123
|
+
},
|
|
124
|
+
target: "node20",
|
|
125
|
+
bundle: true,
|
|
126
|
+
splitting: false,
|
|
127
|
+
format: "esm",
|
|
128
|
+
platform: "node",
|
|
129
|
+
outdir,
|
|
130
|
+
// stdin 진입점의 출력 이름은 "stdin"으로 고정되므로 entryNames로 결정론적 지정
|
|
131
|
+
entryNames: "sd-ssg-entry",
|
|
132
|
+
outExtension: { ".js": ".mjs" },
|
|
133
|
+
write: true,
|
|
134
|
+
sourcemap: false,
|
|
135
|
+
logLevel: "silent",
|
|
136
|
+
tsconfig: options.tsconfig ?? path.join(options.pkgDir, "tsconfig.json"),
|
|
137
|
+
define,
|
|
138
|
+
banner: { js: bannerJs },
|
|
139
|
+
plugins: [
|
|
140
|
+
angularPlugin,
|
|
141
|
+
scssPlugin,
|
|
142
|
+
...(loadedPostcssPlugins != null
|
|
143
|
+
? [createPostcssPlugin({ plugins: loadedPostcssPlugins })]
|
|
144
|
+
: []),
|
|
145
|
+
],
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
return { bundlePath };
|
|
149
|
+
}
|
package/src/sd-config.types.ts
CHANGED
|
@@ -240,6 +240,13 @@ export interface SdClientPackageConfig {
|
|
|
240
240
|
browserSupport?: SdBrowserSupportConfig;
|
|
241
241
|
/** PWA 설정. false이면 비활성화. 미지정 시 기본값으로 활성화 */
|
|
242
242
|
pwa?: false | SdPwaConfig;
|
|
243
|
+
/**
|
|
244
|
+
* SSG(빌드 타임 프리렌더) 라우트 목록 (예: ["/", "/about"])
|
|
245
|
+
* - 지정 시 프로덕션 빌드에서 src/main.server.ts 진입점으로 라우트별 HTML을 생성
|
|
246
|
+
* - SPA 셸은 index.csr.html로 별도 출력 (비프리렌더 라우트 딥링크 폴백용)
|
|
247
|
+
* - dev/watch 모드에는 적용되지 않음 (기존 SPA dev 서버 그대로)
|
|
248
|
+
*/
|
|
249
|
+
prerender?: string[];
|
|
243
250
|
}
|
|
244
251
|
|
|
245
252
|
/**
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { createLogger } from "@simplysm/core-common";
|
|
5
|
+
|
|
6
|
+
const logger = createLogger("sd:cli:ssg:prerender");
|
|
7
|
+
|
|
8
|
+
export interface PrerenderOptions {
|
|
9
|
+
/** buildSsrBundle로 생성된 server 번들 경로 */
|
|
10
|
+
bundlePath: string;
|
|
11
|
+
/** 프리렌더할 라우트 경로 목록 (예: ["/", "/about"]) */
|
|
12
|
+
routes: string[];
|
|
13
|
+
/** 렌더 기준 문서 (SPA 셸 index.html 내용) */
|
|
14
|
+
documentHtml: string;
|
|
15
|
+
/** base 경로 (예: "/my-client/") — 렌더 URL 구성에 사용 */
|
|
16
|
+
basePath: string;
|
|
17
|
+
/** HTML 출력 디렉토리 (dist/) */
|
|
18
|
+
outdir: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface SsrBundleModule {
|
|
22
|
+
render(url: string, document: string): Promise<string>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* server 번들로 라우트별 HTML을 생성해 outdir에 기록한다.
|
|
27
|
+
*
|
|
28
|
+
* 라우트 1건이라도 실패하면 throw (빌드 전체 실패 — 부분 산출 금지).
|
|
29
|
+
*/
|
|
30
|
+
export async function prerenderRoutes(options: PrerenderOptions): Promise<void> {
|
|
31
|
+
const bundleModule = (await import(
|
|
32
|
+
pathToFileURL(options.bundlePath).href
|
|
33
|
+
)) as SsrBundleModule;
|
|
34
|
+
|
|
35
|
+
// 1. 전체 라우트 렌더 (전부 성공해야 기록 단계로 진행)
|
|
36
|
+
const rendered: { route: string; html: string }[] = [];
|
|
37
|
+
for (const route of options.routes) {
|
|
38
|
+
const normalizedRoute = normalizeRoute(route);
|
|
39
|
+
const url = path.posix.join(options.basePath, normalizedRoute);
|
|
40
|
+
logger.debug(`프리렌더: ${url}`);
|
|
41
|
+
try {
|
|
42
|
+
const html = await bundleModule.render(url, options.documentHtml);
|
|
43
|
+
rendered.push({ route: normalizedRoute, html });
|
|
44
|
+
} catch (err) {
|
|
45
|
+
throw new Error(`프리렌더 실패 (라우트: ${route}): ${err instanceof Error ? err.message : String(err)}`, {
|
|
46
|
+
cause: err,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 2. 라우트별 <경로>/index.html 기록 ("/"는 index.html)
|
|
52
|
+
for (const { route, html } of rendered) {
|
|
53
|
+
const htmlPath = path.join(options.outdir, route, "index.html");
|
|
54
|
+
fs.mkdirSync(path.dirname(htmlPath), { recursive: true });
|
|
55
|
+
fs.writeFileSync(htmlPath, html);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** 라우트 경로 정규화: 선행 "/" 제거 ("/" → "") */
|
|
60
|
+
function normalizeRoute(route: string): string {
|
|
61
|
+
if (!route.startsWith("/")) {
|
|
62
|
+
throw new Error(`프리렌더 라우트는 "/"로 시작해야 합니다: "${route}"`);
|
|
63
|
+
}
|
|
64
|
+
return route.replace(/^\/+/, "").replace(/\/+$/, "");
|
|
65
|
+
}
|
|
@@ -14,6 +14,8 @@ import { createDevHttpServer, type DevHttpServer } from "../dev-server/dev-http-
|
|
|
14
14
|
import { createHmrService, type HmrService } from "../dev-server/hmr-service";
|
|
15
15
|
import { createHmrPostTransform } from "../dev-server/hmr-client-script";
|
|
16
16
|
import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public";
|
|
17
|
+
import { buildSsrBundle } from "../esbuild/esbuild-ssr-config";
|
|
18
|
+
import { prerenderRoutes } from "../ssg/prerender";
|
|
17
19
|
import type { SdBrowserSupportConfig, SdPwaConfig } from "../sd-config.types";
|
|
18
20
|
import type esbuild from "esbuild";
|
|
19
21
|
import type { PartialMessage } from "esbuild";
|
|
@@ -40,6 +42,8 @@ export interface ClientBuildInfo {
|
|
|
40
42
|
base?: string;
|
|
41
43
|
/** 브라우저 지원 설정 (메인 프로세스에서 전달, Worker 내 sd.config.ts 재로드 방지) */
|
|
42
44
|
browserSupport?: SdBrowserSupportConfig;
|
|
45
|
+
/** SSG(빌드 타임 프리렌더) 라우트 목록. 지정 시 프로덕션 빌드에서만 적용 */
|
|
46
|
+
prerender?: string[];
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
/** Client 빌드 결과 */
|
|
@@ -150,6 +154,28 @@ async function build(info: ClientBuildInfo): Promise<ClientBuildResult> {
|
|
|
150
154
|
|
|
151
155
|
fs.writeFileSync(path.join(outdir, "index.html"), indexResult.content);
|
|
152
156
|
|
|
157
|
+
// 5.5. SSG 프리렌더 (opt-in — prerender 설정이 있을 때만)
|
|
158
|
+
if (info.prerender != null && info.prerender.length > 0 && indexResult.errors.length === 0) {
|
|
159
|
+
// SPA 셸 별도 보존 (비프리렌더 라우트 딥링크 폴백용 — 서버 정적 핸들러가 사용)
|
|
160
|
+
fs.writeFileSync(path.join(outdir, "index.csr.html"), indexResult.content);
|
|
161
|
+
|
|
162
|
+
const { bundlePath } = await buildSsrBundle({
|
|
163
|
+
pkgDir: info.pkgDir,
|
|
164
|
+
cwd: info.cwd,
|
|
165
|
+
env: info.env,
|
|
166
|
+
postcssPlugins: info.browserSupport?.postCss?.plugins,
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
// 라우트별 HTML 생성 ("/"는 index.html을 프리렌더 결과로 대체)
|
|
170
|
+
await prerenderRoutes({
|
|
171
|
+
bundlePath,
|
|
172
|
+
routes: info.prerender,
|
|
173
|
+
documentHtml: indexResult.content,
|
|
174
|
+
basePath,
|
|
175
|
+
outdir,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
|
|
153
179
|
// 6. PWA 적용
|
|
154
180
|
await applyPwa({
|
|
155
181
|
pkgDir: info.pkgDir,
|