@simplysm/sd-cli 13.0.13 → 13.0.15

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/README.md CHANGED
@@ -131,6 +131,10 @@ sd-cli dev solid-demo my-server
131
131
  - Client packages with Electron config launch Electron in dev mode after build completes
132
132
  - Terminates on SIGINT/SIGTERM signals
133
133
 
134
+ **Scope Package HMR:**
135
+
136
+ When using `replaceDeps` to develop scope packages locally, the Vite dev server automatically watches scope package dist files and triggers HMR when they change. This allows changes to `@simplysm/*` packages to be reflected in the dev app without manual reload.
137
+
134
138
  ### build
135
139
 
136
140
  Runs production build. Performs lint, dist folder cleanup, and build sequentially.
@@ -159,6 +163,33 @@ sd-cli build solid core-common
159
163
  | `server` | esbuild | X | X | Server app |
160
164
  | `scripts` | Excluded | Excluded | Excluded | - |
161
165
 
166
+ **Public Files & Assets:**
167
+
168
+ Both client and server packages support serving static files from a `public/` directory:
169
+
170
+ - **Client packages** (`dev` mode): Vite serves `public/` at the configured base path (`/{name}/`)
171
+ - **Server packages** (`dev` mode): Copies `public/` to `dist/`, watches for changes, and automatically rebuilds
172
+ - **Server packages** (`build` mode): Copies `public/` to `dist/` (production deployment)
173
+ - **Client packages** (`dev` mode only): Optional `public-dev/` directory files are served with priority over `public/` files, allowing dev-specific overrides without affecting production builds
174
+
175
+ Directory structure:
176
+ ```
177
+ packages/my-server/
178
+ ├── public/ # Static files (both dev and build)
179
+ │ ├── index.html
180
+ │ ├── style.css
181
+ │ └── assets/
182
+ └── public-dev/ # Dev-only overrides (dev mode only, ignored in build)
183
+ └── index.html # Overrides public/index.html in dev
184
+ ```
185
+
186
+ **How it works:**
187
+
188
+ - In `dev` mode, both `public/` and `public-dev/` are copied to `dist/`, with `public-dev/` changes taking priority
189
+ - If a `public-dev/` file is deleted, the corresponding `public/` file is served as fallback
190
+ - In `build` mode, only `public/` is copied to `dist/` (no `public-dev/`)
191
+ - The copy operation preserves directory structure
192
+
162
193
  **Runtime Configuration File (.config.json):**
163
194
 
164
195
  If a `server` or `client` package defines a `configs` field in `sd.config.ts`, the build automatically generates `dist/.config.json` containing that configuration. This is useful for storing environment-specific settings (database config, API endpoints, etc.) that are read at runtime via `ctx.getConfig()` in `service-server`.
@@ -312,6 +343,26 @@ sd-cli device -p my-app -u http://192.168.0.10:3000
312
343
  | `--options`, `-o` | Additional options to pass to sd.config.ts (multi-use) | `[]` |
313
344
  | `--debug` | Output debug logs | `false` |
314
345
 
346
+ ## Public File Utilities
347
+
348
+ This package provides utilities for managing static files in server packages:
349
+
350
+ ```typescript
351
+ import { copyPublicFiles, watchPublicFiles } from "@simplysm/sd-cli";
352
+
353
+ // Copy public/ to dist/ (production build)
354
+ await copyPublicFiles("/path/to/package", false);
355
+
356
+ // Copy public/ and public-dev/ to dist/ and watch for changes (dev mode)
357
+ const watcher = await watchPublicFiles("/path/to/package", true);
358
+ // Later: await watcher.close();
359
+ ```
360
+
361
+ | Function | Parameters | Description |
362
+ |----------|-----------|-------------|
363
+ | `copyPublicFiles(pkgDir, includeDev)` | `pkgDir`: string, `includeDev`: boolean | Copies `public/` (and optionally `public-dev/`) from source to `dist/`. In dev mode with `includeDev=true`, `public-dev/` files take priority over `public/` files. |
364
+ | `watchPublicFiles(pkgDir, includeDev)` | `pkgDir`: string, `includeDev`: boolean | Returns a watcher that watches both `public/` and (if `includeDev=true`) `public-dev/` for changes and re-copies files to `dist/`. Call `.close()` on the returned watcher to stop watching. |
365
+
315
366
  ## Exported Types and Utilities
316
367
 
317
368
  This package exports configuration types for `sd.config.ts` and Vite utilities. All are importable from `@simplysm/sd-cli`.
@@ -367,7 +418,9 @@ import { createViteConfig } from "@simplysm/sd-cli";
367
418
 
368
419
  ## Vite Utilities
369
420
 
370
- The package exports `createViteConfig()` utility function for creating Vite configuration in client packages:
421
+ ### createViteConfig
422
+
423
+ Creates pre-configured Vite configuration for Simplysm client packages:
371
424
 
372
425
  ```typescript
373
426
  import { createViteConfig, type ViteConfigOptions } from "@simplysm/sd-cli";
@@ -377,11 +430,12 @@ export default createViteConfig({
377
430
  });
378
431
  ```
379
432
 
380
- The `createViteConfig()` function creates a pre-configured Vite config for Simplysm client packages, including:
433
+ The `createViteConfig()` function provides:
381
434
  - Development server configuration
