@modern-js/app-tools 3.6.0 → 3.8.0

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.
Files changed (306) hide show
  1. package/bin/modern-bundle-docs.js +7 -0
  2. package/dist/cjs/builder/generator/createBuilderProviderConfig.js +5 -1
  3. package/dist/cjs/bundleDocs.js +114 -0
  4. package/dist/cjs/commands/build.js +2 -1
  5. package/dist/cjs/commands/deploy.js +4 -2
  6. package/dist/cjs/commands/index.js +0 -4
  7. package/dist/cjs/config/default.js +2 -0
  8. package/dist/cjs/index.js +52 -14
  9. package/dist/cjs/plugins/analyze/index.js +2 -2
  10. package/dist/cjs/plugins/analyze/utils.js +3 -2
  11. package/dist/cjs/plugins/initialize/index.js +4 -3
  12. package/dist/cjs/plugins/serverBuild.js +3 -2
  13. package/dist/esm/builder/generator/createBuilderProviderConfig.mjs +5 -1
  14. package/dist/esm/bundleDocs.mjs +62 -0
  15. package/dist/esm/commands/build.mjs +2 -1
  16. package/dist/esm/commands/deploy.mjs +4 -2
  17. package/dist/esm/commands/index.mjs +0 -4
  18. package/dist/esm/config/default.mjs +2 -0
  19. package/dist/esm/index.mjs +15 -1
  20. package/dist/esm/plugins/analyze/index.mjs +2 -2
  21. package/dist/esm/plugins/analyze/utils.mjs +3 -2
  22. package/dist/esm/plugins/initialize/index.mjs +4 -3
  23. package/dist/esm/plugins/serverBuild.mjs +3 -2
  24. package/dist/esm-node/builder/generator/createBuilderProviderConfig.mjs +5 -1
  25. package/dist/esm-node/bundleDocs.mjs +63 -0
  26. package/dist/esm-node/commands/build.mjs +2 -1
  27. package/dist/esm-node/commands/deploy.mjs +4 -2
  28. package/dist/esm-node/commands/index.mjs +0 -4
  29. package/dist/esm-node/config/default.mjs +2 -0
  30. package/dist/esm-node/index.mjs +15 -1
  31. package/dist/esm-node/plugins/analyze/index.mjs +2 -2
  32. package/dist/esm-node/plugins/analyze/utils.mjs +3 -2
  33. package/dist/esm-node/plugins/initialize/index.mjs +4 -3
  34. package/dist/esm-node/plugins/serverBuild.mjs +3 -2
  35. package/dist/types/bundleDocs.d.ts +20 -0
  36. package/dist/types/commands/deploy.d.ts +2 -1
  37. package/dist/types/index.d.ts +4 -1
  38. package/dist/types/plugins/analyze/utils.d.ts +1 -1
  39. package/dist/types/types/config/dev.d.ts +6 -0
  40. package/docs/apis/app/commands.md +241 -0
  41. package/docs/apis/app/hooks/api/lambda.md +9 -0
  42. package/docs/apis/app/hooks/config/favicon.md +24 -0
  43. package/docs/apis/app/hooks/config/html.md +5 -0
  44. package/docs/apis/app/hooks/config/icon.md +24 -0
  45. package/docs/apis/app/hooks/config/mock.md +6 -0
  46. package/docs/apis/app/hooks/config/public.md +26 -0
  47. package/docs/apis/app/hooks/config/upload.md +50 -0
  48. package/docs/apis/app/hooks/modern-config.md +5 -0
  49. package/docs/apis/app/hooks/server/server.md +5 -0
  50. package/docs/apis/app/hooks/shared.md +3 -0
  51. package/docs/apis/app/hooks/src/app.md +30 -0
  52. package/docs/apis/app/hooks/src/entry.md +34 -0
  53. package/docs/apis/app/hooks/src/entry.server.md +51 -0
  54. package/docs/apis/app/hooks/src/modern.runtime.md +5 -0
  55. package/docs/apis/app/hooks/src/routes.md +86 -0
  56. package/docs/apis/app/hooks/src/server.md +3 -0
  57. package/docs/apis/app/runtime/bff/use-hono-context.md +27 -0
  58. package/docs/apis/app/runtime/core/create-root.md +19 -0
  59. package/docs/apis/app/runtime/core/render.md +39 -0
  60. package/docs/apis/app/runtime/core/runtime-context.md +156 -0
  61. package/docs/apis/app/runtime/router/router.md +280 -0
  62. package/docs/apis/app/runtime/ssr/no-ssr.md +35 -0
  63. package/docs/apis/app/runtime/ssr/renderStreaming.md +67 -0
  64. package/docs/apis/app/runtime/ssr/renderString.md +60 -0
  65. package/docs/apis/app/runtime/ssr/requestHandler.md +44 -0
  66. package/docs/apis/app/runtime/utility/css-in-js.md +40 -0
  67. package/docs/apis/app/runtime/utility/head.md +35 -0
  68. package/docs/apis/app/runtime/utility/loadable.md +82 -0
  69. package/docs/community/blog/2022-0708-updates.md +91 -0
  70. package/docs/community/blog/2022-0910-updates.md +76 -0
  71. package/docs/community/blog/overview.md +63 -0
  72. package/docs/community/blog/v2-release-note.md +238 -0
  73. package/docs/community/blog/v3-release-note.md +622 -0
  74. package/docs/community/contributing-guide.md +253 -0
  75. package/docs/community/releases.md +27 -0
  76. package/docs/community/showcase.md +34 -0
  77. package/docs/community/team.md +14 -0
  78. package/docs/configure/app/bff/cross-project.md +20 -0
  79. package/docs/configure/app/bff/prefix.md +29 -0
  80. package/docs/configure/app/builder-plugins.md +66 -0
  81. package/docs/configure/app/dev/asset-prefix.md +13 -0
  82. package/docs/configure/app/dev/before-start-url.md +17 -0
  83. package/docs/configure/app/dev/client.md +41 -0
  84. package/docs/configure/app/dev/hmr.md +10 -0
  85. package/docs/configure/app/dev/host.md +18 -0
  86. package/docs/configure/app/dev/https.md +77 -0
  87. package/docs/configure/app/dev/lazy-compilation.md +39 -0
  88. package/docs/configure/app/dev/live-reload.md +10 -0
  89. package/docs/configure/app/dev/mock-dir.md +31 -0
  90. package/docs/configure/app/dev/progress-bar.md +19 -0
  91. package/docs/configure/app/dev/server.md +124 -0
  92. package/docs/configure/app/dev/setup-middlewares.md +32 -0
  93. package/docs/configure/app/dev/start-url.md +48 -0
  94. package/docs/configure/app/dev/watch-files.md +27 -0
  95. package/docs/configure/app/dev/write-to-disk.md +10 -0
  96. package/docs/configure/app/experiments/source-build.md +31 -0
  97. package/docs/configure/app/html/app-icon.md +28 -0
  98. package/docs/configure/app/html/crossorigin.md +10 -0
  99. package/docs/configure/app/html/favicon.md +16 -0
  100. package/docs/configure/app/html/inject.md +10 -0
  101. package/docs/configure/app/html/meta.md +24 -0
  102. package/docs/configure/app/html/mount-id.md +10 -0
  103. package/docs/configure/app/html/output-structure.md +10 -0
  104. package/docs/configure/app/html/script-loading.md +10 -0
  105. package/docs/configure/app/html/tags.md +15 -0
  106. package/docs/configure/app/html/template-parameters.md +33 -0
  107. package/docs/configure/app/html/template.md +10 -0
  108. package/docs/configure/app/html/title.md +18 -0
  109. package/docs/configure/app/output/asset-prefix.md +11 -0
  110. package/docs/configure/app/output/assets-retry.md +77 -0
  111. package/docs/configure/app/output/charset.md +10 -0
  112. package/docs/configure/app/output/clean-dist-path.md +16 -0
  113. package/docs/configure/app/output/convert-to-rem.md +79 -0
  114. package/docs/configure/app/output/copy.md +10 -0
  115. package/docs/configure/app/output/css-modules.md +48 -0
  116. package/docs/configure/app/output/data-uri-limit.md +26 -0
  117. package/docs/configure/app/output/disable-css-module-extension.md +55 -0
  118. package/docs/configure/app/output/disable-inline-runtime-chunk.md +41 -0
  119. package/docs/configure/app/output/disable-svgr.md +16 -0
  120. package/docs/configure/app/output/disable-ts-checker.md +49 -0
  121. package/docs/configure/app/output/dist-path.md +43 -0
  122. package/docs/configure/app/output/enable-asset-manifest.md +36 -0
  123. package/docs/configure/app/output/enable-css-module-tsdeclaration.md +28 -0
  124. package/docs/configure/app/output/enable-inline-route-manifests.md +16 -0
  125. package/docs/configure/app/output/externals.md +20 -0
  126. package/docs/configure/app/output/filename-hash.md +10 -0
  127. package/docs/configure/app/output/filename.md +55 -0
  128. package/docs/configure/app/output/inject-styles.md +10 -0
  129. package/docs/configure/app/output/inline-scripts.md +29 -0
  130. package/docs/configure/app/output/inline-styles.md +29 -0
  131. package/docs/configure/app/output/legal-comments.md +18 -0
  132. package/docs/configure/app/output/minify.md +22 -0
  133. package/docs/configure/app/output/override-browserslist.md +22 -0
  134. package/docs/configure/app/output/polyfill.md +12 -0
  135. package/docs/configure/app/output/source-map.md +30 -0
  136. package/docs/configure/app/output/split-route-chunks.md +16 -0
  137. package/docs/configure/app/output/ssg.md +81 -0
  138. package/docs/configure/app/output/ssgByEntries.md +90 -0
  139. package/docs/configure/app/output/svg-default-export.md +30 -0
  140. package/docs/configure/app/output/temp-dir.md +20 -0
  141. package/docs/configure/app/performance/build-cache.md +39 -0
  142. package/docs/configure/app/performance/chunk-split.md +40 -0
  143. package/docs/configure/app/performance/dns-prefetch.md +15 -0
  144. package/docs/configure/app/performance/preconnect.md +16 -0
  145. package/docs/configure/app/performance/prefetch.md +21 -0
  146. package/docs/configure/app/performance/preload.md +23 -0
  147. package/docs/configure/app/performance/print-file-size.md +40 -0
  148. package/docs/configure/app/performance/profile.md +10 -0
  149. package/docs/configure/app/performance/remove-console.md +10 -0
  150. package/docs/configure/app/performance/remove-moment-locale.md +10 -0
  151. package/docs/configure/app/plugins.md +59 -0
  152. package/docs/configure/app/resolve/alias-strategy.md +10 -0
  153. package/docs/configure/app/resolve/alias.md +9 -0
  154. package/docs/configure/app/resolve/condition-names.md +13 -0
  155. package/docs/configure/app/resolve/dedupe.md +9 -0
  156. package/docs/configure/app/resolve/extensions.md +13 -0
  157. package/docs/configure/app/runtime/0-intro.md +58 -0
  158. package/docs/configure/app/runtime/plugins.md +58 -0
  159. package/docs/configure/app/runtime/router.md +35 -0
  160. package/docs/configure/app/security/check-syntax.md +69 -0
  161. package/docs/configure/app/security/nonce.md +15 -0
  162. package/docs/configure/app/security/sri.md +20 -0
  163. package/docs/configure/app/server/base-url.md +26 -0
  164. package/docs/configure/app/server/port.md +18 -0
  165. package/docs/configure/app/server/public-routes.md +22 -0
  166. package/docs/configure/app/server/routes.md +86 -0
  167. package/docs/configure/app/server/rsc.md +26 -0
  168. package/docs/configure/app/server/ssr-by-entries.md +25 -0
  169. package/docs/configure/app/server/ssr.md +78 -0
  170. package/docs/configure/app/server/tsconfig-path.md +59 -0
  171. package/docs/configure/app/source/alias-strategy.md +14 -0
  172. package/docs/configure/app/source/alias.md +23 -0
  173. package/docs/configure/app/source/config-dir.md +20 -0
  174. package/docs/configure/app/source/decorators.md +25 -0
  175. package/docs/configure/app/source/define.md +16 -0
  176. package/docs/configure/app/source/disable-default-entries.md +28 -0
  177. package/docs/configure/app/source/enable-async-entry.md +54 -0
  178. package/docs/configure/app/source/enable-async-pre-entry.md +26 -0
  179. package/docs/configure/app/source/entries-dir.md +35 -0
  180. package/docs/configure/app/source/entries.md +179 -0
  181. package/docs/configure/app/source/exclude.md +10 -0
  182. package/docs/configure/app/source/global-vars.md +106 -0
  183. package/docs/configure/app/source/include.md +36 -0
  184. package/docs/configure/app/source/main-entry-name.md +24 -0
  185. package/docs/configure/app/source/pre-entry.md +10 -0
  186. package/docs/configure/app/source/react-compiler.md +68 -0
  187. package/docs/configure/app/source/transform-import.md +27 -0
  188. package/docs/configure/app/split-chunks.md +17 -0
  189. package/docs/configure/app/tools/autoprefixer.md +44 -0
  190. package/docs/configure/app/tools/bundler-chain.md +26 -0
  191. package/docs/configure/app/tools/css-extract.md +33 -0
  192. package/docs/configure/app/tools/css-loader.md +17 -0
  193. package/docs/configure/app/tools/dev-server.md +113 -0
  194. package/docs/configure/app/tools/html-plugin.md +41 -0
  195. package/docs/configure/app/tools/less.md +81 -0
  196. package/docs/configure/app/tools/lightningcss-loader.md +35 -0
  197. package/docs/configure/app/tools/minify-css.md +53 -0
  198. package/docs/configure/app/tools/postcss.md +34 -0
  199. package/docs/configure/app/tools/rspack.md +10 -0
  200. package/docs/configure/app/tools/sass.md +78 -0
  201. package/docs/configure/app/tools/style-loader.md +10 -0
  202. package/docs/configure/app/tools/swc.md +65 -0
  203. package/docs/configure/app/tools/ts-checker.md +109 -0
  204. package/docs/configure/app/usage.md +276 -0
  205. package/docs/guides/advanced-features/bff/cross-project.md +109 -0
  206. package/docs/guides/advanced-features/bff/extend-server.md +120 -0
  207. package/docs/guides/advanced-features/bff/frameworks.md +124 -0
  208. package/docs/guides/advanced-features/bff/function.md +314 -0
  209. package/docs/guides/advanced-features/bff/operators.md +554 -0
  210. package/docs/guides/advanced-features/bff/sdk.md +116 -0
  211. package/docs/guides/advanced-features/bff/upload.md +101 -0
  212. package/docs/guides/advanced-features/bff.md +18 -0
  213. package/docs/guides/advanced-features/build-performance.md +130 -0
  214. package/docs/guides/advanced-features/compatibility.md +120 -0
  215. package/docs/guides/advanced-features/international/advanced.md +128 -0
  216. package/docs/guides/advanced-features/international/api.md +231 -0
  217. package/docs/guides/advanced-features/international/best-practices.md +286 -0
  218. package/docs/guides/advanced-features/international/configuration.md +227 -0
  219. package/docs/guides/advanced-features/international/locale-detection.md +126 -0
  220. package/docs/guides/advanced-features/international/quick-start.md +128 -0
  221. package/docs/guides/advanced-features/international/resource-loading.md +154 -0
  222. package/docs/guides/advanced-features/international/routing.md +130 -0
  223. package/docs/guides/advanced-features/international.md +27 -0
  224. package/docs/guides/advanced-features/low-level.md +46 -0
  225. package/docs/guides/advanced-features/page-performance/code-split.md +77 -0
  226. package/docs/guides/advanced-features/page-performance/inline-assets.md +159 -0
  227. package/docs/guides/advanced-features/page-performance/optimize-bundle.md +97 -0
  228. package/docs/guides/advanced-features/page-performance/react-compiler.md +69 -0
  229. package/docs/guides/advanced-features/server-monitor/logger.md +41 -0
  230. package/docs/guides/advanced-features/server-monitor/metrics.md +58 -0
  231. package/docs/guides/advanced-features/server-monitor/monitors.md +242 -0
  232. package/docs/guides/advanced-features/source-build.md +164 -0
  233. package/docs/guides/advanced-features/web-server.md +288 -0
  234. package/docs/guides/basic-features/alias.md +102 -0
  235. package/docs/guides/basic-features/css/css-in-js.md +72 -0
  236. package/docs/guides/basic-features/css/css-modules.md +212 -0
  237. package/docs/guides/basic-features/css/css.md +27 -0
  238. package/docs/guides/basic-features/css/tailwindcss.md +27 -0
  239. package/docs/guides/basic-features/data/data-cache.md +510 -0
  240. package/docs/guides/basic-features/data/data-fetch.md +415 -0
  241. package/docs/guides/basic-features/data/data-write.md +227 -0
  242. package/docs/guides/basic-features/debug/mock.md +109 -0
  243. package/docs/guides/basic-features/debug/proxy.md +21 -0
  244. package/docs/guides/basic-features/debug/rsdoctor.md +62 -0
  245. package/docs/guides/basic-features/debug/using-storybook.md +112 -0
  246. package/docs/guides/basic-features/deploy.md +458 -0
  247. package/docs/guides/basic-features/env-vars.md +177 -0
  248. package/docs/guides/basic-features/html.md +255 -0
  249. package/docs/guides/basic-features/output-files.md +141 -0
  250. package/docs/guides/basic-features/render/before-render.md +108 -0
  251. package/docs/guides/basic-features/render/overview.md +47 -0
  252. package/docs/guides/basic-features/render/rsc.md +525 -0
  253. package/docs/guides/basic-features/render/ssg.md +228 -0
  254. package/docs/guides/basic-features/render/ssr-cache.md +201 -0
  255. package/docs/guides/basic-features/render/ssr.md +321 -0
  256. package/docs/guides/basic-features/render/streaming-ssr.md +264 -0
  257. package/docs/guides/basic-features/routes/config-routes.md +426 -0
  258. package/docs/guides/basic-features/routes/routes.md +498 -0
  259. package/docs/guides/basic-features/static-assets/json-files.md +120 -0
  260. package/docs/guides/basic-features/static-assets/svg-assets.md +168 -0
  261. package/docs/guides/basic-features/static-assets/wasm-assets.md +62 -0
  262. package/docs/guides/basic-features/static-assets.md +160 -0
  263. package/docs/guides/basic-features/testing/playwright.md +120 -0
  264. package/docs/guides/basic-features/testing/rstest.md +251 -0
  265. package/docs/guides/concept/builder.md +37 -0
  266. package/docs/guides/concept/entries.md +319 -0
  267. package/docs/guides/concept/server.md +35 -0
  268. package/docs/guides/get-started/ai-coding-agents.md +58 -0
  269. package/docs/guides/get-started/glossary.md +63 -0
  270. package/docs/guides/get-started/introduction.md +36 -0
  271. package/docs/guides/get-started/quick-start.md +236 -0
  272. package/docs/guides/get-started/tech-stack.md +82 -0
  273. package/docs/guides/get-started/upgrade.md +123 -0
  274. package/docs/guides/topic-detail/module-federation/application.md +116 -0
  275. package/docs/guides/topic-detail/module-federation/deploy.md +104 -0
  276. package/docs/guides/topic-detail/module-federation/i18n.md +670 -0
  277. package/docs/guides/topic-detail/module-federation/introduce.md +35 -0
  278. package/docs/guides/topic-detail/module-federation/ssr.md +118 -0
  279. package/docs/guides/topic-detail/module-federation/usage.md +219 -0
  280. package/docs/guides/troubleshooting/builder.md +110 -0
  281. package/docs/guides/troubleshooting/cli.md +35 -0
  282. package/docs/guides/troubleshooting/dependencies.md +119 -0
  283. package/docs/guides/troubleshooting/hmr.md +144 -0
  284. package/docs/guides/upgrade/config.md +963 -0
  285. package/docs/guides/upgrade/entry.md +463 -0
  286. package/docs/guides/upgrade/other.md +183 -0
  287. package/docs/guides/upgrade/overview.md +33 -0
  288. package/docs/guides/upgrade/tailwindcss.md +91 -0
  289. package/docs/guides/upgrade/web-server.md +109 -0
  290. package/docs/index.md +33 -0
  291. package/docs/llms.txt +285 -0
  292. package/docs/plugin/cli-plugins/api.md +573 -0
  293. package/docs/plugin/cli-plugins/life-cycle.md +2 -0
  294. package/docs/plugin/introduction.md +152 -0
  295. package/docs/plugin/official/cli-plugins/plugin-bff.md +5 -0
  296. package/docs/plugin/official/cli-plugins/plugin-ssg.md +5 -0
  297. package/docs/plugin/official/cli-plugins/plugin-styled-components.md +5 -0
  298. package/docs/plugin/official/cli-plugins.md +4 -0
  299. package/docs/plugin/plugin-system.md +238 -0
  300. package/docs/plugin/runtime-plugins/api.md +194 -0
  301. package/docs/plugin/runtime-plugins/life-cycle.md +2 -0
  302. package/docs/plugin/server-plugins/api.md +209 -0
  303. package/docs/plugin/server-plugins/life-cycle.md +13 -0
  304. package/docs/tutorials/examples/csr-auth.md +9 -0
  305. package/docs/tutorials/foundations/introduction.md +16 -0
  306. package/package.json +48 -15
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ // The CLI body lives in the compiled ESM output; a CommonJS shim keeps the
3
+ // shebang and stays executable on any Node without a loader.
4
+ const path = require('path');
5
+ import('../dist/esm-node/bundleDocs.mjs').then(m =>
6
+ m.runBundleDocsCli(path.resolve(__dirname, '..')),
7
+ );
@@ -46,6 +46,10 @@ function modifyOutputConfig(config, appContext) {
46
46
  };
