@simplysm/sd-cli 13.0.65 → 13.0.67
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/orchestrators/DevOrchestrator.d.ts +0 -1
- package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/DevOrchestrator.js +4 -12
- package/dist/orchestrators/DevOrchestrator.js.map +1 -1
- package/dist/utils/package-utils.d.ts +5 -9
- package/dist/utils/package-utils.d.ts.map +1 -1
- package/dist/utils/package-utils.js +43 -13
- package/dist/utils/package-utils.js.map +1 -1
- package/dist/utils/tailwind-config-deps.d.ts +1 -1
- package/dist/utils/tailwind-config-deps.d.ts.map +1 -1
- package/dist/utils/tailwind-config-deps.js +5 -3
- package/dist/utils/tailwind-config-deps.js.map +1 -1
- package/dist/utils/vite-config.d.ts +3 -3
- package/dist/utils/vite-config.d.ts.map +1 -1
- package/dist/utils/vite-config.js +43 -52
- package/dist/utils/vite-config.js.map +1 -1
- package/dist/workers/client.worker.d.ts +2 -2
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +3 -1
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/server.worker.d.ts +2 -2
- package/dist/workers/server.worker.d.ts.map +1 -1
- package/dist/workers/server.worker.js +14 -12
- package/dist/workers/server.worker.js.map +1 -1
- package/package.json +4 -4
- package/src/orchestrators/DevOrchestrator.ts +4 -16
- package/src/utils/package-utils.ts +62 -22
- package/src/utils/tailwind-config-deps.ts +6 -3
- package/src/utils/vite-config.ts +64 -92
- package/src/workers/client.worker.ts +7 -3
- package/src/workers/server.worker.ts +20 -21
- package/templates/add-client/__CLIENT__/package.json.hbs +1 -1
- package/templates/add-server/__SERVER__/package.json.hbs +2 -2
- package/templates/init/package.json.hbs +3 -3
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
writeChangedOutputFiles
|
|
17
17
|
} from "../utils/esbuild-config.js";
|
|
18
18
|
import { registerCleanupHandlers } from "../utils/worker-utils.js";
|
|
19
|
+
import { collectDeps } from "../utils/package-utils.js";
|
|
19
20
|
import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public.js";
|
|
20
21
|
const logger = consola.withTag("sd:cli:server:worker");
|
|
21
22
|
let esbuildContext;
|
|
@@ -274,20 +275,21 @@ async function startWatch(info) {
|
|
|
274
275
|
esbuildContext = await createAndBuildContext(info, true, resolveFirstBuild);
|
|
275
276
|
await firstBuildPromise;
|
|
276
277
|
publicWatcher = await watchPublicFiles(info.pkgDir, true);
|
|
278
|
+
const { workspaceDeps, replaceDeps } = collectDeps(info.pkgDir, info.cwd, info.replaceDeps);
|
|
277
279
|
const watchPaths = [];
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
280
|
+
const watchDirs = [
|
|
281
|
+
info.pkgDir,
|
|
282
|
+
...workspaceDeps.map((d) => path.join(info.cwd, "packages", d))
|
|
283
|
+
];
|
|
284
|
+
for (const dir of watchDirs) {
|
|
285
|
+
watchPaths.push(path.join(dir, "src", "**", "*"));
|
|
286
|
+
watchPaths.push(path.join(dir, "*.{ts,js,css}"));
|
|
285
287
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
288
|
+
for (const pkg of replaceDeps) {
|
|
289
|
+
watchPaths.push(path.join(info.cwd, "node_modules", ...pkg.split("/"), "dist", "**", "*.js"));
|
|
290
|
+
watchPaths.push(
|
|
291
|
+
path.join(info.pkgDir, "node_modules", ...pkg.split("/"), "dist", "**", "*.js")
|
|
292
|
+
);
|
|
291
293
|
}
|
|
292
294
|
srcWatcher = await FsWatcher.watch(watchPaths);
|
|
293
295
|
srcWatcher.onChange({ delay: 300 }, async (changes) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/workers/server.worker.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/sd-cli",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.67",
|
|
4
4
|
"description": "심플리즘 패키지 - CLI 도구",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"vite-plugin-solid": "^2.11.10",
|
|
42
42
|
"vite-tsconfig-paths": "^6.1.1",
|
|
43
43
|
"yargs": "^18.0.0",
|
|
44
|
-
"@simplysm/core-
|
|
45
|
-
"@simplysm/core-
|
|
46
|
-
"@simplysm/storage": "13.0.
|
|
44
|
+
"@simplysm/core-node": "13.0.67",
|
|
45
|
+
"@simplysm/core-common": "13.0.67",
|
|
46
|
+
"@simplysm/storage": "13.0.67"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/semver": "^7.7.1",
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
1
|
import path from "path";
|
|
3
2
|
import { Worker, type WorkerProxy } from "@simplysm/core-node";
|
|
4
3
|
import type { SdConfig, SdClientPackageConfig, SdServerPackageConfig } from "../sd-config.types";
|
|
@@ -10,11 +9,7 @@ import type * as ClientWorkerModule from "../workers/client.worker";
|
|
|
10
9
|
import type * as ServerWorkerModule from "../workers/server.worker";
|
|
11
10
|
import type * as ServerRuntimeWorkerModule from "../workers/server-runtime.worker";
|
|
12
11
|
import { Capacitor } from "../capacitor/capacitor";
|
|
13
|
-
import {
|
|
14
|
-
filterPackagesByTargets,
|
|
15
|
-
getWatchScopes,
|
|
16
|
-
type PackageResult,
|
|
17
|
-
} from "../utils/package-utils";
|
|
12
|
+
import { filterPackagesByTargets, type PackageResult } from "../utils/package-utils";
|
|
18
13
|
import { printErrors, printServers } from "../utils/output-utils";
|
|
19
14
|
import { RebuildManager } from "../utils/rebuild-manager";
|
|
20
15
|
import {
|
|
@@ -70,8 +65,6 @@ export class DevOrchestrator {
|
|
|
70
65
|
// Config
|
|
71
66
|
private _sdConfig: SdConfig | undefined;
|
|
72
67
|
private _baseEnv: { VER: string; DEV: string } | undefined;
|
|
73
|
-
private _watchScopes: string[] = [];
|
|
74
|
-
|
|
75
68
|
// Package classification
|
|
76
69
|
private readonly _serverPackages: Array<{ name: string; config: SdServerPackageConfig }> = [];
|
|
77
70
|
private readonly _clientPackages: Array<{ name: string; config: SdClientPackageConfig }> = [];
|
|
@@ -153,11 +146,6 @@ export class DevOrchestrator {
|
|
|
153
146
|
const version = await getVersion(this._cwd);
|
|
154
147
|
this._baseEnv = { VER: version, DEV: "true" };
|
|
155
148
|
|
|
156
|
-
// watchScopes 생성 (루트 package.json에서 scope 추출)
|
|
157
|
-
const rootPkgJsonPath = path.join(this._cwd, "package.json");
|
|
158
|
-
const rootPkgName = JSON.parse(fs.readFileSync(rootPkgJsonPath, "utf-8")).name as string;
|
|
159
|
-
this._watchScopes = getWatchScopes(rootPkgName, this._sdConfig.replaceDeps);
|
|
160
|
-
|
|
161
149
|
// targets 필터링
|
|
162
150
|
const allPackages = filterPackagesByTargets(this._sdConfig.packages, targets);
|
|
163
151
|
|
|
@@ -586,7 +574,7 @@ export class DevOrchestrator {
|
|
|
586
574
|
config: clientConfig,
|
|
587
575
|
cwd: this._cwd,
|
|
588
576
|
pkgDir,
|
|
589
|
-
|
|
577
|
+
replaceDeps: this._sdConfig!.replaceDeps,
|
|
590
578
|
})
|
|
591
579
|
.catch((err: unknown) => {
|
|
592
580
|
completeTask({
|
|
@@ -615,7 +603,7 @@ export class DevOrchestrator {
|
|
|
615
603
|
config: viteConfig,
|
|
616
604
|
cwd: this._cwd,
|
|
617
605
|
pkgDir,
|
|
618
|
-
|
|
606
|
+
replaceDeps: this._sdConfig!.replaceDeps,
|
|
619
607
|
})
|
|
620
608
|
.catch((err: unknown) => {
|
|
621
609
|
completeTask({
|
|
@@ -637,7 +625,7 @@ export class DevOrchestrator {
|
|
|
637
625
|
name,
|
|
638
626
|
cwd: this._cwd,
|
|
639
627
|
pkgDir,
|
|
640
|
-
|
|
628
|
+
replaceDeps: this._sdConfig!.replaceDeps,
|
|
641
629
|
env: { ...this._baseEnv, ...config.env },
|
|
642
630
|
configs: config.configs,
|
|
643
631
|
externals: config.externals,
|
|
@@ -15,32 +15,72 @@ export function findPackageRoot(startDir: string): string {
|
|
|
15
15
|
return dir;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
): string
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
18
|
+
export interface DepsResult {
|
|
19
|
+
workspaceDeps: string[];
|
|
20
|
+
replaceDeps: string[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function collectDeps(
|
|
24
|
+
pkgDir: string,
|
|
25
|
+
cwd: string,
|
|
26
|
+
replaceDepsConfig?: Record<string, string>,
|
|
27
|
+
): DepsResult {
|
|
28
|
+
const rootPkgJsonPath = path.join(cwd, "package.json");
|
|
29
|
+
const rootPkgJson = JSON.parse(fs.readFileSync(rootPkgJsonPath, "utf-8")) as { name: string };
|
|
30
|
+
const scopeMatch = rootPkgJson.name.match(/^(@[^/]+)\//);
|
|
31
|
+
const workspaceScope = scopeMatch != null ? scopeMatch[1] : undefined;
|
|
32
|
+
|
|
33
|
+
const replaceDepsPatterns: Array<{ regex: RegExp }> = [];
|
|
34
|
+
if (replaceDepsConfig != null) {
|
|
35
|
+
for (const pattern of Object.keys(replaceDepsConfig)) {
|
|
36
|
+
const regexStr = pattern.replace(/[.+]/g, (ch) => `\\${ch}`).replace(/\*/g, "[^/]+");
|
|
37
|
+
replaceDepsPatterns.push({ regex: new RegExp(`^${regexStr}$`) });
|
|
38
|
+
}
|
|
34
39
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
|
|
41
|
+
const workspaceDeps: string[] = [];
|
|
42
|
+
const replaceDeps: string[] = [];
|
|
43
|
+
const visited = new Set<string>();
|
|
44
|
+
|
|
45
|
+
function traverse(dir: string): void {
|
|
46
|
+
const pkgJsonPath = path.join(dir, "package.json");
|
|
47
|
+
if (!fs.existsSync(pkgJsonPath)) return;
|
|
48
|
+
|
|
49
|
+
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8")) as {
|
|
50
|
+
dependencies?: Record<string, string>;
|
|
51
|
+
};
|
|
52
|
+
const deps = Object.keys(pkgJson.dependencies ?? {});
|
|
53
|
+
|
|
54
|
+
for (const dep of deps) {
|
|
55
|
+
if (visited.has(dep)) continue;
|
|
56
|
+
visited.add(dep);
|
|
57
|
+
|
|
58
|
+
// workspace package check
|
|
59
|
+
if (workspaceScope != null && dep.startsWith(workspaceScope + "/")) {
|
|
60
|
+
const dirName = dep.slice(workspaceScope.length + 1);
|
|
61
|
+
const depDir = path.join(cwd, "packages", dirName);
|
|
62
|
+
if (fs.existsSync(path.join(depDir, "package.json"))) {
|
|
63
|
+
workspaceDeps.push(dirName);
|
|
64
|
+
traverse(depDir);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// replaceDeps pattern check
|
|
70
|
+
const matched = replaceDepsPatterns.find((p) => p.regex.test(dep));
|
|
71
|
+
if (matched != null) {
|
|
72
|
+
replaceDeps.push(dep);
|
|
73
|
+
const depNodeModulesDir = path.join(cwd, "node_modules", ...dep.split("/"));
|
|
74
|
+
if (fs.existsSync(path.join(depNodeModulesDir, "package.json"))) {
|
|
75
|
+
traverse(depNodeModulesDir);
|
|
76
|
+
}
|
|
77
|
+
continue;
|
|
40
78
|
}
|
|
41
79
|
}
|
|
42
80
|
}
|
|
43
|
-
|
|
81
|
+
|
|
82
|
+
traverse(pkgDir);
|
|
83
|
+
return { workspaceDeps, replaceDeps };
|
|
44
84
|
}
|
|
45
85
|
|
|
46
86
|
/**
|
|
@@ -50,10 +50,13 @@ function resolvePackageFile(specifier: string, fromDir: string): string | null {
|
|
|
50
50
|
* Tailwind 내장 `getModuleDependencies`는 상대 경로 import만 추적하지만,
|
|
51
51
|
* 이 함수는 지정된 scope의 패키지 경로도 `node_modules` symlink를 풀어 실제 파일을 추적한다.
|
|
52
52
|
*/
|
|
53
|
-
export function getTailwindConfigDeps(configPath: string,
|
|
54
|
-
const scopePrefixes = scopes.map((s) => (s.endsWith("/") ? s : s + "/"));
|
|
53
|
+
export function getTailwindConfigDeps(configPath: string, replaceDeps: string[]): string[] {
|
|
55
54
|
const seen = new Set<string>();
|
|
56
55
|
|
|
56
|
+
function isReplaceDepImport(specifier: string): boolean {
|
|
57
|
+
return replaceDeps.some((dep) => specifier === dep || specifier.startsWith(dep + "/"));
|
|
58
|
+
}
|
|
59
|
+
|
|
57
60
|
function walk(absoluteFile: string): void {
|
|
58
61
|
if (seen.has(absoluteFile)) return;
|
|
59
62
|
if (!fs.existsSync(absoluteFile)) return;
|
|
@@ -80,7 +83,7 @@ export function getTailwindConfigDeps(configPath: string, scopes: string[]): str
|
|
|
80
83
|
|
|
81
84
|
if (specifier.startsWith(".")) {
|
|
82
85
|
resolved = resolveWithExtension(path.resolve(base, specifier), extensions);
|
|
83
|
-
} else if (
|
|
86
|
+
} else if (isReplaceDepImport(specifier)) {
|
|
84
87
|
resolved = resolvePackageFile(specifier, base);
|
|
85
88
|
}
|
|
86
89
|
|
package/src/utils/vite-config.ts
CHANGED
|
@@ -17,14 +17,14 @@ import { FsWatcher, pathNorm } from "@simplysm/core-node";
|
|
|
17
17
|
* preset 등으로 참조하는 scope 패키지의 config 변경을 감지하지 못한다.
|
|
18
18
|
* 이 플러그인이 해당 파일들을 watch하고, 변경 시 Tailwind 캐시를 무효화한다.
|
|
19
19
|
*/
|
|
20
|
-
function sdTailwindConfigDepsPlugin(pkgDir: string,
|
|
20
|
+
function sdTailwindConfigDepsPlugin(pkgDir: string, replaceDeps: string[]): Plugin {
|
|
21
21
|
return {
|
|
22
22
|
name: "sd-tailwind-config-deps",
|
|
23
23
|
configureServer(server) {
|
|
24
24
|
const configPath = path.join(pkgDir, "tailwind.config.ts");
|
|
25
25
|
if (!fs.existsSync(configPath)) return;
|
|
26
26
|
|
|
27
|
-
const allDeps = getTailwindConfigDeps(configPath,
|
|
27
|
+
const allDeps = getTailwindConfigDeps(configPath, replaceDeps);
|
|
28
28
|
const configAbsolute = path.resolve(configPath);
|
|
29
29
|
const externalDeps = allDeps.filter((d) => d !== configAbsolute);
|
|
30
30
|
if (externalDeps.length === 0) return;
|
|
@@ -133,66 +133,51 @@ function sdPublicDevPlugin(pkgDir: string): Plugin {
|
|
|
133
133
|
* 변경 시 Vite의 내부 HMR 파이프라인을 트리거한다.
|
|
134
134
|
* optimizeDeps에서 제외하여 pre-bundled 캐시로 인한 변경 무시를 방지한다.
|
|
135
135
|
*/
|
|
136
|
-
function sdScopeWatchPlugin(
|
|
136
|
+
function sdScopeWatchPlugin(
|
|
137
|
+
pkgDir: string,
|
|
138
|
+
replaceDeps: string[],
|
|
139
|
+
onScopeRebuild?: () => void,
|
|
140
|
+
): Plugin {
|
|
137
141
|
return {
|
|
138
142
|
name: "sd-scope-watch",
|
|
139
143
|
config() {
|
|
140
144
|
const excluded: string[] = [];
|
|
141
145
|
const nestedDepsToInclude: string[] = [];
|
|
142
146
|
|
|
143
|
-
for (const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
if (isSubpathOnlyPackage(depPkgJsonResolved)) {
|
|
175
|
-
continue;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// workspace 패키지는 realpath가 소스 디렉토리로 해석되어 .pnpm 구조가 아님
|
|
179
|
-
// symlink 경로의 node_modules에서 fallback 시도
|
|
180
|
-
const depPkgJsonFallback = path.join(
|
|
181
|
-
scopeDir,
|
|
182
|
-
name,
|
|
183
|
-
"node_modules",
|
|
184
|
-
dep,
|
|
185
|
-
"package.json",
|
|
186
|
-
);
|
|
187
|
-
if (isSubpathOnlyPackage(depPkgJsonFallback)) {
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
nestedDepsToInclude.push(`${excludedPkg} > ${dep}`);
|
|
192
|
-
}
|
|
193
|
-
} catch {
|
|
194
|
-
// package.json 읽기 실패 시 스킵
|
|
147
|
+
for (const pkg of replaceDeps) {
|
|
148
|
+
excluded.push(pkg);
|
|
149
|
+
|
|
150
|
+
const pkgParts = pkg.split("/");
|
|
151
|
+
const depPkgJsonPath = path.join(pkgDir, "node_modules", ...pkgParts, "package.json");
|
|
152
|
+
try {
|
|
153
|
+
const depPkgJson = JSON.parse(fs.readFileSync(depPkgJsonPath, "utf-8")) as {
|
|
154
|
+
dependencies?: Record<string, string>;
|
|
155
|
+
};
|
|
156
|
+
for (const dep of Object.keys(depPkgJson.dependencies ?? {})) {
|
|
157
|
+
if (replaceDeps.includes(dep)) continue;
|
|
158
|
+
if (dep === "solid-js" || dep.startsWith("@solidjs/") || dep.startsWith("solid-"))
|
|
159
|
+
continue;
|
|
160
|
+
if (dep === "tailwindcss") continue;
|
|
161
|
+
|
|
162
|
+
const realPkgPath = fs.realpathSync(path.join(pkgDir, "node_modules", ...pkgParts));
|
|
163
|
+
const pnpmNodeModules = path.resolve(realPkgPath, "../..");
|
|
164
|
+
const depPkgJsonResolved = path.join(pnpmNodeModules, dep, "package.json");
|
|
165
|
+
if (isSubpathOnlyPackage(depPkgJsonResolved)) continue;
|
|
166
|
+
|
|
167
|
+
const depPkgJsonFallback = path.join(
|
|
168
|
+
pkgDir,
|
|
169
|
+
"node_modules",
|
|
170
|
+
...pkgParts,
|
|
171
|
+
"node_modules",
|
|
172
|
+
dep,
|
|
173
|
+
"package.json",
|
|
174
|
+
);
|
|
175
|
+
if (isSubpathOnlyPackage(depPkgJsonFallback)) continue;
|
|
176
|
+
|
|
177
|
+
nestedDepsToInclude.push(`${pkg} > ${dep}`);
|
|
195
178
|
}
|
|
179
|
+
} catch {
|
|
180
|
+
// package.json 읽기 실패 시 스킵
|
|
196
181
|
}
|
|
197
182
|
}
|
|
198
183
|
|
|
@@ -207,56 +192,43 @@ function sdScopeWatchPlugin(pkgDir: string, scopes: string[], onScopeRebuild?: (
|
|
|
207
192
|
async configureServer(server) {
|
|
208
193
|
const watchPaths: string[] = [];
|
|
209
194
|
|
|
210
|
-
for (const
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
for (const pkgName of fs.readdirSync(scopeDir)) {
|
|
215
|
-
const pkgRoot = path.join(scopeDir, pkgName);
|
|
195
|
+
for (const pkg of replaceDeps) {
|
|
196
|
+
const pkgParts = pkg.split("/");
|
|
197
|
+
const pkgRoot = path.join(pkgDir, "node_modules", ...pkgParts);
|
|
198
|
+
if (!fs.existsSync(pkgRoot)) continue;
|
|
216
199
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
200
|
+
const distDir = path.join(pkgRoot, "dist");
|
|
201
|
+
if (fs.existsSync(distDir)) {
|
|
202
|
+
watchPaths.push(distDir);
|
|
203
|
+
}
|
|
222
204
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
)
|
|
230
|
-
watchPaths.push(path.join(pkgRoot, file));
|
|
231
|
-
}
|
|
205
|
+
for (const file of fs.readdirSync(pkgRoot)) {
|
|
206
|
+
if (
|
|
207
|
+
file.endsWith(".css") ||
|
|
208
|
+
file === "tailwind.config.ts" ||
|
|
209
|
+
file === "tailwind.config.js"
|
|
210
|
+
) {
|
|
211
|
+
watchPaths.push(path.join(pkgRoot, file));
|
|
232
212
|
}
|
|
233
213
|
}
|
|
234
214
|
}
|
|
235
215
|
|
|
236
216
|
if (watchPaths.length === 0) return;
|
|
237
217
|
|
|
238
|
-
// Vite의 기본 watcher는 **/node_modules/**를 ignore하고
|
|
239
|
-
// server.watcher.add()로는 이 패턴을 override할 수 없다.
|
|
240
|
-
// 별도의 FsWatcher로 scope 패키지의 dist 디렉토리를 감시한다.
|
|
241
218
|
const scopeWatcher = await FsWatcher.watch(watchPaths);
|
|
242
219
|
scopeWatcher.onChange({ delay: 300 }, (changeInfos) => {
|
|
243
220
|
for (const { path: changedPath } of changeInfos) {
|
|
244
|
-
// pnpm symlink → real path 변환 (Vite module graph은 real path 사용)
|
|
245
221
|
let realPath: string;
|
|
246
222
|
try {
|
|
247
223
|
realPath = fs.realpathSync(changedPath);
|
|
248
224
|
} catch {
|
|
249
|
-
continue;
|
|
225
|
+
continue;
|
|
250
226
|
}
|
|
251
|
-
|
|
252
|
-
// Vite의 내부 HMR 파이프라인 트리거
|
|
253
227
|
server.watcher.emit("change", realPath);
|
|
254
228
|
}
|
|
255
|
-
|
|
256
229
|
onScopeRebuild?.();
|
|
257
230
|
});
|
|
258
231
|
|
|
259
|
-
// 서버 종료 시 watcher 정리
|
|
260
232
|
server.httpServer?.on("close", () => void scopeWatcher.close());
|
|
261
233
|
},
|
|
262
234
|
};
|
|
@@ -274,9 +246,9 @@ export interface ViteConfigOptions {
|
|
|
274
246
|
mode: "build" | "dev";
|
|
275
247
|
/** dev 모드일 때 서버 포트 (0이면 자동 할당) */
|
|
276
248
|
serverPort?: number;
|
|
277
|
-
/**
|
|
278
|
-
|
|
279
|
-
/**
|
|
249
|
+
/** replaceDeps 패키지명 배열 (resolve 완료된 상태) */
|
|
250
|
+
replaceDeps?: string[];
|
|
251
|
+
/** replaceDeps 패키지 dist 변경 감지 시 콜백 */
|
|
280
252
|
onScopeRebuild?: () => void;
|
|
281
253
|
}
|
|
282
254
|
|
|
@@ -288,7 +260,7 @@ export interface ViteConfigOptions {
|
|
|
288
260
|
* - dev 모드: dev server (define으로 env 치환, server 설정)
|
|
289
261
|
*/
|
|
290
262
|
export function createViteConfig(options: ViteConfigOptions): ViteUserConfig {
|
|
291
|
-
const { pkgDir, name, tsconfigPath, compilerOptions, env, mode, serverPort,
|
|
263
|
+
const { pkgDir, name, tsconfigPath, compilerOptions, env, mode, serverPort, replaceDeps } =
|
|
292
264
|
options;
|
|
293
265
|
|
|
294
266
|
// Read package.json to extract app name for PWA manifest
|
|
@@ -322,11 +294,11 @@ export function createViteConfig(options: ViteConfigOptions): ViteUserConfig {
|
|
|
322
294
|
globPatterns: ["**/*.{js,css,html,ico,png,svg,woff2}"],
|
|
323
295
|
},
|
|
324
296
|
}),
|
|
325
|
-
...(
|
|
326
|
-
? [sdTailwindConfigDepsPlugin(pkgDir,
|
|
297
|
+
...(replaceDeps != null && replaceDeps.length > 0
|
|
298
|
+
? [sdTailwindConfigDepsPlugin(pkgDir, replaceDeps)]
|
|
327
299
|
: []),
|
|
328
|
-
...(
|
|
329
|
-
? [sdScopeWatchPlugin(pkgDir,
|
|
300
|
+
...(replaceDeps != null && replaceDeps.length > 0
|
|
301
|
+
? [sdScopeWatchPlugin(pkgDir, replaceDeps, options.onScopeRebuild)]
|
|
330
302
|
: []),
|
|
331
303
|
...(mode === "dev" ? [sdPublicDevPlugin(pkgDir)] : []),
|
|
332
304
|
],
|
|
@@ -6,6 +6,7 @@ import { consola } from "consola";
|
|
|
6
6
|
import type { SdClientPackageConfig } from "../sd-config.types";
|
|
7
7
|
import { parseRootTsconfig, getCompilerOptionsForPackage } from "../utils/tsconfig";
|
|
8
8
|
import { createViteConfig } from "../utils/vite-config";
|
|
9
|
+
import { collectDeps } from "../utils/package-utils";
|
|
9
10
|
import { registerCleanupHandlers } from "../utils/worker-utils";
|
|
10
11
|
|
|
11
12
|
//#region Types
|
|
@@ -36,8 +37,8 @@ export interface ClientWatchInfo {
|
|
|
36
37
|
config: SdClientPackageConfig;
|
|
37
38
|
cwd: string;
|
|
38
39
|
pkgDir: string;
|
|
39
|
-
/**
|
|
40
|
-
|
|
40
|
+
/** sd.config.ts의 replaceDeps 설정 */
|
|
41
|
+
replaceDeps?: Record<string, string>;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
/**
|
|
@@ -176,6 +177,9 @@ async function startWatch(info: ClientWatchInfo): Promise<void> {
|
|
|
176
177
|
// server가 숫자면 해당 포트로 고정 (standalone 클라이언트)
|
|
177
178
|
const serverPort = typeof info.config.server === "number" ? info.config.server : 0;
|
|
178
179
|
|
|
180
|
+
// 의존성 기반 replaceDeps 수집
|
|
181
|
+
const { replaceDeps } = collectDeps(info.pkgDir, info.cwd, info.replaceDeps);
|
|
182
|
+
|
|
179
183
|
// Vite 설정 생성
|
|
180
184
|
const viteConfig = createViteConfig({
|
|
181
185
|
pkgDir: info.pkgDir,
|
|
@@ -185,7 +189,7 @@ async function startWatch(info: ClientWatchInfo): Promise<void> {
|
|
|
185
189
|
env: info.config.env,
|
|
186
190
|
mode: "dev",
|
|
187
191
|
serverPort,
|
|
188
|
-
|
|
192
|
+
replaceDeps,
|
|
189
193
|
onScopeRebuild: () => sender.send("scopeRebuild", {}),
|
|
190
194
|
});
|
|
191
195
|
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
writeChangedOutputFiles,
|
|
17
17
|
} from "../utils/esbuild-config";
|
|
18
18
|
import { registerCleanupHandlers } from "../utils/worker-utils";
|
|
19
|
+
import { collectDeps } from "../utils/package-utils";
|
|
19
20
|
import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public";
|
|
20
21
|
|
|
21
22
|
//#region Types
|
|
@@ -65,8 +66,8 @@ export interface ServerWatchInfo {
|
|
|
65
66
|
configs?: Record<string, unknown>;
|
|
66
67
|
/** sd.config.ts에서 수동 지정한 external 모듈 */
|
|
67
68
|
externals?: string[];
|
|
68
|
-
/**
|
|
69
|
-
|
|
69
|
+
/** sd.config.ts의 replaceDeps 설정 */
|
|
70
|
+
replaceDeps?: Record<string, string>;
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
/**
|
|
@@ -475,29 +476,27 @@ async function startWatch(info: ServerWatchInfo): Promise<void> {
|
|
|
475
476
|
// Watch public/ and public-dev/ (dev mode includes public-dev)
|
|
476
477
|
publicWatcher = await watchPublicFiles(info.pkgDir, true);
|
|
477
478
|
|
|
478
|
-
//
|
|
479
|
-
const
|
|
480
|
-
|
|
481
|
-
// 1) workspace 패키지 소스
|
|
482
|
-
watchPaths.push(path.join(info.cwd, "packages", "*", "src", "**", "*"));
|
|
479
|
+
// 의존성 기반 감시 경로 수집
|
|
480
|
+
const { workspaceDeps, replaceDeps } = collectDeps(info.pkgDir, info.cwd, info.replaceDeps);
|
|
483
481
|
|
|
484
|
-
|
|
485
|
-
watchPaths.push(path.join(info.cwd, "packages", "*", "*.{ts,js,css}"));
|
|
482
|
+
const watchPaths: string[] = [];
|
|
486
483
|
|
|
487
|
-
//
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
484
|
+
// 1) 서버 패키지 자신 + workspace 의존 패키지 소스
|
|
485
|
+
const watchDirs = [
|
|
486
|
+
info.pkgDir,
|
|
487
|
+
...workspaceDeps.map((d) => path.join(info.cwd, "packages", d)),
|
|
488
|
+
];
|
|
489
|
+
for (const dir of watchDirs) {
|
|
490
|
+
watchPaths.push(path.join(dir, "src", "**", "*"));
|
|
491
|
+
watchPaths.push(path.join(dir, "*.{ts,js,css}"));
|
|
493
492
|
}
|
|
494
493
|
|
|
495
|
-
//
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
494
|
+
// 2) replaceDeps 의존 패키지 dist (루트 + 패키지 node_modules)
|
|
495
|
+
for (const pkg of replaceDeps) {
|
|
496
|
+
watchPaths.push(path.join(info.cwd, "node_modules", ...pkg.split("/"), "dist", "**", "*.js"));
|
|
497
|
+
watchPaths.push(
|
|
498
|
+
path.join(info.pkgDir, "node_modules", ...pkg.split("/"), "dist", "**", "*.js"),
|
|
499
|
+
);
|
|
501
500
|
}
|
|
502
501
|
|
|
503
502
|
// FsWatcher 시작
|