382
435
  - Production build optimization
383
436
  - Asset handling
384
437
  - Environment variable substitution support
438
+ - Scope package watch/HMR (automatically watches scope package dist files and triggers HMR on changes via `replaceDeps`)
385
439
 
386
440
  ## Configuration (sd.config.ts)
387
441
 
@@ -0,0 +1,19 @@
1
+ import { FsWatcher } from "@simplysm/core-node";
2
+ /**
3
+ * public/ 및 public-dev/ 디렉토리의 파일을 dist/로 복사한다.
4
+ * public-dev/가 public/보다 우선한다 (overlay).
5
+ *
6
+ * @param pkgDir 패키지 루트 디렉토리
7
+ * @param includeDev public-dev/ 포함 여부 (dev 모드에서만 true)
8
+ */
9
+ export declare function copyPublicFiles(pkgDir: string, includeDev: boolean): Promise<void>;
10
+ /**
11
+ * public/ 및 public-dev/ 디렉토리를 감시하여 dist/로 실시간 복사한다.
12
+ * 초기 복사 후 변경/추가/삭제를 자동 반영한다.
13
+ *
14
+ * @param pkgDir 패키지 루트 디렉토리
15
+ * @param includeDev public-dev/ 포함 여부 (dev 모드에서만 true)
16
+ * @returns FsWatcher 인스턴스 (shutdown 시 close() 호출 필요) 또는 watch할 대상이 없으면 undefined
17
+ */
18
+ export declare function watchPublicFiles(pkgDir: string, includeDev: boolean): Promise<FsWatcher | undefined>;
19
+ //# sourceMappingURL=copy-public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-public.d.ts","sourceRoot":"","sources":["../../src/utils/copy-public.ts"],"names":[],"mappings":"AACA,OAAO,EAAiC,SAAS,EAAY,MAAM,qBAAqB,CAAC;AAEzF;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BxF;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAqE1G"}
@@ -0,0 +1,89 @@
1
+ import path from "path";
2
+ import { fsCopy, fsMkdir, fsRm, fsGlob, FsWatcher, fsExists } from "@simplysm/core-node";
3
+ async function copyPublicFiles(pkgDir, includeDev) {
4
+ const distDir = path.join(pkgDir, "dist");
5
+ await fsMkdir(distDir);
6
+ const publicDir = path.join(pkgDir, "public");
7
+ if (await fsExists(publicDir)) {
8
+ const files = await fsGlob("**/*", { cwd: publicDir, absolute: true });
9
+ for (const file of files) {
10
+ const relativePath = path.relative(publicDir, file);
11
+ const distPath = path.join(distDir, relativePath);
12
+ await fsMkdir(path.dirname(distPath));
13
+ await fsCopy(file, distPath);
14
+ }
15
+ }
16
+ if (includeDev) {
17
+ const publicDevDir = path.join(pkgDir, "public-dev");
18
+ if (await fsExists(publicDevDir)) {
19
+ const files = await fsGlob("**/*", { cwd: publicDevDir, absolute: true });
20
+ for (const file of files) {
21
+ const relativePath = path.relative(publicDevDir, file);
22
+ const distPath = path.join(distDir, relativePath);
23
+ await fsMkdir(path.dirname(distPath));
24
+ await fsCopy(file, distPath);
25
+ }
26
+ }
27
+ }
28
+ }
29
+ async function watchPublicFiles(pkgDir, includeDev) {
30
+ const distDir = path.join(pkgDir, "dist");
31
+ const publicDir = path.join(pkgDir, "public");
32
+ const publicDevDir = path.join(pkgDir, "public-dev");
33
+ await copyPublicFiles(pkgDir, includeDev);
34
+ const watchPaths = [];
35
+ if (await fsExists(publicDir)) {
36
+ watchPaths.push(path.join(publicDir, "**/*"));
37
+ }
38
+ if (includeDev && await fsExists(publicDevDir)) {
39
+ watchPaths.push(path.join(publicDevDir, "**/*"));
40
+ }
41
+ if (watchPaths.length === 0) {
42
+ return void 0;
43
+ }
44
+ const watcher = await FsWatcher.watch(watchPaths);
45
+ watcher.onChange({ delay: 300 }, async (changes) => {
46
+ for (const { event, path: filePath } of changes) {
47
+ let sourceDir;
48
+ if (filePath.startsWith(publicDevDir + path.sep) || filePath.startsWith(publicDevDir + "/")) {
49
+ sourceDir = publicDevDir;
50
+ } else {
51
+ sourceDir = publicDir;
52
+ }
53
+ const relPath = path.relative(sourceDir, filePath);
54
+ const distPath = path.join(distDir, relPath);
55
+ if (event === "unlink") {
56
+ if (sourceDir === publicDir && includeDev) {
57
+ const devOverride = path.join(publicDevDir, relPath);
58
+ if (await fsExists(devOverride)) {
59
+ continue;
60
+ }
61
+ }
62
+ if (sourceDir === publicDevDir && includeDev) {
63
+ const publicFallback = path.join(publicDir, relPath);
64
+ if (await fsExists(publicFallback)) {
65
+ await fsMkdir(path.dirname(distPath));
66
+ await fsCopy(publicFallback, distPath);
67
+ continue;
68
+ }
69
+ }
70
+ await fsRm(distPath);
71
+ } else if (event === "add" || event === "change") {
72
+ if (sourceDir === publicDir && includeDev) {
73
+ const devOverride = path.join(publicDevDir, relPath);
74
+ if (await fsExists(devOverride)) {
75
+ continue;
76
+ }
77
+ }
78
+ await fsMkdir(path.dirname(distPath));
79
+ await fsCopy(filePath, distPath);
80
+ }
81
+ }
82
+ });
83
+ return watcher;
84
+ }
85
+ export {
86
+ copyPublicFiles,
87
+ watchPublicFiles
88
+ };
89
+ //# sourceMappingURL=copy-public.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/copy-public.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -47,7 +47,7 @@ export declare function createLibraryEsbuildOptions(options: LibraryEsbuildOptio
47
47
  * - bundle: true (모든 의존성 포함한 단일 번들)