47
47
  }
48
48
  function createBuilderProviderConfig(resolveConfig, appContext) {
49
+ const builderDevConfig = {
50
+ ...resolveConfig.dev
51
+ };
52
+ delete builderDevConfig.mockDir;
49
53
  const htmlConfig = {
50
54
  ...resolveConfig.html
51
55
  };
@@ -64,7 +68,7 @@ function createBuilderProviderConfig(resolveConfig, appContext) {
64
68
  ...resolveConfig.source
65
69
  },
66
70
  dev: {
67
- ...resolveConfig.dev,
71
+ ...builderDevConfig,
68
72
  port: appContext.port
69
73
  },
70
74
  server: serverConfig,
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
22
+ };
23
+ })();
24
+ (()=>{
25
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
26
+ })();
27
+ (()=>{
28
+ __webpack_require__.r = (exports1)=>{
29
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
30
+ value: 'Module'
31
+ });
32
+ Object.defineProperty(exports1, '__esModule', {
33
+ value: true
34
+ });
35
+ };
36
+ })();
37
+ var __webpack_exports__ = {};
38
+ __webpack_require__.r(__webpack_exports__);
39
+ __webpack_require__.d(__webpack_exports__, {
40
+ bundleDocs: ()=>bundleDocs,
41
+ runBundleDocsCli: ()=>runBundleDocsCli
42
+ });
43
+ const external_node_fs_namespaceObject = require("node:fs");
44
+ var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
45
+ const external_node_path_namespaceObject = require("node:path");
46
+ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
47
+ const DEFAULT_INDEX_FILE = 'llms.txt';
48
+ const DEFAULT_EXCLUDED_DIRS = [
49
+ 'zh'
50
+ ];
51
+ function bundleDocs({ source, target, indexFile = DEFAULT_INDEX_FILE, excludedDirs = DEFAULT_EXCLUDED_DIRS }) {
52
+ if (!external_node_fs_default().existsSync(source)) {
53
+ console.warn(`[bundle-docs] docs build output not found: ${source}`);
54
+ console.warn('[bundle-docs] skipping the bundled docs — build the docs site first if you need them');
55
+ return 0;
56
+ }
57
+ external_node_fs_default().rmSync(target, {
58
+ recursive: true,
59
+ force: true
60
+ });
61
+ const isBundled = (rel)=>rel === indexFile || rel.endsWith('.md') && !excludedDirs.some((dir)=>rel.startsWith(`${dir}${external_node_path_default().sep}`));
62
+ let count = 0;
63
+ for (const entry of external_node_fs_default().readdirSync(source, {
64
+ recursive: true,
65
+ withFileTypes: true
66
+ })){
67
+ if (!entry.isFile()) continue;
68
+ const from = external_node_path_default().join(entry.parentPath ?? entry.path, entry.name);
69
+ const rel = external_node_path_default().relative(source, from);
70
+ if (!isBundled(rel)) continue;
71
+ const to = external_node_path_default().join(target, rel);
72
+ external_node_fs_default().mkdirSync(external_node_path_default().dirname(to), {
73
+ recursive: true
74
+ });
75
+ external_node_fs_default().copyFileSync(from, to);
76
+ count++;
77
+ }
78
+ if (0 === count) throw new Error(`[bundle-docs] no files copied from ${source}`);
79
+ return count;
80
+ }
81
+ function parseArgs(argv) {
82
+ const options = {};
83
+ for(let i = 0; i < argv.length; i += 2){
84
+ const key = argv[i]?.replace(/^--/, '');
85
+ const value = argv[i + 1];
86
+ if (key && value) options[key] = value;
87
+ }
88
+ return options;
89
+ }
90
+ function runBundleDocsCli(pkgRoot) {
91
+ const args = parseArgs(process.argv.slice(2));
92
+ const source = args.source ? external_node_path_default().resolve(process.cwd(), args.source) : external_node_path_default().resolve(pkgRoot, '../../document/doc_build');
93
+ const target = args.target ? external_node_path_default().resolve(process.cwd(), args.target) : external_node_path_default().resolve(pkgRoot, 'docs');
94
+ try {
95
+ const count = bundleDocs({
96
+ source,
97
+ target,
98
+ indexFile: args.index
99
+ });
100
+ if (count > 0) console.log(`[bundle-docs] bundled ${count} doc files into docs`);
101
+ } catch (error) {
102
+ console.error(error.message);
103
+ process.exit(1);
104
+ }
105
+ }
106
+ exports.bundleDocs = __webpack_exports__.bundleDocs;
107
+ exports.runBundleDocsCli = __webpack_exports__.runBundleDocsCli;
108
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
109
+ "bundleDocs",
110
+ "runBundleDocsCli"
111
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
112
+ Object.defineProperty(exports, '__esModule', {
113
+ value: true
114
+ });
@@ -98,9 +98,10 @@ const build = async (api, options)=>{
98
98
  utils_namespaceObject.logger.info('Starting production build...');
99
99
  if (!appContext.builder) throw new Error('Expect the Builder to have been initialized, But the appContext.builder received `undefined`');
100
100
  await appContext.builder.onAfterBuild(async ()=>copyEnvFiles(appContext.appDirectory, appContext.distDirectory));
101
- await appContext.builder.build({
101
+ const buildResult = await appContext.builder.build({
102
102
  watch: options?.watch
103
103
  });
104
+ if (!options?.watch) await buildResult?.close();
104
105
  };
105
106
  exports.build = __webpack_exports__.build;
106
107
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -31,10 +31,12 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  deploy: ()=>deploy
32
32
  });
