@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,26 @@
1
+ # public/
2
+
3
+ Any static assets can be placed in the `public/` directory, and the files will be deployed to the corresponding application domain by the server.
4
+
5
+ ## Description
6
+
7
+ The file routing is based on the convention of the directory structure, where `public/` is the root directory corresponding to the root path of the Web application.
8
+
9
+ For example, the `config/public/sdk/index.js` file will be deployed under `${domain}/sdk/index.js` after deployment.
10
+
11
+ ## Scenarios
12
+
13
+ For example, authentication files required by third-party systems such as `robots.txt` and `auth.xml`.
14
+
15
+ Or SDKs for other business parties (requiring unchanged routing), or HTML files without entry.
16
+
17
+ :::info
18
+ For static assets (such as SVG images) that need to be imported through import in the source code, it is recommended to manage them in the `src/assets` directory.
19
+
20
+ :::
21
+
22
+ ## Code Compression
23
+
24
+ If the file in the directory is a `.js` file, it will be automatically compressed during production environment construction.
25
+
26
+ If the file ends with `.min.js`, it will not be compressed.
@@ -0,0 +1,50 @@
1
+ # upload/
2
+
3
+ Any static assets can be placed in the `upload/` directory.
4
+
5
+ ## Description
6
+
7
+ In the development environment, the static assets in this directory will be hosted under the `/upload` path. After building the application, the files in this directory will be copied to the dist directory.
8
+
9
+ This file convention is mainly used for developers to use plugins to proactively upload static assets to the CDN.
10
+
11
+ ## Scenarios
12
+
13
+ For example, SDKs for project use only, such as `google-analysis.js` (usually requires HTTP caching).
14
+
15
+ Pictures, font files, common CSS, etc.
16
+
17
+ ## Code Compression
18
+
19
+ If the file in the directory is a `.js` file, it will be automatically compressed during production environment construction.
20
+
21
+ If the file ends with `.min.js`, it will not be compressed.
22
+
23
+ ## More Usage
24
+
25
+ In React components, you can add this prefix through [Environment Variables](/guides/basic-features/env-vars.md#asset_prefix):
26
+
27
+ ```tsx
28
+ export default () => {
29
+ return (
30
+ <img src={`${process.env.ASSET_PREFIX}/upload/banner.png`}></img>
31
+ );
32
+ };
33
+ ```
34
+
35
+ In addition, whether it is in [Custom HTML](/guides/basic-features/html.md) or any HTML file under [`config/public/`](/apis/app/hooks/config/public.md), you can directly use HTML tags to reference resources in the `config/upload/` directory:
36
+
37
+ ```html
38
+ <script src="/upload/index.js"></script>
39
+ ```
40
+
41
+ If you set the [`dev.assetPrefix`](/configure/app/dev/asset-prefix.md) or [`output.assetPrefix`](/configure/app/output/asset-prefix.md) prefix, you can also use template syntax to add the prefix directly:
42
+
43
+ ```html
44
+ <script src="<%=assetPrefix %>/upload/index.js"></script>
45
+ ```
46
+
47
+ :::info
48
+ Modern.js does not support using files under `config/upload/` through URLs in `config/public/*.css` (such as background-image).
49
+
50
+ :::
@@ -0,0 +1,5 @@
1
+ # modern.config.ts
2
+
3
+ The Modern.js configuration file. Through this file, you can personalize the configuration of various aspects of the current project.
4
+
5
+ To learn more about how to use the configuration, please refer to [Configuration Usage](/configure/app/usage.md).
@@ -0,0 +1,5 @@
1
+ # modern.server.ts
2
+
3
+ This file extends the Modern.js Server. In this file, you can configure [Middleware](/guides/advanced-features/web-server.md#middleware), [RenderMiddleware](/guides/advanced-features/web-server.md#rendermiddleware), or [Plugin](/guides/advanced-features/web-server.md#plugin) for the Server that starts with the Modern.js project.
4
+
5
+ You can intercept and handle requests and responses, perform authentication and role checks, preprocess requests, and handle exceptions, etc. You can also insert specific business logic into the built-in processing logic (including route matching, resource addressing, header injection, page rendering, and static web hosting).
@@ -0,0 +1,3 @@
1
+ # shared/
2
+
3
+ Shared source code directory. When there is common code in `api/`, `server/`, and `src/` in the project, you can put these codes in the `shared` directory instead of directly referencing them.
@@ -0,0 +1,30 @@
1
+ # App.tsx
2
+
3
+ The entry identifier when using [Self-controlled Routing](/guides/concept/entries.md#self-controlled-routing) in the application.
4
+
5
+ `App.tsx` is not the actual application entry; Modern.js will automatically generate the real entry file, which is roughly as follows:
6
+
7
+ ```js
8
+ // runtime-global-context
9
+ import { setGlobalContext } from '@modern-js/runtime/context';
10
+ import App from '@_modern_js_src/App';
11
+
12
+ setGlobalContext({
13
+ App,
14
+ });
15
+
16
+ // index.tsx
17
+ import './runtime-global-context';
18
+ import { createRoot } from '@modern-js/runtime/react';
19
+ import { render } from '@modern-js/runtime/browser';
20
+
21
+ const ModernRoot = createRoot();
22
+
23
+ render(<ModernRoot />, 'root');
24
+ ```
25
+
26
+ When `createRoot` is executed, it will retrieve the registered Global App and generate the actual React component.
27
+
28
+ :::note
29
+ In scenarios with multiple entry points, each entry can have its own independent `App.tsx`. For more details, see [Entry Points](/guides/concept/entries.md).
30
+ :::
@@ -0,0 +1,34 @@
1
+ # entry.tsx
2
+
3
+ Normally, the [`routes/`](/apis/app/hooks/src/routes.md) and [`App.tsx`](/apis/app/hooks/src/app.md) hook files can meet our needs. When we need to add custom behavior before component rendering or take full control of the Rspack packaging entry, we can create `entry.ts` file in the src or entry directory. Here are two cases for discussion。
4
+
5
+ ## Add custom behavior before Render
6
+
7
+ This is implemented in `src/entry.ts` as follows:
8
+
9
+ ```js title=src/entry.tsx
10
+ import { createRoot } from '@modern-js/runtime/react';
11
+ import { render } from '@modern-js/runtime/browser';
12
+
13
+ const ModernRoot = createRoot();
14
+
15
+ async function beforeRender() {
16
+ // todo
17
+ }
18
+
19
+ beforeRender().then(() => {
20
+ render(<ModernRoot />);
21
+ });
22
+ ```
23
+
24
+ ## Take full control of the Rspack entry
25
+
26
+ When the project does not install the `@modern-js/runtime` dependency, `src/entry.tsx?` is the real Rspack packaging entry file, and you can directly organize the code like using create-react-app and other scaffolds:
27
+
28
+ ```js title=src/entry.jsx
29
+ import React from 'react';
30
+ import ReactDOM from 'react-dom/client';
31
+ import App from './App';
32
+
33
+ ReactDOM.createRoot(document.getElementById('root')!).render(<App />);
34
+ ```
@@ -0,0 +1,51 @@
1
+ # entry.server.tsx
2
+
3
+ When the project initiates `server.ssr`, Modern.js generates a default Server-Side entry. The sample code is as follows:
4
+
5
+ ```tsx title="entry.server.tsx"
6
+ import {
7
+ renderString,
8
+ createRequestHandler,
9
+ type HandleRequest,
10
+ } from '@modern-js/runtime/ssr/server';
11
+
12
+ const handleRequest: HandleRequest = async (request, ServerRoot, options) => {
13
+ const body = await renderString(request, <ServerRoot />, options);
14
+
15
+ return new Response(body, {
16
+ headers: {
17
+ 'content-type': 'text/html; charset=utf-8',
18
+ },
19
+ });
20
+ };
21
+
22
+ export default createRequestHandler(handleRequest);
23
+ ```
24
+
25
+ ## Add Custom Entry Points
26
+
27
+ Users need to customize the Server-Side Rendering entry points, they can customize the server entry in `src/entry.server.ts` or `src/{entryName}/entry.server.ts`.
28
+
29
+ ```tsx title="src/entry.server.tsx"
30
+ import {
31
+ renderString,
32
+ createRequestHandler,
33
+ type HandleRequest,
34
+ } from '@modern-js/runtime/ssr/server';
35
+
36
+ const handleRequest: HandleRequest = async (request, ServerRoot, options) => {
37
+ // do something before rendering
38
+ const body = await renderString(request, <ServerRoot />, options);
39
+
40
+ const newBody = body + '<div>Byte-Dance</div>';
41
+
42
+ return new Response(newBody, {
43
+ headers: {
44
+ 'content-type': 'text/html; charset=UTF-8',
45
+ 'x-custom-header': 'abc',
46
+ },
47
+ });
48
+ };
49
+
50
+ export default createRequestHandler(handleRequest);
51
+ ```
@@ -0,0 +1,5 @@
1
+ # modern.runtime.ts
2
+
3
+ The Modern.js Runtime configuration file allows for personalized configuration of the Runtime capabilities for the current project.
4
+
5
+ For specific usage of the configuration, please refer to [Runtime Configuration](/configure/app/runtime/0-intro.md).
@@ -0,0 +1,86 @@
1
+ # routes/
2
+
3
+ The identifier for the entry point when the application uses [Conventional Routing](/guides/basic-features/routes/routes.md#conventional-routing).
4
+
5
+ Conventional routing uses `routes/` as the convention for the entry point and analyzes the files in the `src/routes` directory to obtain the client-side routing configuration.
6
+
7
+ Any `layout.tsx` and `page.tsx` under `src/routes` will be used as the application's routes:
8
+
9
+ ```bash
10
+ .
11
+ └── routes
12
+ ├── layout.tsx # [!code highlight]
13
+ ├── page.tsx # [!code highlight]
14
+ └── user
15
+ ├── layout.tsx
16
+ └── page.tsx
17
+ ```
18
+
19
+ ## Basic Example
20
+
21
+ The directory name under `routes` will be used as the mapping of the route URL. `layout.tsx` is used as the layout component and `page.tsx` is used as the content component in the routing. They are the leaf nodes of the entire route. For example, the following directory structure:
22
+
23
+ ```bash
24
+ .
25
+ └── routes
26
+ ├── page.tsx
27
+ └── user
28
+ └── page.tsx
29
+ ```
30
+
31
+ will generate two routes:
32
+
33
+ - `/`
34
+ - `/user`
35
+
36
+ ## Dynamic Routing
37
+
38
+ If the directory name of the route file is named with `[]`, the generated route will be used as a dynamic route. For example, the following file directory:
39
+
40
+ ```
41
+ └── routes
42
+ ├── [id]
43
+ │ └── page.tsx
44
+ ├── blog
45
+ │ └── page.tsx
46
+ └── page.tsx
47
+ ```
48
+
49
+ The `routes/[id]/page.tsx` file will be converted to the `/:id` route. Except for the `/blog` route that can be matched exactly, all other `/xxx` routes will be matched to this route.
50
+
51
+ In the component, you can use [useParams](/apis/app/runtime/router/router.md#useparams) to obtain the corresponding named parameter.
52
+
53
+ When using the [loader](/guides/basic-features/data/data-fetch.md#the-loader-function) function to obtain data, `params` will be passed as an input parameter to the `loader` function, and the corresponding parameter can be obtained through the attribute of `params`.
54
+
55
+ ## Layout Component
56
+
57
+ In the following example, a common layout component can be added to all route components by adding `layout.tsx`:
58
+
59
+ ```bash
60
+ .
61
+ └── routes
62
+ ├── layout.tsx
63
+ ├── page.tsx
64
+ └── user
65
+ ├── layout.tsx
66
+ └── page.tsx
67
+ ```
68
+
69
+ In the layout component, you can use `<Outlet>` to represent the child components:
70
+
71
+ ```tsx title=routes/layout.tsx
72
+ import { Link, Outlet, useLoaderData } from '@modern-js/runtime/router';
73
+
74
+ export default () => {
75
+ return (
76
+ <>
77
+ <Outlet></Outlet>
78
+ </>
79
+ );
80
+ };
81
+ ```
82
+
83
+ :::note
84
+ `<Outlet>` is a new API in React Router 7. For details, see [Outlet](https://reactrouter.com/en/main/components/outlet#outlet).
85
+
86
+ :::
@@ -0,0 +1,3 @@
1
+ # \*.\[server|node].tsx
2
+
3
+ Used in the application project to place server-side code. When `*.tsx` and `*.[server|node].tsx` coexist, SSR will prefer to use the `*.[server|node].tsx` file instead of the `*.tsx` file when rendering on the server.
@@ -0,0 +1,27 @@
1
+ # useHonoContext
2
+
3
+ Used to obtain Hono context in an integrated BFF function.
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ import { useHonoContext } from '@modern-js/server-runtime';
9
+ ```
10
+
11
+ ## Function Signature
12
+
13
+ `function useHonoContext(): Context`
14
+
15
+ ## Example
16
+
17
+ Developers can use `context` to obtain more request information, such as setting response headers:
18
+
19
+ ```ts
20
+ import { useHonoContext } from '@modern-js/server-runtime';
21
+
22
+ export async function get() {
23
+ const c = useHonoContext();
24
+ c.res.headers.set('x-bff-api', 'true');
25
+ // ...
26
+ }
27
+ ```
@@ -0,0 +1,19 @@
1
+ # createRoot
2
+
3
+ It is used to create the root component provided by Modern.js, which will automatically register Runtime plugins and complete the initialization of Runtime plugins.
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ import { createRoot } from '@modern-js/runtime/react';
9
+ ```
10
+
11
+ ## Function Signature
12
+
13
+ ```ts
14
+ export function createRoot(UserApp?: React.ComponentType | null): React.ComponentType<any>;
15
+ ```
16
+
17
+ ### Parameters
18
+
19
+ - `UserApp`: an optional parameter, and the default is the component exported from `App.tsx`.
@@ -0,0 +1,39 @@
1
+ # render
2
+
3
+ It is used to render project components.
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ import { render } from '@modern-js/runtime/browser';
9
+
10
+ render(<ModernRoot />);
11
+ ```
12
+
13
+ ## Function Signature
14
+
15
+ ```ts
16
+ export function render(App: React.ReactElement, id?: HTMLElement | string): Promise<any>;
17
+ ```
18
+
19
+ ### Parameters
20
+
21
+ - `App`:An instance of ReactElement created through [`createRoot`](/apis/app/runtime/core/create-root.md).
22
+ - `id`:The id of the DOM root element to be mounted, such as "root".
23
+
24
+ ## Example
25
+
26
+ ```tsx
27
+ import { createRoot } from '@modern-js/runtime/react';
28
+ import { render } from '@modern-js/runtime/browser';
29
+
30
+ const ModernRoot = createRoot();
31
+
32
+ async function beforeRender() {
33
+ // todo
34
+ }
35
+
36
+ beforeRender().then(() => {
37
+ render(<ModernRoot />);
38
+ });
39
+ ```
@@ -0,0 +1,156 @@
1
+ # RuntimeContext
2
+
3
+ `RuntimeContext` is a React Context used to get Runtime context information in components. This Context can be accessed through React's `use` or `useContext` API.
4
+
5
+ :::warning
6
+
7
+ The `useRuntimeContext` Hook has been deprecated. Please use `use(RuntimeContext)` instead. `useRuntimeContext` is internally implemented as `useContext(RuntimeContext)`, while `use(RuntimeContext)` is the recommended new approach in React 19.
8
+
9
+ :::
10
+
11
+ ## Usage
12
+
13
+ ```tsx
14
+ import { use } from 'react';
15
+ import { RuntimeContext } from '@modern-js/runtime';
16
+
17
+ export function App() {
18
+ const runtimeContext = use(RuntimeContext); // You can also use useContext(RuntimeContext)
19
+ return <div>Hello World</div>
20
+ }
21
+ ```
22
+
23
+ ## Type Definition
24
+
25
+ ```ts
26
+ type TRuntimeContext = {
27
+ initialData?: Record<string, unknown>;
28
+ isBrowser: boolean;
29
+ routes?: RouteObject[];
30
+ requestContext: RequestContext;
31
+ /**
32
+ * @deprecated Use `requestContext` instead
33
+ */
34
+ context: RequestContext;
35
+ [key: string]: unknown;
36
+ };
37
+ ```
38
+
39
+ ### Property Description
40
+
41
+ - `isBrowser`: Indicates whether the current runtime environment is a browser
42
+ - `routes`: Route configuration information
43
+ - `requestContext`: Request context, containing `request` and `response` objects
44
+ - `context`: Deprecated, please use `requestContext` instead
45
+
46
+ ### RequestContext
47
+
48
+ `RequestContext` is the type of the `requestContext` property, containing request and response related information:
49
+
50
+ ```ts
51
+ type RequestContext = {
52
+ request: {
53
+ params: Record<string, string>; // Route parameters
54
+ pathname: string; // Pathname
55
+ query: Record<string, string>; // Query parameters
56
+ headers: IncomingHttpHeaders; // Request headers
57
+ host: string; // Hostname
58
+ url: string; // Full URL
59
+ referer?: string; // Referrer page
60
+ userAgent?: string; // User agent
61
+ cookie?: string; // Cookie string
62
+ cookieMap?: Record<string, string>; // Cookie map object
63
+ };
64
+ response: {
65
+ setHeader: (key: string, value: string) => void; // Set response header (server-side only)
66
+ status: (code: number) => void; // Set status code (server-side only)
67
+ locals: Record<string, any>; // Local data
68
+ };
69
+ };
70
+ ```
71
+
72
+ **Notes**:
73
+
74
+ - `response.setHeader` and `response.status` are only available on the server-side (SSR)
75
+ - On the browser side, the `response` object may not contain these methods
76
+ - The `request` object is available on both server and browser, but server-side information is more complete
77
+
78
+ ## Usage Examples
79
+
80
+ ### Distinguishing Runtime Environment
81
+
82
+ ```tsx
83
+ import { use } from 'react';
84
+ import { RuntimeContext } from '@modern-js/runtime';
85
+
86
+ function App() {
87
+ const { context, isBrowser } = use(RuntimeContext);
88
+
89
+ if (isBrowser === true) {
90
+ // Browser-side execution logic
91
+ console.log('browser render')
92
+ } else {
93
+ // Server-side execution logic
94
+ // Note: Functions like logger need to be injected into context through Runtime plugins
95
+ console.log('server render')
96
+ }
97
+ }
98
+ ```
99
+
100
+ ### Getting Request Context
101
+
102
+ When SSR is enabled, isomorphic request context can be obtained in both Node environment and browser environment.
103
+
104
+ The slight difference is that the Node environment also supports setting response headers, response codes, and provides Logger logging and Metrics tracking.
105
+
106
+ :::tip
107
+
108
+ When SSR is not enabled, only the information that can be obtained on the browser side is included.
109
+
110
+ :::
111
+
112
+ ```tsx
113
+ import { use } from 'react';
114
+ import { RuntimeContext } from '@modern-js/runtime';
115
+
116
+ function App() {
117
+ const runtimeContext = use(RuntimeContext);
118
+ const { request, response } = runtimeContext.requestContext || {};
119
+
120
+ // Access request information
121
+ const userAgent = request?.userAgent || request?.headers?.['user-agent'];
122
+ const url = request?.url;
123
+ const query = request?.query;
124
+ const params = request?.params;
125
+
126
+ // Server-side can set response headers
127
+ if (!runtimeContext.isBrowser && response) {
128
+ response.setHeader('X-Custom-Header', 'value');
129
+ response.status(200);
130
+ }
131
+
132
+ return (
133
+ <div>
134
+ <div>User Agent: {userAgent}</div>
135
+ <div>URL: {url}</div>
136
+ <div>Query: {JSON.stringify(query)}</div>
137
+ </div>
138
+ );
139
+ }
140
+ ```
141
+
142
+ ### Accessing Injected Global Data
143
+
144
+ Global data can be injected into `RuntimeContext` through the `onBeforeRender` hook of Runtime plugins:
145
+
146
+ ```tsx
147
+ import { use } from 'react';
148
+ import { RuntimeContext } from '@modern-js/runtime';
149
+
150
+ export default function MyComponent() {
151
+ const context = use(RuntimeContext);
152
+ const { message } = context;
153
+
154
+ return <div>{message}</div>;
155
+ }
156
+ ```