48
48
  * - minify: true (코드 보호를 위한 압축)
49
49
  * - banner: CJS 패키지의 require() 지원을 위한 createRequire shim
50
- * - env를 define 옵션으로 치환 (process.env["KEY"] 형태)
50
+ * - env를 define 옵션으로 치환 (process.env.KEY 형태)
51
51
  */
52
52
  export declare function createServerEsbuildOptions(options: ServerEsbuildOptions): esbuild.BuildOptions;
53
53
  /**
@@ -51,7 +51,7 @@ function createServerEsbuildOptions(options) {
51
51
  const define = {};
52
52
  if (options.env != null) {
53
53
  for (const [key, value] of Object.entries(options.env)) {
54
- define[`process.env["${key}"]`] = JSON.stringify(value);
54
+ define[`process.env.${key}`] = JSON.stringify(value);
55
55
  }
56
56
  }
57
57
  return {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/esbuild-config.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../src/utils/vite-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,UAAU,IAAI,cAAc,EAAE,MAAM,MAAM,CAAC;AA4MjE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CA2D3E"}
1
+ {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../src/utils/vite-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,UAAU,IAAI,cAAc,EAAE,MAAM,MAAM,CAAC;AAsPjE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CA8D3E"}
@@ -51,6 +51,36 @@ function isSubpathOnlyPackage(pkgJsonPath) {
51
51
  }
52
52
  return false;
53
53
  }
54
+ function sdPublicDevPlugin(pkgDir) {
55
+ const publicDevDir = path.join(pkgDir, "public-dev");
56
+ return {
57
+ name: "sd-public-dev",
58
+ configureServer(server) {
59
+ if (!fs.existsSync(publicDevDir)) return;
60
+ server.middlewares.use((req, res, next) => {
61
+ if (req.url == null) {
62
+ next();
63
+ return;
64
+ }
65
+ const base = server.config.base || "/";
66
+ let urlPath = req.url.split("?")[0];
67
+ if (urlPath.startsWith(base)) {
68
+ urlPath = urlPath.slice(base.length);
69
+ }
70
+ if (urlPath.startsWith("/")) {
71
+ urlPath = urlPath.slice(1);
72
+ }
73
+ const filePath = path.join(publicDevDir, urlPath);
74
+ if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
75
+ const stream = fs.createReadStream(filePath);
76
+ stream.pipe(res);
77
+ } else {
78
+ next();
79
+ }
80
+ });
81
+ }
82
+ };
83
+ }
54
84
  function sdScopeWatchPlugin(pkgDir, scopes) {
55
85
  return {
56
86
  name: "sd-scope-watch",
@@ -152,7 +182,8 @@ function createViteConfig(options) {
152
182
  }
153
183
  }),
154
184
  sdTailwindConfigDepsPlugin(pkgDir),
155
- ...watchScopes != null && watchScopes.length > 0 ? [sdScopeWatchPlugin(pkgDir, watchScopes)] : []
185
+ ...watchScopes != null && watchScopes.length > 0 ? [sdScopeWatchPlugin(pkgDir, watchScopes)] : [],
186
+ ...mode === "dev" ? [sdPublicDevPlugin(pkgDir)] : []
156
187
  ],
157
188
  css: {
158
189
  postcss: {
@@ -163,10 +194,10 @@ function createViteConfig(options) {
163
194
  tsconfigRaw: { compilerOptions }
164
195
  }
165
196
  };
197
+ config.define = envDefine;
166
198
  if (mode === "build") {
167
199
  config.logLevel = "silent";
168
200
  } else {
169
- config.define = envDefine;
170
201
  config.server = {
171
202
  port: serverPort === 0 ? void 0 : serverPort,
172
203
  strictPort: serverPort !== 0 && serverPort !== void 0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/vite-config.ts"],
4
- "mappings": "AAAA,OAAO,QAAQ;AACf,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAEjB,OAAO,mBAAmB;AAC1B,OAAO,iBAAiB;AACxB,SAAS,eAAe;AACxB,OAAO,iBAAiB;AAExB,SAAS,6BAA6B;AACtC,SAAS,iBAAiB;AAS1B,SAAS,2BAA2B,QAAwB;AAC1D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,gBAAgB,QAAQ;AACtB,YAAM,aAAa,KAAK,KAAK,QAAQ,oBAAoB;AACzD,UAAI,CAAC,GAAG,WAAW,UAAU,EAAG;AAGhC,YAAM,cAAc,KAAK,KAAK,QAAQ,cAAc;AACpD,YAAM,UAAU,KAAK,MAAM,GAAG,aAAa,aAAa,OAAO,CAAC,EAAE;AAClE,YAAM,WAAW,QAAQ,MAAM,aAAa,IAAI,CAAC;AACjD,YAAM,SAAS,oBAAI,IAAI,CAAC,WAAW,CAAC;AACpC,UAAI,YAAY,MAAM;AACpB,eAAO,IAAI,QAAQ;AAAA,MACrB;AAEA,YAAM,UAAU,sBAAsB,YAAY,CAAC,GAAG,MAAM,CAAC;AAC7D,YAAM,iBAAiB,KAAK,QAAQ,UAAU;AAC9C,YAAM,eAAe,QAAQ,OAAO,CAAC,MAAM,MAAM,cAAc;AAC/D,UAAI,aAAa,WAAW,EAAG;AAE/B,iBAAW,OAAO,cAAc;AAC9B,eAAO,QAAQ,IAAI,GAAG;AAAA,MACxB;AAEA,aAAO,QAAQ,GAAG,UAAU,CAAC,YAAY;AACvC,YAAI,aAAa,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,KAAK,UAAU,OAAO,CAAC,GAAG;AAG3E,gBAAM,WAAW,cAAc,YAAY,GAAG;AAC9C,qBAAW,OAAO,SAAS;AACzB,mBAAO,SAAS,MAAM,GAAG;AAAA,UAC3B;AAGA,gBAAM,MAAM,oBAAI,KAAK;AACrB,aAAG,WAAW,YAAY,KAAK,GAAG;AAClC,iBAAO,GAAG,KAAK,EAAE,MAAM,cAAc,CAAC;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAUA,SAAS,qBAAqB,aAA8B;AAC1D,MAAI;AACF,UAAM,UAAU,KAAK,MAAM,GAAG,aAAa,aAAa,OAAO,CAAC;AAKhE,QACE,QAAQ,WAAW,QACnB,OAAO,QAAQ,YAAY,YAC3B,EAAE,OAAO,QAAQ,YACjB,QAAQ,QAAQ,QAChB,QAAQ,UAAU,MAClB;AACA,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAWA,SAAS,mBAAmB,QAAgB,QAA0B;AACpE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AACP,YAAM,WAAqB,CAAC;AAC5B,YAAM,sBAAgC,CAAC;AAEvC,iBAAW,SAAS,QAAQ;AAE1B,cAAM,WAAW,KAAK,KAAK,QAAQ,gBAAgB,KAAK;AACxD,YAAI,CAAC,GAAG,WAAW,QAAQ,EAAG;AAE9B,mBAAW,QAAQ,GAAG,YAAY,QAAQ,GAAG;AAC3C,mBAAS,KAAK,GAAG,KAAK,IAAI,IAAI,EAAE;AAKhC,gBAAM,iBAAiB,KAAK,KAAK,UAAU,MAAM,cAAc;AAC/D,cAAI;AACF,kBAAM,aAAa,KAAK,MAAM,GAAG,aAAa,gBAAgB,OAAO,CAAC;AAGtE,kBAAM,cAAc,GAAG,KAAK,IAAI,IAAI;AACpC,uBAAW,OAAO,OAAO,KAAK,WAAW,gBAAgB,CAAC,CAAC,GAAG;AAE5D,kBAAI,OAAO,KAAK,CAAC,MAAM,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC,EAAG;AAEjD,kBAAI,QAAQ,cAAc,IAAI,WAAW,WAAW,KAAK,IAAI,WAAW,QAAQ,EAAG;AAEnF,kBAAI,QAAQ,cAAe;AAI3B,oBAAM,cAAc,GAAG,aAAa,KAAK,KAAK,UAAU,IAAI,CAAC;AAC7D,oBAAM,kBAAkB,KAAK,QAAQ,aAAa,OAAO;AACzD,oBAAM,qBAAqB,KAAK,KAAK,iBAAiB,KAAK,cAAc;AACzE,kBAAI,qBAAqB,kBAAkB,GAAG;AAC5C;AAAA,cACF;AAIA,oBAAM,qBAAqB,KAAK,KAAK,UAAU,MAAM,gBAAgB,KAAK,cAAc;AACxF,kBAAI,qBAAqB,kBAAkB,GAAG;AAC5C;AAAA,cACF;AAEA,kCAAoB,KAAK,GAAG,WAAW,MAAM,GAAG,EAAE;AAAA,YACpD;AAAA,UACF,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,cAAc;AAAA,UACZ,SAAS;AAAA,UACT,SAAS,CAAC,GAAG,IAAI,IAAI,mBAAmB,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,gBAAgB,QAAQ;AAC5B,YAAM,WAAqB,CAAC;AAE5B,iBAAW,SAAS,QAAQ;AAC1B,cAAM,WAAW,KAAK,KAAK,QAAQ,gBAAgB,KAAK;AACxD,YAAI,CAAC,GAAG,WAAW,QAAQ,EAAG;AAE9B,mBAAW,WAAW,GAAG,YAAY,QAAQ,GAAG;AAC9C,gBAAM,UAAU,KAAK,KAAK,UAAU,SAAS,MAAM;AACnD,cAAI,GAAG,WAAW,OAAO,GAAG;AAC1B,qBAAS,KAAK,OAAO;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAEA,UAAI,SAAS,WAAW,EAAG;AAK3B,YAAM,eAAe,MAAM,UAAU,MAAM,QAAQ;AACnD,mBAAa,SAAS,EAAE,OAAO,IAAI,GAAG,CAAC,gBAAgB;AACrD,mBAAW,EAAE,MAAM,YAAY,KAAK,aAAa;AAE/C,cAAI;AACJ,cAAI;AACF,uBAAW,GAAG,aAAa,WAAW;AAAA,UACxC,QAAQ;AACN;AAAA,UACF;AAGA,iBAAO,QAAQ,KAAK,UAAU,QAAQ;AAAA,QACxC;AAAA,MACF,CAAC;AAGD,aAAO,YAAY,GAAG,SAAS,MAAM,KAAK,aAAa,MAAM,CAAC;AAAA,IAChE;AAAA,EACF;AACF;AAyBO,SAAS,iBAAiB,SAA4C;AAC3E,QAAM,EAAE,QAAQ,MAAM,cAAc,iBAAiB,KAAK,MAAM,YAAY,YAAY,IAAI;AAG5F,QAAM,cAAc,KAAK,KAAK,QAAQ,cAAc;AACpD,QAAM,UAAU,KAAK,MAAM,GAAG,aAAa,aAAa,OAAO,CAAC;AAChE,QAAM,UAAU,QAAQ,KAAK,QAAQ,aAAa,EAAE;AAGpD,QAAM,YAAoC,CAAC;AAC3C,MAAI,OAAO,MAAM;AACf,cAAU,aAAa,IAAI,KAAK,UAAU,GAAG;AAAA,EAC/C;AAEA,QAAM,SAAyB;AAAA,IAC7B,MAAM;AAAA,IACN,MAAM,IAAI,IAAI;AAAA,IACd,SAAS;AAAA,MACP,cAAc,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC;AAAA,MAC1C,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,UAAU;AAAA,UACR,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,aAAa;AAAA,UACb,kBAAkB;AAAA,QACpB;AAAA,QACA,SAAS;AAAA,UACP,cAAc,CAAC,sCAAsC;AAAA,QACvD;AAAA,MACF,CAAC;AAAA,MACD,2BAA2B,MAAM;AAAA,MACjC,GAAI,eAAe,QAAQ,YAAY,SAAS,IAAI,CAAC,mBAAmB,QAAQ,WAAW,CAAC,IAAI,CAAC;AAAA,IACnG;AAAA,IACA,KAAK;AAAA,MACH,SAAS;AAAA,QACP,SAAS,CAAC,YAAY,EAAE,QAAQ,KAAK,KAAK,QAAQ,oBAAoB,EAAE,CAAC,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,aAAa,EAAE,gBAA2E;AAAA,IAC5F;AAAA,EACF;AAEA,MAAI,SAAS,SAAS;AACpB,WAAO,WAAW;AAAA,EACpB,OAAO;AAEL,WAAO,SAAS;AAChB,WAAO,SAAS;AAAA,MACd,MAAM,eAAe,IAAI,SAAY;AAAA,MACrC,YAAY,eAAe,KAAK,eAAe;AAAA,IACjD;AAAA,EACF;AAEA,SAAO;AACT;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.worker.d.ts","sourceRoot":"","sources":["../../src/workers/server.worker.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,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,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,2CAA2C;IAC3C,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,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,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AA+KD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6CtE;AAKD;;;;GAIG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8E9D;AAED;;;GAGG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAExC;AAED,QAAA,MAAM,MAAM;;;eACD,OAAO,KAAK;oBAAc,OAAO,UAAU;mBAAa,OAAO,SAAS;;;CAMjF,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"server.worker.d.ts","sourceRoot":"","sources":["../../src/workers/server.worker.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,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,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,2CAA2C;IAC3C,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,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,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAyLD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgDtE;AAKD;;;;GAIG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiF9D;AAED;;;GAGG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAExC;AAED,QAAA,MAAM,MAAM;;;eACD,OAAO,KAAK;oBAAc,OAAO,UAAU;mBAAa,OAAO,SAAS;;;CAMjF,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -11,14 +11,21 @@ import {
11
11
  collectNativeModuleExternals
12
12
  } from "../utils/esbuild-config.js";
13
13
  import { registerCleanupHandlers } from "../utils/worker-utils.js";
14
+ import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public.js";
14
15
  const logger = consola.withTag("sd:cli:server:worker");
15
16
  let esbuildContext;
17
+ let publicWatcher;
16
18
  async function cleanup() {
17
19
  const contextToDispose = esbuildContext;
18
20
  esbuildContext = void 0;
21
+ const watcherToClose = publicWatcher;
22
+ publicWatcher = void 0;
19
23
  if (contextToDispose != null) {
20
24
  await contextToDispose.dispose();
21
25
  }
26
+ if (watcherToClose != null) {
27
+ await watcherToClose.close();
28
+ }
22
29
  }
23
30
  function collectAllExternals(pkgDir, manualExternals) {
24
31
  const optionalPeerDeps = collectUninstalledOptionalPeerDeps(pkgDir);
@@ -148,6 +155,7 @@ async function build(info) {
148
155
  const result = await esbuild.build(esbuildOptions);
149
156
  const confDistPath = path.join(info.pkgDir, "dist", ".config.json");
150
157
  fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, void 0, 2));
158
+ await copyPublicFiles(info.pkgDir, false);
151
159
  generateProductionFiles(info, external);
152
160
  const errors = result.errors.map((e) => e.text);
153
161
  return {
@@ -214,6 +222,7 @@ async function startWatch(info) {
214
222
  ]
215
223
  });
216
224
  await esbuildContext.watch();
225
+ publicWatcher = await watchPublicFiles(info.pkgDir, true);
217
226
  await firstBuildPromise;
218
227
  } catch (err) {
219
228
  sender.send("error", {
@@ -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,7 +1,7 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
3
  "sideEffects": false,
4
- "version": "13.0.13",
4
+ "version": "13.0.15",
5
5
  "description": "심플리즘 패키지 - CLI 도구",
6
6
  "author": "김석래",
7
7
  "repository": {
@@ -44,9 +44,9 @@
44
44
  "vite-plugin-solid": "^2.11.10",
45
45
  "vite-tsconfig-paths": "^6.1.1",
46
46
  "yargs": "^18.0.0",
47
- "@simplysm/core-common": "13.0.13",
48
- "@simplysm/core-node": "13.0.13",
49
- "@simplysm/storage": "13.0.13"
47
+ "@simplysm/core-common": "13.0.15",
48
+ "@simplysm/core-node": "13.0.15",
49
+ "@simplysm/storage": "13.0.15"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/semver": "^7.7.1",
@@ -0,0 +1,119 @@
1
+ import path from "path";
2
+ import { fsCopy, fsMkdir, fsRm, fsGlob, FsWatcher, fsExists } from "@simplysm/core-node";
3
+
4
+ /**
5
+ * public/ 및 public-dev/ 디렉토리의 파일을 dist/로 복사한다.
6
+ * public-dev/가 public/보다 우선한다 (overlay).
7
+ *
8
+ * @param pkgDir 패키지 루트 디렉토리
9
+ * @param includeDev public-dev/ 포함 여부 (dev 모드에서만 true)
10
+ */
11
+ export async function copyPublicFiles(pkgDir: string, includeDev: boolean): Promise<void> {
12
+ const distDir = path.join(pkgDir, "dist");
13
+ await fsMkdir(distDir);
14
+
15
+ // public/ 복사
16
+ const publicDir = path.join(pkgDir, "public");
17
+ if (await fsExists(publicDir)) {
18
+ const files = await fsGlob("**/*", { cwd: publicDir, absolute: true });
19
+ for (const file of files) {
20
+ const relativePath = path.relative(publicDir, file);
21
+ const distPath = path.join(distDir, relativePath);
22
+ await fsMkdir(path.dirname(distPath));
23
+ await fsCopy(file, distPath);
24
+ }
25
+ }
26
+
27
+ // public-dev/ 복사 (overlay: public/ 위에 덮어씀)
28
+ if (includeDev) {
29
+ const publicDevDir = path.join(pkgDir, "public-dev");
30
+ if (await fsExists(publicDevDir)) {
31
+ const files = await fsGlob("**/*", { cwd: publicDevDir, absolute: true });
32
+ for (const file of files) {
33
+ const relativePath = path.relative(publicDevDir, file);
34
+ const distPath = path.join(distDir, relativePath);
35
+ await fsMkdir(path.dirname(distPath));
36
+ await fsCopy(file, distPath);
37
+ }
38
+ }
39
+ }
40
+ }
41
+
42
+ /**
43
+ * public/ 및 public-dev/ 디렉토리를 감시하여 dist/로 실시간 복사한다.
44
+ * 초기 복사 후 변경/추가/삭제를 자동 반영한다.
45
+ *
46
+ * @param pkgDir 패키지 루트 디렉토리
47
+ * @param includeDev public-dev/ 포함 여부 (dev 모드에서만 true)
48
+ * @returns FsWatcher 인스턴스 (shutdown 시 close() 호출 필요) 또는 watch할 대상이 없으면 undefined
49
+ */
50
+ export async function watchPublicFiles(pkgDir: string, includeDev: boolean): Promise<FsWatcher | undefined> {
51
+ const distDir = path.join(pkgDir, "dist");
52
+ const publicDir = path.join(pkgDir, "public");
53
+ const publicDevDir = path.join(pkgDir, "public-dev");
54
+
55
+ // 초기 복사
56
+ await copyPublicFiles(pkgDir, includeDev);
57
+
58
+ // watch 대상 경로 수집
59
+ const watchPaths: string[] = [];
60
+ if (await fsExists(publicDir)) {
61
+ watchPaths.push(path.join(publicDir, "**/*"));
62
+ }
63
+ if (includeDev && (await fsExists(publicDevDir))) {
64
+ watchPaths.push(path.join(publicDevDir, "**/*"));
65
+ }
66
+
67
+ if (watchPaths.length === 0) {
68
+ return undefined;
69
+ }
70
+
71
+ const watcher = await FsWatcher.watch(watchPaths);
72
+
73
+ watcher.onChange({ delay: 300 }, async (changes) => {
74
+ for (const { event, path: filePath } of changes) {
75
+ // 어느 소스 디렉토리에서 온 변경인지 판별
76
+ let sourceDir: string;
77
+ if (filePath.startsWith(publicDevDir + path.sep) || filePath.startsWith(publicDevDir + "/")) {
78
+ sourceDir = publicDevDir;
79
+ } else {
80
+ sourceDir = publicDir;
81
+ }
82
+
83
+ const relPath = path.relative(sourceDir, filePath);
84
+ const distPath = path.join(distDir, relPath);
85
+
86
+ if (event === "unlink") {
87
+ // public에서 삭제 시, public-dev에 같은 파일이 있으면 삭제하지 않음
88
+ if (sourceDir === publicDir && includeDev) {
89
+ const devOverride = path.join(publicDevDir, relPath);
90
+ if (await fsExists(devOverride)) {
91
+ continue;
92
+ }
93
+ }
94
+ // public-dev에서 삭제 시, public에 같은 파일이 있으면 복사 (fallback 복원)
95
+ if (sourceDir === publicDevDir && includeDev) {
96
+ const publicFallback = path.join(publicDir, relPath);
97
+ if (await fsExists(publicFallback)) {
98
+ await fsMkdir(path.dirname(distPath));
99
+ await fsCopy(publicFallback, distPath);
100
+ continue;
101
+ }
102
+ }
103
+ await fsRm(distPath);
104
+ } else if (event === "add" || event === "change") {
105
+ // public에서 변경 시, public-dev에 같은 파일이 있으면 overlay 우선이므로 스킵
106
+ if (sourceDir === publicDir && includeDev) {
107
+ const devOverride = path.join(publicDevDir, relPath);
108
+ if (await fsExists(devOverride)) {
109
+ continue;
110
+ }
111
+ }
112
+ await fsMkdir(path.dirname(distPath));
113
+ await fsCopy(filePath, distPath);
114
+ }
115
+ }
116
+ });
117
+
118
+ return watcher;
119
+ }
@@ -111,13 +111,13 @@ export function createLibraryEsbuildOptions(options: LibraryEsbuildOptions): esb
111
111
  * - bundle: true (모든 의존성 포함한 단일 번들)