33
33
  const loadPlugins_js_namespaceObject = require("../utils/loadPlugins.js");
34
- const deploy = async (api, options)=>{
34
+ const external_build_js_namespaceObject = require("./build.js");
35
+ const deploy = async (api, options = {})=>{
35
36
  const hooks = api.getHooks();
36
37
  const { metaName } = api.getAppContext();
37
- await (0, loadPlugins_js_namespaceObject.getServerPlugins)(api, metaName);
38
+ if (options.skipBuild) await (0, loadPlugins_js_namespaceObject.getServerPlugins)(api, metaName);
39
+ else await (0, external_build_js_namespaceObject.build)(api);
38
40
  await hooks.onBeforeDeploy.call(options);
39
41
  await hooks.deploy.call();
40
42
  await hooks.onAfterDeploy.call(options);
@@ -56,10 +56,6 @@ const serverCommand = (program, api)=>{
56
56
  };
57
57
  const deployCommand = (program, api)=>{
58
58
  program.command('deploy').usage('[options]').option('-c --config <config>', index_js_namespaceObject.i18n.t(index_js_namespaceObject.localeKeys.command.shared.config)).option('-s --skip-build', index_js_namespaceObject.i18n.t(index_js_namespaceObject.localeKeys.command.shared.skipBuild)).description(index_js_namespaceObject.i18n.t(index_js_namespaceObject.localeKeys.command.deploy.describe)).action(async (options)=>{
59
- if (!options.skipBuild) {
60
- const { build } = await import("./build.js");
61
- await build(api);
62
- }
63
59
  const { deploy } = await import("./deploy.js");
64
60
  await deploy(api, options);
65
61
  process.exit(0);
@@ -31,10 +31,12 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  createDefaultConfig: ()=>createDefaultConfig,
32
32
  isLazyCompilationSafeByDefault: ()=>isLazyCompilationSafeByDefault
33
33
  });
34
+ const server_core_namespaceObject = require("@modern-js/server-core");
34
35
  const utils_namespaceObject = require("@modern-js/utils");
35
36
  const env_js_namespaceObject = require("../utils/env.js");
36
37
  function createDefaultConfig(appContext) {
37
38
  const dev = {
39
+ mockDir: `./${server_core_namespaceObject.AGGRED_DIR.mock}`,
38
40
  cliShortcuts: {
39
41
  help: false,
40
42
  custom: (shortcuts = [])=>shortcuts.filter(({ key })=>'r' !== key && 'u' !== key && 'o' !== key)
package/dist/cjs/index.js CHANGED
@@ -1,5 +1,11 @@
1
1
  "use strict";
2
2
  var __webpack_modules__ = {
3
+ "./commands/build" (module) {
4
+ module.exports = require("./commands/build.js");
5
+ },
6
+ "./commands/deploy" (module) {
7
+ module.exports = require("./commands/deploy.js");
8
+ },
3
9
  "./commands/dev" (module) {
4
10
  module.exports = require("./commands/dev.js");
5
11
  },
@@ -42,6 +48,9 @@ var __webpack_modules__ = {
42
48
  "./types?6efa" (module) {
43
49
  module.exports = require("./types/index.js");
44
50
  },
51
+ "./utils/createServer" (module) {
52
+ module.exports = require("./utils/createServer.js");
53
+ },
45
54
  "./utils/generateWatchFiles" (module) {
46
55
  module.exports = require("./utils/generateWatchFiles.js");
47
56
  },
@@ -151,15 +160,21 @@ var __webpack_exports__ = {};
151
160
  "serve",
152
161
  "generateWatchFiles",
153
162
  "initAppContext",
154
- "defineConfig"
163
+ "deploy",
164
+ "defineConfig",
165
+ "build",
166
+ "closeServer"
155
167
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_defineConfig__rspack_import_17[__rspack_import_key];
156
168
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
157
- var _commands_dev__rspack_import_18 = __webpack_require__("./commands/dev");
158
- var _commands_serve__rspack_import_19 = __webpack_require__("./commands/serve");
159
- var _rsbuild__rspack_import_20 = __webpack_require__("./rsbuild");
160
- var _types__rspack_import_21 = __webpack_require__("./types?6efa");
169
+ var _commands_build__rspack_import_18 = __webpack_require__("./commands/build");
170
+ var _commands_deploy__rspack_import_19 = __webpack_require__("./commands/deploy");
171
+ var _commands_dev__rspack_import_20 = __webpack_require__("./commands/dev");
172
+ var _commands_serve__rspack_import_21 = __webpack_require__("./commands/serve");
173
+ var _utils_createServer__rspack_import_22 = __webpack_require__("./utils/createServer");
174
+ var _rsbuild__rspack_import_23 = __webpack_require__("./rsbuild");
175
+ var _types__rspack_import_24 = __webpack_require__("./types?6efa");
161
176
  var __rspack_reexport = {};
162
- for(const __rspack_import_key in _types__rspack_import_21)if ([
177
+ for(const __rspack_import_key in _types__rspack_import_24)if ([
163
178
  "dev",
164
179
  "resolveModernRsbuildConfig",
165
180
  "mergeConfig",
@@ -168,10 +183,13 @@ var __webpack_exports__ = {};
168
183
  "serve",
169
184
  "generateWatchFiles",
170
185
  "initAppContext",
171
- "defineConfig"
172
- ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_types__rspack_import_21[__rspack_import_key];
186
+ "deploy",
187
+ "defineConfig",
188
+ "build",
189
+ "closeServer"
190
+ ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_types__rspack_import_24[__rspack_import_key];
173
191
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
174
- var _modern_js_plugin_cli__rspack_import_22 = __webpack_require__("@modern-js/plugin/cli");
192
+ var _modern_js_plugin_cli__rspack_import_25 = __webpack_require__("@modern-js/plugin/cli");
175
193
  const appTools = ()=>({
176
194
  name: '@modern-js/app-tools',
177
195
  usePlugins: [
@@ -232,7 +250,18 @@ var __webpack_exports__ = {};
232
250
  ].some((tag)=>(0, _modern_js_utils__rspack_import_4.getArgv)().includes(tag));
233
251
  if (isSkipBuild) return;
234
252
  }
235
- if ('dev' === command || 'start' === command || 'build' === command || 'deploy' === command) {
253
+ const { command: contextCommand } = api.getAppContext();
254
+ const shouldClean = [
255
+ 'dev',
256
+ 'start',
257
+ 'build',
258
+ 'deploy'
259
+ ].includes(command) || [
260
+ 'dev',
261
+ 'start',
262
+ 'build'
263
+ ].includes(contextCommand);
264
+ if (shouldClean) {
236
265
  const resolvedConfig = api.getNormalizedConfig();
237
266
  if (resolvedConfig.output.cleanDistPath) {
238
267
  const appContext = api.getAppContext();
@@ -272,21 +301,27 @@ var __webpack_exports__ = {};
272
301
  });
273
302
  const __rspack_default_export = appTools;
274
303
  __webpack_require__.d(__webpack_exports__, {
304
+ build: ()=>_commands_build__rspack_import_18.build,
305
+ closeServer: ()=>_utils_createServer__rspack_import_22.closeServer,
275
306
  defineConfig: ()=>_defineConfig__rspack_import_17.defineConfig,
276
- dev: ()=>_commands_dev__rspack_import_18.dev,
307
+ deploy: ()=>_commands_deploy__rspack_import_19.deploy,
308
+ dev: ()=>_commands_dev__rspack_import_20.dev,
277
309
  generateWatchFiles: ()=>_utils_generateWatchFiles__rspack_import_14.generateWatchFiles,
278
310
  initAppContext: ()=>_utils_initAppContext__rspack_import_15.initAppContext,
279
- mergeConfig: ()=>_modern_js_plugin_cli__rspack_import_22.mergeConfig,
280
- resolveModernRsbuildConfig: ()=>_rsbuild__rspack_import_20.resolveModernRsbuildConfig,
281
- serve: ()=>_commands_serve__rspack_import_19.serve
311
+ mergeConfig: ()=>_modern_js_plugin_cli__rspack_import_25.mergeConfig,
312
+ resolveModernRsbuildConfig: ()=>_rsbuild__rspack_import_23.resolveModernRsbuildConfig,
313
+ serve: ()=>_commands_serve__rspack_import_21.serve
282
314
  }, {
283
315
  appTools: appTools,
284
316
  default: __rspack_default_export
285
317
  });
286
318
  })();
287
319
  exports.appTools = __webpack_exports__.appTools;
320
+ exports.build = __webpack_exports__.build;
321
+ exports.closeServer = __webpack_exports__.closeServer;
288
322
  exports["default"] = __webpack_exports__["default"];
289
323
  exports.defineConfig = __webpack_exports__.defineConfig;
324
+ exports.deploy = __webpack_exports__.deploy;
290
325
  exports.dev = __webpack_exports__.dev;
291
326
  exports.generateWatchFiles = __webpack_exports__.generateWatchFiles;
292
327
  exports.initAppContext = __webpack_exports__.initAppContext;
@@ -295,8 +330,11 @@ exports.resolveModernRsbuildConfig = __webpack_exports__.resolveModernRsbuildCon
295
330
  exports.serve = __webpack_exports__.serve;
296
331
  for(var __rspack_i in __webpack_exports__)if (-1 === [
297
332
  "appTools",
333
+ "build",
334
+ "closeServer",
298
335
  "default",
299
336
  "defineConfig",
337
+ "deploy",
300
338
  "dev",
301
339
  "generateWatchFiles",
302
340
  "initAppContext",
@@ -55,7 +55,7 @@ const analyze = ()=>({
55
55
  const resolvedConfig = api.getNormalizedConfig();
56
56
  const hooks = api.getHooks();
57
57
  try {
58
- if ((0, external_utils_js_namespaceObject.checkIsBuildCommands)()) utils_namespaceObject.fs.emptydirSync(appContext.internalDirectory);
58
+ if ((0, external_utils_js_namespaceObject.checkIsBuildCommands)(appContext.command)) utils_namespaceObject.fs.emptydirSync(appContext.internalDirectory);
59
59
  } catch {}
60
60
  const apiOnly = await (0, utils_namespaceObject.isApiOnly)(appContext.appDirectory, resolvedConfig.source?.entriesDir, appContext.apiDirectory);
61
61
  const [{ getProdServerRoutes }] = await Promise.all([
@@ -149,7 +149,7 @@ const analyze = ()=>({
149
149
  htmlTemplates
150
150
  };
151
151
  api.updateAppContext(appContext);
152
- if ((0, external_utils_js_namespaceObject.checkIsBuildCommands)()) {
152
+ if ((0, external_utils_js_namespaceObject.checkIsBuildCommands)(appContext.command)) {
153
153
  await hooks.generateEntryCode.call({
154
154
  entrypoints
155
155
  });
@@ -101,7 +101,7 @@ const parseModule = async ({ source, filename })=>{
101
101
  return await (0, external_es_module_lexer_namespaceObject.parse)(content);
102
102
  };
103
103
  const getServerCombinedModuleFile = (internalDirectory, entryName)=>external_path_default().join(internalDirectory, entryName, 'server-loader-combined.js');
104
- const checkIsBuildCommands = ()=>{
104
+ const checkIsBuildCommands = (contextCommand)=>{
105
105
  const buildCommands = [
106
106
  'dev',
107
107
  'start',
@@ -111,7 +111,8 @@ const checkIsBuildCommands = ()=>{
111
111
  'dev-worker'
112
112
  ];
113
113
  const command = (0, utils_namespaceObject.getCommand)();
114
- return buildCommands.includes(command);
114
+ if (buildCommands.includes(command)) return true;
115
+ return 'dev' === contextCommand || 'start' === contextCommand || 'build' === contextCommand || 'deploy' === contextCommand;
115
116
  };
116
117
  const checkIsServeCommand = ()=>{
117
118
  const command = (0, utils_namespaceObject.getCommand)();
@@ -57,7 +57,7 @@ const initialize = ()=>({
57
57
  api.modifyResolvedConfig(async (resolved)=>{
58
58
  let appContext = api.getAppContext();
59
59
  const userConfig = api.getConfig();
60
- const port = await getServerPort(resolved);
60
+ const port = await getServerPort(resolved, appContext.command);
61
61
  appContext = {
62
62
  ...appContext,
63
63
  port,
@@ -92,9 +92,10 @@ function stabilizeConfig(resolve, config, keys) {
92
92
  resolve[key] = config[key] || {};
93
93
  });
94
94
  }
95
- async function getServerPort(config) {
95
+ async function getServerPort(config, contextCommand) {
96
96
  const prodPort = Number(process.env.PORT) || config.server.port || 8080;
97
- if ((0, utils_namespaceObject.isDev)() && (0, utils_namespaceObject.isDevCommand)()) return (0, utils_namespaceObject.getPort)(Number(process.env.PORT) || prodPort);
97
+ const isProgrammaticDev = 'dev' === contextCommand || 'start' === contextCommand;
98
+ if ((0, utils_namespaceObject.isDev)() && ((0, utils_namespaceObject.isDevCommand)() || isProgrammaticDev)) return (0, utils_namespaceObject.getPort)(Number(process.env.PORT) || prodPort);
98
99
  return prodPort;
99
100
  }
100
101
  exports["default"] = __webpack_exports__["default"];
@@ -60,7 +60,7 @@ const serverBuild = ()=>({
60
60
  name: '@modern-js/server-build',
61
61
  setup (api) {
62
62
  api.onAfterBuild(async ()=>{
63
- const { appDirectory, distDirectory, metaName } = api.getAppContext();
63
+ const { appDirectory, distDirectory, metaName, moduleType } = api.getAppContext();
64
64
  if (!checkHasCache(appDirectory) && !checkHasConfig(appDirectory, metaName)) return;
65
65
  const modernConfig = api.getNormalizedConfig();
66
66
  const distDir = external_path_default().resolve(distDirectory);
@@ -80,7 +80,8 @@ const serverBuild = ()=>({
80
80
  }, {
81
81
  sourceDirs,
82
82
  distDir,
83
- tsconfigPath
83
+ tsconfigPath,
84
+ moduleType
84
85
  });
85
86
  });
86
87
  }
@@ -14,6 +14,10 @@ function modifyOutputConfig(config, appContext) {
14
14
  };
15
15
  }
16
16
  function createBuilderProviderConfig(resolveConfig, appContext) {
17
+ const builderDevConfig = {
18
+ ...resolveConfig.dev
19
+ };
20
+ delete builderDevConfig.mockDir;
17
21
  const htmlConfig = {
18
22
  ...resolveConfig.html
19
23
  };
@@ -32,7 +36,7 @@ function createBuilderProviderConfig(resolveConfig, appContext) {
32
36
  ...resolveConfig.source
33
37
  },
34
38
  dev: {
35
- ...resolveConfig.dev,
39
+ ...builderDevConfig,
36
40
  port: appContext.port
37
41
  },
38
42
  server: serverConfig,
@@ -0,0 +1,62 @@
1
+ import node_fs from "node:fs";
2
+ import node_path from "node:path";
3
+ const DEFAULT_INDEX_FILE = 'llms.txt';
4
+ const DEFAULT_EXCLUDED_DIRS = [
5
+ 'zh'
6
+ ];
7
+ function bundleDocs({ source, target, indexFile = DEFAULT_INDEX_FILE, excludedDirs = DEFAULT_EXCLUDED_DIRS }) {
8
+ if (!node_fs.existsSync(source)) {
9
+ console.warn(`[bundle-docs] docs build output not found: ${source}`);
10
+ console.warn('[bundle-docs] skipping the bundled docs — build the docs site first if you need them');
11
+ return 0;
12
+ }
13
+ node_fs.rmSync(target, {
14
+ recursive: true,
15
+ force: true
16
+ });
17
+ const isBundled = (rel)=>rel === indexFile || rel.endsWith('.md') && !excludedDirs.some((dir)=>rel.startsWith(`${dir}${node_path.sep}`));
18
+ let count = 0;
19
+ for (const entry of node_fs.readdirSync(source, {
20
+ recursive: true,
21
+ withFileTypes: true
22
+ })){
23
+ if (!entry.isFile()) continue;
24
+ const from = node_path.join(entry.parentPath ?? entry.path, entry.name);
25
+ const rel = node_path.relative(source, from);
26
+ if (!isBundled(rel)) continue;
27
+ const to = node_path.join(target, rel);
28
+ node_fs.mkdirSync(node_path.dirname(to), {
29
+ recursive: true
30
+ });
31
+ node_fs.copyFileSync(from, to);
32
+ count++;
33
+ }
34
+ if (0 === count) throw new Error(`[bundle-docs] no files copied from ${source}`);
35
+ return count;
36
+ }
37
+ function parseArgs(argv) {
38
+ const options = {};
39
+ for(let i = 0; i < argv.length; i += 2){
40
+ const key = argv[i]?.replace(/^--/, '');
41
+ const value = argv[i + 1];
42
+ if (key && value) options[key] = value;
43
+ }
44
+ return options;
45
+ }
46
+ function runBundleDocsCli(pkgRoot) {
47
+ const args = parseArgs(process.argv.slice(2));
48
+ const source = args.source ? node_path.resolve(process.cwd(), args.source) : node_path.resolve(pkgRoot, '../../document/doc_build');
49
+ const target = args.target ? node_path.resolve(process.cwd(), args.target) : node_path.resolve(pkgRoot, 'docs');
50
+ try {
51
+ const count = bundleDocs({
52
+ source,
53
+ target,
54
+ indexFile: args.index
55
+ });
56
+ if (count > 0) console.log(`[bundle-docs] bundled ${count} doc files into docs`);
57
+ } catch (error) {
58
+ console.error(error.message);
59
+ process.exit(1);
60
+ }
61
+ }
62
+ export { bundleDocs, runBundleDocsCli };
@@ -56,8 +56,9 @@ const build = async (api, options)=>{
56
56
  logger.info('Starting production build...');
57
57
  if (!appContext.builder) throw new Error('Expect the Builder to have been initialized, But the appContext.builder received `undefined`');
58
58
  await appContext.builder.onAfterBuild(async ()=>copyEnvFiles(appContext.appDirectory, appContext.distDirectory));
59
- await appContext.builder.build({
59
+ const buildResult = await appContext.builder.build({
60
60
  watch: options?.watch
61
61
  });
62
+ if (!options?.watch) await buildResult?.close();
62
63
  };
63
64
  export { build };
@@ -1,8 +1,10 @@
1
1
  import { getServerPlugins } from "../utils/loadPlugins.mjs";
2
- const deploy = async (api, options)=>{
2
+ import { build } from "./build.mjs";
3
+ const deploy = async (api, options = {})=>{
3
4
  const hooks = api.getHooks();
4
5
  const { metaName } = api.getAppContext();
5
- await getServerPlugins(api, metaName);
6
+ if (options.skipBuild) await getServerPlugins(api, metaName);
7
+ else await build(api);
6
8
  await hooks.onBeforeDeploy.call(options);
7
9
  await hooks.deploy.call();
8
10
  await hooks.onAfterDeploy.call(options);
@@ -19,10 +19,6 @@ const serverCommand = (program, api)=>{
19
19
  };
20
20
  const deployCommand = (program, api)=>{
21
21
  program.command('deploy').usage('[options]').option('-c --config <config>', i18n.t(localeKeys.command.shared.config)).option('-s --skip-build', i18n.t(localeKeys.command.shared.skipBuild)).description(i18n.t(localeKeys.command.deploy.describe)).action(async (options)=>{
22
- if (!options.skipBuild) {
23
- const { build } = await import("./build.mjs");
24
- await build(api);
25
- }
26
22
  const { deploy } = await import("./deploy.mjs");
27
23
  await deploy(api, options);
28
24
  process.exit(0);
@@ -1,7 +1,9 @@
1
+ import { AGGRED_DIR } from "@modern-js/server-core";
1
2
  import { DEFAULT_ENTRY_NAME } from "@modern-js/utils";
2
3
  import { getAutoInjectEnv } from "../utils/env.mjs";
3
4
  function createDefaultConfig(appContext) {
4
5
  const dev = {
6
+ mockDir: `./${AGGRED_DIR.mock}`,
5
7
  cliShortcuts: {
6
8
  help: false,
7
9
  custom: (shortcuts = [])=>shortcuts.filter(({ key })=>'r' !== key && 'u' !== key && 'o' !== key)
@@ -77,7 +77,18 @@ const appTools = ()=>({
77
77
  ].some((tag)=>getArgv().includes(tag));
78
78
  if (isSkipBuild) return;
79
79
  }
80
- if ('dev' === command || 'start' === command || 'build' === command || 'deploy' === command) {
80
+ const { command: contextCommand } = api.getAppContext();
81
+ const shouldClean = [
82
+ 'dev',
83
+ 'start',
84
+ 'build',
85
+ 'deploy'
86
+ ].includes(command) || [
87
+ 'dev',
88
+ 'start',
89
+ 'build'
90
+ ].includes(contextCommand);
91
+ if (shouldClean) {
81
92
  const resolvedConfig = api.getNormalizedConfig();
82
93
  if (resolvedConfig.output.cleanDistPath) {
83
94
  const appContext = api.getAppContext();
@@ -117,8 +128,11 @@ const appTools = ()=>({
117
128
  });
118
129
  const src = appTools;
119
130
  export { defineConfig } from "./defineConfig.mjs";
131
+ export { build } from "./commands/build.mjs";
132
+ export { deploy } from "./commands/deploy.mjs";
120
133
  export { dev } from "./commands/dev.mjs";
121
134
  export { serve } from "./commands/serve.mjs";
135
+ export { closeServer } from "./utils/createServer.mjs";
122
136
  export { resolveModernRsbuildConfig } from "./rsbuild.mjs";
123
137
  export { mergeConfig } from "@modern-js/plugin/cli";
124
138
  export default src;
@@ -23,7 +23,7 @@ const analyze = ()=>({
23
23
  const resolvedConfig = api.getNormalizedConfig();
24
24
  const hooks = api.getHooks();
25
25
  try {
26
- if (checkIsBuildCommands()) fs.emptydirSync(appContext.internalDirectory);
26
+ if (checkIsBuildCommands(appContext.command)) fs.emptydirSync(appContext.internalDirectory);
27
27
  } catch {}
28
28
  const apiOnly = await isApiOnly(appContext.appDirectory, resolvedConfig.source?.entriesDir, appContext.apiDirectory);
29
29
  const [{ getProdServerRoutes }] = await Promise.all([
@@ -117,7 +117,7 @@ const analyze = ()=>({
117
117
  htmlTemplates
118
118
  };
119
119
  api.updateAppContext(appContext);
120
- if (checkIsBuildCommands()) {
120
+ if (checkIsBuildCommands(appContext.command)) {
121
121
  await hooks.generateEntryCode.call({
122
122
  entrypoints
123
123
  });
@@ -52,7 +52,7 @@ const parseModule = async ({ source, filename })=>{
52
52
  return await parse(content);
53
53
  };
54
54
  const getServerCombinedModuleFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'server-loader-combined.js');
55
- const checkIsBuildCommands = ()=>{
55
+ const checkIsBuildCommands = (contextCommand)=>{
56
56
  const buildCommands = [
57
57
  'dev',
58
58
  'start',
@@ -62,7 +62,8 @@ const checkIsBuildCommands = ()=>{
62
62
  'dev-worker'
63
63
  ];
64
64
  const command = getCommand();
65
- return buildCommands.includes(command);
65
+ if (buildCommands.includes(command)) return true;
66
+ return 'dev' === contextCommand || 'start' === contextCommand || 'build' === contextCommand || 'deploy' === contextCommand;
66
67
  };
67
68
  const checkIsServeCommand = ()=>{
68
69
  const command = getCommand();
@@ -25,7 +25,7 @@ const initialize = ()=>({
25
25
  api.modifyResolvedConfig(async (resolved)=>{
26
26
  let appContext = api.getAppContext();
27
27
  const userConfig = api.getConfig();
28
- const port = await getServerPort(resolved);
28
+ const port = await getServerPort(resolved, appContext.command);
29
29
  appContext = {
30
30
  ...appContext,
31
31
  port,
@@ -60,9 +60,10 @@ function stabilizeConfig(resolve, config, keys) {
60
60
  resolve[key] = config[key] || {};
61
61
  });
62
62
  }
63
- async function getServerPort(config) {
63
+ async function getServerPort(config, contextCommand) {
64
64
  const prodPort = Number(process.env.PORT) || config.server.port || 8080;
65
- if (isDev() && isDevCommand()) return getPort(Number(process.env.PORT) || prodPort);
65
+ const isProgrammaticDev = 'dev' === contextCommand || 'start' === contextCommand;
66
+ if (isDev() && (isDevCommand() || isProgrammaticDev)) return getPort(Number(process.env.PORT) || prodPort);
66
67
  return prodPort;
67
68
  }
68
69
  export default initialize;