112
112
  * - minify: true (코드 보호를 위한 압축)
113
113
  * - banner: CJS 패키지의 require() 지원을 위한 createRequire shim
114
- * - env를 define 옵션으로 치환 (process.env["KEY"] 형태)
114
+ * - env를 define 옵션으로 치환 (process.env.KEY 형태)
115
115
  */
116
116
  export function createServerEsbuildOptions(options: ServerEsbuildOptions): esbuild.BuildOptions {
117
117
  const define: Record<string, string> = {};
118
118
  if (options.env != null) {
119
119
  for (const [key, value] of Object.entries(options.env)) {
120
- define[`process.env["${key}"]`] = JSON.stringify(value);
120
+ define[`process.env.${key}`] = JSON.stringify(value);
121
121
  }
122
122
  }
123
123
 
@@ -91,6 +91,48 @@ function isSubpathOnlyPackage(pkgJsonPath: string): boolean {
91
91
  return false;
92
92
  }
93
93
 
94
+ /**
95
+ * public-dev/ 디렉토리의 파일을 dev 모드에서 public/보다 우선하여 서빙하는 Vite 플러그인.
96
+ * Vite의 기본 publicDir(public/)은 그대로 유지하면서, public-dev/의 파일이 같은 경로에 있으면 우선한다.
97
+ */
98
+ function sdPublicDevPlugin(pkgDir: string): Plugin {
99
+ const publicDevDir = path.join(pkgDir, "public-dev");
100
+
101
+ return {
102
+ name: "sd-public-dev",
103
+ configureServer(server) {
104
+ if (!fs.existsSync(publicDevDir)) return;
105
+
106
+ // Vite의 기본 static 서빙보다 먼저 public-dev/ 파일을 체크
107
+ server.middlewares.use((req, res, next) => {
108
+ if (req.url == null) {
109
+ next();
110
+ return;
111
+ }
112
+
113
+ // base path 제거
114
+ const base = server.config.base || "/";
115
+ let urlPath = req.url.split("?")[0];
116
+ if (urlPath.startsWith(base)) {
117
+ urlPath = urlPath.slice(base.length);
118
+ }
119
+ if (urlPath.startsWith("/")) {
120
+ urlPath = urlPath.slice(1);
121
+ }
122
+
123
+ const filePath = path.join(publicDevDir, urlPath);
124
+ if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
125
+ // sirv 대신 간단히 파일 스트림으로 응답
126
+ const stream = fs.createReadStream(filePath);
127
+ stream.pipe(res);
128
+ } else {
129
+ next();
130
+ }
131
+ });
132
+ },
133
+ };
134
+ }
135
+
94
136
  /**
95
137
  * scope 패키지의 dist 디렉토리 변경을 감지하는 Vite 플러그인.
96
138
  *
@@ -236,7 +278,7 @@ export function createViteConfig(options: ViteConfigOptions): ViteUserConfig {
236
278
  const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8")) as { name: string };
237
279
  const appName = pkgJson.name.replace(/^@[^/]+\//, "");
238
280
 
239
- // process.env 치환 (dev 모드에서만 사용, build 모드는 inline으로 처리됨)
281
+ // process.env 치환 (build/dev 모두 적용)
240
282
  const envDefine: Record<string, string> = {};
241
283
  if (env != null) {
242
284
  envDefine["process.env"] = JSON.stringify(env);
@@ -264,6 +306,7 @@ export function createViteConfig(options: ViteConfigOptions): ViteUserConfig {
264
306
  }),
265
307
  sdTailwindConfigDepsPlugin(pkgDir),
266
308
  ...(watchScopes != null && watchScopes.length > 0 ? [sdScopeWatchPlugin(pkgDir, watchScopes)] : []),
309
+ ...(mode === "dev" ? [sdPublicDevPlugin(pkgDir)] : []),
267
310
  ],
268
311
  css: {
269
312
  postcss: {
@@ -275,11 +318,13 @@ export function createViteConfig(options: ViteConfigOptions): ViteUserConfig {
275
318
  },
276
319
  };
277
320
 
321
+ // process.env 치환 (build/dev 모두 적용)
322
+ config.define = envDefine;
323
+
278
324
  if (mode === "build") {
279
325
  config.logLevel = "silent";
280
326
  } else {
281
327
  // dev 모드
282
- config.define = envDefine;
283
328
  config.server = {
284
329
  port: serverPort === 0 ? undefined : serverPort,
285
330
  strictPort: serverPort !== 0 && serverPort !== undefined,
@@ -3,6 +3,7 @@ import fs from "fs";
3
3
  import cp from "child_process";
4
4
  import esbuild from "esbuild";
5
5
  import { createWorker } from "@simplysm/core-node";
6
+ import type { FsWatcher } from "@simplysm/core-node";
6
7
  import { consola } from "consola";
7
8
  import { parseRootTsconfig, getPackageSourceFiles, getCompilerOptionsForPackage } from "../utils/tsconfig";
8
9
  import {
@@ -11,6 +12,7 @@ import {
11
12
  collectNativeModuleExternals,
12
13
  } from "../utils/esbuild-config";
13
14
  import { registerCleanupHandlers } from "../utils/worker-utils";
15
+ import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public";
14
16
 
15
17
  //#region Types
16
18
 
@@ -94,6 +96,9 @@ const logger = consola.withTag("sd:cli:server:worker");
94
96
  /** esbuild build context (정리 대상) */
95
97
  let esbuildContext: esbuild.BuildContext | undefined;
96
98
 
99
+ /** public 파일 watcher (정리 대상) */
100
+ let publicWatcher: FsWatcher | undefined;
101
+
97
102
  /**
98
103
  * 리소스 정리
99
104
  */
@@ -103,9 +108,16 @@ async function cleanup(): Promise<void> {
103
108
  const contextToDispose = esbuildContext;
104
109
  esbuildContext = undefined;
105
110
 
111
+ const watcherToClose = publicWatcher;
112
+ publicWatcher = undefined;
113
+
106
114
  if (contextToDispose != null) {
107
115
  await contextToDispose.dispose();
108
116
  }
117
+
118
+ if (watcherToClose != null) {
119
+ await watcherToClose.close();
120
+ }
109
121
  }
110
122
 
111
123
  /**
@@ -290,6 +302,9 @@ async function build(info: ServerBuildInfo): Promise<ServerBuildResult> {
290
302
  const confDistPath = path.join(info.pkgDir, "dist", ".config.json");
291
303
  fs.writeFileSync(confDistPath, JSON.stringify(info.configs ?? {}, undefined, 2));
292
304
 
305
+ // Copy public/ to dist/ (production build: no public-dev)
306
+ await copyPublicFiles(info.pkgDir, false);
307
+
293
308
  // Generate production files (package.json, mise.toml, openssl.cnf, pm2.config.cjs)
294
309
  generateProductionFiles(info, external);
295
310
 
@@ -387,6 +402,9 @@ async function startWatch(info: ServerWatchInfo): Promise<void> {
387
402
 
388
403
  await esbuildContext.watch();
389
404
 
405
+ // Watch public/ and public-dev/ (dev mode includes public-dev)
406
+ publicWatcher = await watchPublicFiles(info.pkgDir, true);
407
+
390
408
  // 첫 번째 빌드 완료 대기
391
409
  await firstBuildPromise;
392
410
  } catch (err) {
@@ -4,7 +4,7 @@
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
7
- "@simplysm/solid": "~13.0.13",
7
+ "@simplysm/solid": "~13.0.15",
8
8
  {{#if router}}
9
9
  "@solidjs/router": "^0.15.4",
10
10
  {{/if}}
@@ -4,7 +4,7 @@
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
7
- "@simplysm/core-common": "~13.0.13",
8
- "@simplysm/service-server": "~13.0.13"
7
+ "@simplysm/core-common": "~13.0.15",
8
+ "@simplysm/service-server": "~13.0.15"
9
9
  }
10
10
  }
@@ -15,9 +15,9 @@
15
15
  "vitest": "vitest"
16
16
  },
17
17
  "devDependencies": {
18
- "@simplysm/sd-cli": "~13.0.13",
19
- "@simplysm/claude": "~13.0.13",
20
- "@simplysm/lint": "~13.0.13",
18
+ "@simplysm/sd-cli": "~13.0.15",
19
+ "@simplysm/claude": "~13.0.15",
20
+ "@simplysm/lint": "~13.0.15",
21
21
  "@types/node": "^20.19.33",
22
22
  "eslint": "^9.39.2",
23
23
  "prettier": "^3.8.1",