@modern-js/main-doc 2.0.0-beta.2 → 2.0.0-beta.4

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 (345) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/en/docusaurus-plugin-content-docs/current/apis/app/commands/inspect.md +0 -4
  3. package/en/docusaurus-plugin-content-docs/current/apis/app/commands/new.md +0 -2
  4. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/core/bootstrap.md +17 -3
  5. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/model/create-app.md +1 -1
  6. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/model/use-store.md +0 -22
  7. package/en/docusaurus-plugin-content-docs/current/components/init-app.md +42 -0
  8. package/en/docusaurus-plugin-content-docs/current/components/reduck-migration.md +1 -0
  9. package/en/docusaurus-plugin-content-docs/current/configure/app/dev/asset-prefix.md +1 -1
  10. package/en/docusaurus-plugin-content-docs/current/configure/app/dev/hmr.md +1 -1
  11. package/en/docusaurus-plugin-content-docs/current/configure/app/dev/https.md +1 -1
  12. package/en/docusaurus-plugin-content-docs/current/configure/app/dev/port.md +1 -1
  13. package/en/docusaurus-plugin-content-docs/current/configure/app/dev/progress-bar.md +1 -1
  14. package/en/docusaurus-plugin-content-docs/current/configure/app/dev/start-url.md +1 -1
  15. package/en/docusaurus-plugin-content-docs/current/configure/app/experiments/lazy-compilation.md +1 -1
  16. package/en/docusaurus-plugin-content-docs/current/configure/app/html/app-icon.md +1 -1
  17. package/en/docusaurus-plugin-content-docs/current/configure/app/html/crossorigin.md +1 -1
  18. package/en/docusaurus-plugin-content-docs/current/configure/app/html/disable-html-folder.md +1 -1
  19. package/en/docusaurus-plugin-content-docs/current/configure/app/html/favicon-by-entries.md +1 -1
  20. package/en/docusaurus-plugin-content-docs/current/configure/app/html/favicon.md +1 -1
  21. package/en/docusaurus-plugin-content-docs/current/configure/app/html/inject-by-entries.md +1 -1
  22. package/en/docusaurus-plugin-content-docs/current/configure/app/html/inject.md +1 -1
  23. package/en/docusaurus-plugin-content-docs/current/configure/app/html/meta-by-entries.md +1 -1
  24. package/en/docusaurus-plugin-content-docs/current/configure/app/html/meta.md +1 -1
  25. package/en/docusaurus-plugin-content-docs/current/configure/app/html/mount-id.md +1 -1
  26. package/en/docusaurus-plugin-content-docs/current/configure/app/html/template-by-entries.md +1 -1
  27. package/en/docusaurus-plugin-content-docs/current/configure/app/html/template-parameters-by-entries.md +1 -1
  28. package/en/docusaurus-plugin-content-docs/current/configure/app/html/template-parameters.md +1 -1
  29. package/en/docusaurus-plugin-content-docs/current/configure/app/html/template.md +1 -1
  30. package/en/docusaurus-plugin-content-docs/current/configure/app/html/title-by-entries.md +1 -1
  31. package/en/docusaurus-plugin-content-docs/current/configure/app/html/title.md +1 -1
  32. package/en/docusaurus-plugin-content-docs/current/configure/app/output/asset-prefix.md +1 -1
  33. package/en/docusaurus-plugin-content-docs/current/configure/app/output/assets-retry.md +1 -1
  34. package/en/docusaurus-plugin-content-docs/current/configure/app/output/charset.md +1 -1
  35. package/en/docusaurus-plugin-content-docs/current/configure/app/output/clean-dist-path.md +1 -1
  36. package/en/docusaurus-plugin-content-docs/current/configure/app/output/convert-to-rem.md +1 -1
  37. package/en/docusaurus-plugin-content-docs/current/configure/app/output/copy.md +1 -1
  38. package/en/docusaurus-plugin-content-docs/current/configure/app/output/css-module-local-ident-name.md +1 -1
  39. package/en/docusaurus-plugin-content-docs/current/configure/app/output/data-uri-limit.md +1 -1
  40. package/en/docusaurus-plugin-content-docs/current/configure/app/output/disable-css-extract.md +1 -1
  41. package/en/docusaurus-plugin-content-docs/current/configure/app/output/disable-css-module-extension.md +1 -1
  42. package/en/docusaurus-plugin-content-docs/current/configure/app/output/disable-filename-hash.md +1 -1
  43. package/en/docusaurus-plugin-content-docs/current/configure/app/output/disable-inline-runtime-chunk.md +1 -1
  44. package/en/docusaurus-plugin-content-docs/current/configure/app/output/disable-minimize.md +1 -1
  45. package/en/docusaurus-plugin-content-docs/current/configure/app/output/disable-source-map.md +1 -1
  46. package/en/docusaurus-plugin-content-docs/current/configure/app/output/disable-ts-checker.md +1 -1
  47. package/en/docusaurus-plugin-content-docs/current/configure/app/output/dist-path.md +1 -1
  48. package/en/docusaurus-plugin-content-docs/current/configure/app/output/enable-asset-fallback.md +1 -1
  49. package/en/docusaurus-plugin-content-docs/current/configure/app/output/enable-asset-manifest.md +1 -1
  50. package/en/docusaurus-plugin-content-docs/current/configure/app/output/enable-css-module-tsdeclaration.md +1 -1
  51. package/en/docusaurus-plugin-content-docs/current/configure/app/output/enable-inline-scripts.md +1 -1
  52. package/en/docusaurus-plugin-content-docs/current/configure/app/output/enable-inline-styles.md +1 -1
  53. package/en/docusaurus-plugin-content-docs/current/configure/app/output/enable-latest-decorators.md +1 -1
  54. package/en/docusaurus-plugin-content-docs/current/configure/app/output/externals.md +1 -1
  55. package/en/docusaurus-plugin-content-docs/current/configure/app/output/filename.md +1 -1
  56. package/en/docusaurus-plugin-content-docs/current/configure/app/output/legal-comments.md +1 -1
  57. package/en/docusaurus-plugin-content-docs/current/configure/app/output/override-browserslist.md +1 -1
  58. package/en/docusaurus-plugin-content-docs/current/configure/app/output/polyfill.md +1 -1
  59. package/en/docusaurus-plugin-content-docs/current/configure/app/output/svg-default-export.md +1 -1
  60. package/en/docusaurus-plugin-content-docs/current/configure/app/performance/build-cache.md +1 -1
  61. package/en/docusaurus-plugin-content-docs/current/configure/app/performance/bundle-analyze.md +1 -1
  62. package/en/docusaurus-plugin-content-docs/current/configure/app/performance/chunk-split.md +1 -1
  63. package/en/docusaurus-plugin-content-docs/current/configure/app/performance/print-file-size.md +1 -1
  64. package/en/docusaurus-plugin-content-docs/current/configure/app/performance/profile.md +1 -1
  65. package/en/docusaurus-plugin-content-docs/current/configure/app/performance/remove-console.md +1 -1
  66. package/en/docusaurus-plugin-content-docs/current/configure/app/performance/remove-moment-locale.md +1 -1
  67. package/en/docusaurus-plugin-content-docs/current/configure/app/plugins.md +1 -1
  68. package/en/docusaurus-plugin-content-docs/current/configure/app/security/sri.md +1 -1
  69. package/en/docusaurus-plugin-content-docs/current/configure/app/server/routes.md +2 -4
  70. package/en/docusaurus-plugin-content-docs/current/configure/app/source/alias.md +1 -1
  71. package/en/docusaurus-plugin-content-docs/current/configure/app/source/compile-js-data-uri.md +1 -1
  72. package/en/docusaurus-plugin-content-docs/current/configure/app/source/define.md +1 -1
  73. package/en/docusaurus-plugin-content-docs/current/configure/app/source/exclude.md +1 -1
  74. package/en/docusaurus-plugin-content-docs/current/configure/app/source/global-vars.md +1 -1
  75. package/en/docusaurus-plugin-content-docs/current/configure/app/source/include.md +1 -1
  76. package/en/docusaurus-plugin-content-docs/current/configure/app/source/module-scopes.md +1 -1
  77. package/en/docusaurus-plugin-content-docs/current/configure/app/source/pre-entry.md +1 -1
  78. package/en/docusaurus-plugin-content-docs/current/configure/app/source/resolve-extension-prefix.md +1 -1
  79. package/en/docusaurus-plugin-content-docs/current/configure/app/source/resolve-main-fields.md +1 -1
  80. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/autoprefixer.md +1 -1
  81. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/babel.md +1 -1
  82. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/css-extract.md +1 -1
  83. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/css-loader.md +1 -1
  84. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/dev-server.md +1 -1
  85. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/esbuild.md +16 -39
  86. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/html-plugin.md +1 -1
  87. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/inspector.md +1 -1
  88. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/less.md +1 -1
  89. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/minify-css.md +1 -1
  90. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/postcss.md +1 -1
  91. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/pug.md +1 -1
  92. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/sass.md +1 -1
  93. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/style-loader.md +1 -1
  94. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/styled-components.md +1 -1
  95. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/swc.md +42 -0
  96. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/terser.md +1 -1
  97. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/ts-checker.md +1 -1
  98. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/ts-loader.md +1 -1
  99. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/webpack-chain.md +1 -1
  100. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/webpack.md +1 -1
  101. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/builder.md +46 -0
  102. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/css/css-in-js.md +38 -0
  103. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/css/css-modules.md +86 -0
  104. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/css/less-sass.md +17 -0
  105. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/css/postcss.md +81 -0
  106. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/css/tailwindcss.md +95 -0
  107. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/data-fetch.md +66 -0
  108. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/routes.md +270 -0
  109. package/en/docusaurus-plugin-content-docs/current/guides/concept/entries.md +116 -0
  110. package/en/docusaurus-plugin-content-docs/current/guides/concept/lifecycle.md +15 -0
  111. package/en/docusaurus-plugin-content-docs/current/guides/get-started/quick-start.md +162 -0
  112. package/en/docusaurus-plugin-content-docs/current/guides/get-started/upgrade.md +78 -0
  113. package/{zh/tutorials/first-app → en/docusaurus-plugin-content-docs/current/guides}/overview.md +4 -4
  114. package/en/docusaurus-plugin-content-docs/current/tutorials/foundations/introduction.md +1 -1
  115. package/en/docusaurus-plugin-content-docs/current.json +29 -29
  116. package/package.json +3 -3
  117. package/scripts/config.ts +2 -2
  118. package/zh/apis/app/commands/inspect.md +0 -4
  119. package/zh/apis/app/commands/new.md +1 -3
  120. package/zh/apis/app/hooks/src/index_.md +6 -5
  121. package/zh/apis/app/runtime/app/_category_.json +1 -1
  122. package/zh/apis/app/runtime/bff/_category_.json +1 -1
  123. package/zh/apis/app/runtime/core/_category_.json +1 -1
  124. package/zh/apis/app/runtime/core/bootstrap.md +17 -3
  125. package/zh/apis/app/runtime/model/_category_.json +1 -1
  126. package/zh/apis/app/runtime/model/create-app.md +1 -1
  127. package/zh/apis/app/runtime/model/use-store.md +1 -23
  128. package/zh/apis/app/runtime/router/_category_.json +1 -1
  129. package/zh/apis/app/runtime/ssr/_category_.json +1 -1
  130. package/zh/apis/app/runtime/testing/_category_.json +1 -1
  131. package/zh/apis/app/runtime/utility/_category_.json +1 -1
  132. package/zh/apis/app/runtime/web-server/_category_.json +1 -1
  133. package/zh/components/debug-app.md +18 -0
  134. package/zh/components/global-proxy.md +28 -0
  135. package/zh/components/init-app.md +44 -0
  136. package/zh/components/prerequisites.md +19 -0
  137. package/zh/components/reduck-migration.md +1 -0
  138. package/zh/configure/app/dev/asset-prefix.md +1 -1
  139. package/zh/configure/app/dev/hmr.md +1 -1
  140. package/zh/configure/app/dev/https.md +1 -1
  141. package/zh/configure/app/dev/port.md +1 -1
  142. package/zh/configure/app/dev/progress-bar.md +1 -1
  143. package/zh/configure/app/dev/start-url.md +1 -1
  144. package/zh/configure/app/experiments/_category_.json +4 -0
  145. package/zh/configure/app/experiments/lazy-compilation.md +1 -1
  146. package/zh/configure/app/html/_category_.json +4 -0
  147. package/zh/configure/app/html/app-icon.md +1 -1
  148. package/zh/configure/app/html/crossorigin.md +1 -1
  149. package/zh/configure/app/html/disable-html-folder.md +1 -1
  150. package/zh/configure/app/html/favicon-by-entries.md +1 -1
  151. package/zh/configure/app/html/favicon.md +1 -1
  152. package/zh/configure/app/html/inject-by-entries.md +1 -1
  153. package/zh/configure/app/html/inject.md +1 -1
  154. package/zh/configure/app/html/meta-by-entries.md +1 -1
  155. package/zh/configure/app/html/meta.md +1 -1
  156. package/zh/configure/app/html/mount-id.md +1 -1
  157. package/zh/configure/app/html/template-by-entries.md +1 -1
  158. package/zh/configure/app/html/template-parameters-by-entries.md +1 -1
  159. package/zh/configure/app/html/template-parameters.md +1 -1
  160. package/zh/configure/app/html/template.md +1 -1
  161. package/zh/configure/app/html/title-by-entries.md +1 -1
  162. package/zh/configure/app/html/title.md +1 -1
  163. package/zh/configure/app/output/asset-prefix.md +1 -1
  164. package/zh/configure/app/output/assets-retry.md +1 -1
  165. package/zh/configure/app/output/charset.md +1 -1
  166. package/zh/configure/app/output/clean-dist-path.md +1 -1
  167. package/zh/configure/app/output/convert-to-rem.md +1 -1
  168. package/zh/configure/app/output/copy.md +1 -1
  169. package/zh/configure/app/output/css-module-local-ident-name.md +1 -1
  170. package/zh/configure/app/output/data-uri-limit.md +1 -1
  171. package/zh/configure/app/output/disable-css-extract.md +1 -1
  172. package/zh/configure/app/output/disable-css-module-extension.md +1 -1
  173. package/zh/configure/app/output/disable-filename-hash.md +1 -1
  174. package/zh/configure/app/output/disable-inline-runtime-chunk.md +1 -1
  175. package/zh/configure/app/output/disable-minimize.md +1 -1
  176. package/zh/configure/app/output/disable-source-map.md +1 -1
  177. package/zh/configure/app/output/disable-ts-checker.md +1 -1
  178. package/zh/configure/app/output/dist-path.md +1 -1
  179. package/zh/configure/app/output/enable-asset-fallback.md +1 -1
  180. package/zh/configure/app/output/enable-asset-manifest.md +1 -1
  181. package/zh/configure/app/output/enable-css-module-tsdeclaration.md +1 -1
  182. package/zh/configure/app/output/enable-inline-scripts.md +1 -1
  183. package/zh/configure/app/output/enable-inline-styles.md +1 -1
  184. package/zh/configure/app/output/enable-latest-decorators.md +1 -1
  185. package/zh/configure/app/output/externals.md +1 -1
  186. package/zh/configure/app/output/filename.md +1 -1
  187. package/zh/configure/app/output/legal-comments.md +1 -1
  188. package/zh/configure/app/output/override-browserslist.md +1 -1
  189. package/zh/configure/app/output/polyfill.md +1 -1
  190. package/zh/configure/app/output/ssg.md +118 -114
  191. package/zh/configure/app/output/svg-default-export.md +1 -1
  192. package/zh/configure/app/performance/_category_.json +4 -0
  193. package/zh/configure/app/performance/build-cache.md +1 -1
  194. package/zh/configure/app/performance/bundle-analyze.md +1 -1
  195. package/zh/configure/app/performance/chunk-split.md +1 -1
  196. package/zh/configure/app/performance/print-file-size.md +1 -1
  197. package/zh/configure/app/performance/profile.md +1 -1
  198. package/zh/configure/app/performance/remove-console.md +1 -1
  199. package/zh/configure/app/performance/remove-moment-locale.md +1 -1
  200. package/zh/configure/app/plugins.md +1 -1
  201. package/zh/configure/app/runtime/state.md +13 -0
  202. package/zh/configure/app/security/_category_.json +4 -0
  203. package/zh/configure/app/security/sri.md +1 -1
  204. package/zh/configure/app/server/routes.md +2 -4
  205. package/zh/configure/app/server/ssr.md +0 -2
  206. package/zh/configure/app/source/alias.md +1 -1
  207. package/zh/configure/app/source/compile-js-data-uri.md +1 -1
  208. package/zh/configure/app/source/define.md +1 -1
  209. package/zh/configure/app/source/exclude.md +1 -1
  210. package/zh/configure/app/source/global-vars.md +1 -1
  211. package/zh/configure/app/source/include.md +1 -1
  212. package/zh/configure/app/source/module-scopes.md +1 -1
  213. package/zh/configure/app/source/pre-entry.md +1 -1
  214. package/zh/configure/app/source/resolve-extension-prefix.md +1 -1
  215. package/zh/configure/app/source/resolve-main-fields.md +1 -1
  216. package/zh/configure/app/tools/autoprefixer.md +1 -1
  217. package/zh/configure/app/tools/babel.md +1 -1
  218. package/zh/configure/app/tools/css-extract.md +1 -1
  219. package/zh/configure/app/tools/css-loader.md +1 -1
  220. package/zh/configure/app/tools/dev-server.md +1 -1
  221. package/zh/configure/app/tools/esbuild.md +16 -39
  222. package/zh/configure/app/tools/html-plugin.md +1 -1
  223. package/zh/configure/app/tools/inspector.md +1 -1
  224. package/zh/configure/app/tools/less.md +1 -1
  225. package/zh/configure/app/tools/minify-css.md +1 -1
  226. package/zh/configure/app/tools/postcss.md +1 -1
  227. package/zh/configure/app/tools/pug.md +1 -1
  228. package/zh/configure/app/tools/sass.md +1 -1
  229. package/zh/configure/app/tools/style-loader.md +1 -1
  230. package/zh/configure/app/tools/styled-components.md +1 -1
  231. package/zh/configure/app/tools/swc.md +42 -0
  232. package/zh/configure/app/tools/terser.md +1 -1
  233. package/zh/configure/app/tools/ts-checker.md +1 -1
  234. package/zh/configure/app/tools/ts-loader.md +1 -1
  235. package/zh/configure/app/tools/webpack-chain.md +1 -1
  236. package/zh/configure/app/tools/webpack.md +1 -1
  237. package/zh/guides/advanced-features/bff/bff-proxy.md +1 -1
  238. package/zh/guides/advanced-features/compatibility.md +2 -38
  239. package/zh/guides/advanced-features/custom-app.md +23 -19
  240. package/zh/guides/advanced-features/ssg.md +73 -62
  241. package/zh/guides/advanced-features/ssr.md +142 -36
  242. package/zh/guides/advanced-features/testing.md +33 -1
  243. package/zh/guides/advanced-features/web-server.md +2 -2
  244. package/zh/guides/basic-features/builder.md +46 -0
  245. package/zh/guides/basic-features/css/_category_.json +1 -1
  246. package/zh/guides/basic-features/css/less-sass.md +1 -14
  247. package/zh/guides/basic-features/css/tailwindcss.md +2 -6
  248. package/zh/guides/basic-features/data-fetch.md +1 -1
  249. package/zh/guides/basic-features/env-vars.md +34 -0
  250. package/zh/guides/basic-features/html.md +182 -0
  251. package/zh/guides/basic-features/mock.md +3 -9
  252. package/zh/guides/basic-features/proxy.md +2 -27
  253. package/zh/guides/basic-features/routes.md +32 -35
  254. package/zh/guides/concept/entries.md +8 -9
  255. package/zh/guides/get-started/quick-start.md +6 -78
  256. package/zh/guides/get-started/upgrade.md +8 -8
  257. package/zh/guides/topic-detail/framework-plugin/extend.md +3 -4
  258. package/zh/{apis/app/runtime/plugin/hook-api.md → guides/topic-detail/framework-plugin/hook-list.md} +42 -135
  259. package/zh/{apis/app/runtime/plugin → guides/topic-detail/framework-plugin}/hook.md +2 -3
  260. package/zh/guides/topic-detail/framework-plugin/implement.md +21 -10
  261. package/zh/guides/topic-detail/framework-plugin/introduction.md +49 -0
  262. package/{en/docusaurus-plugin-content-docs/current/apis/app/runtime/plugin → zh/guides/topic-detail/framework-plugin}/plugin-api.md +3 -4
  263. package/zh/guides/topic-detail/framework-plugin/relationship.md +2 -3
  264. package/zh/guides/topic-detail/model/quick-start.md +5 -1
  265. package/zh/guides/topic-detail/model/test-model.md +2 -2
  266. package/zh/guides/topic-detail/monorepo/intro.md +1 -1
  267. package/zh/guides/troubleshooting/dependencies.md +0 -69
  268. package/zh/tutorials/first-app/_category_.json +1 -1
  269. package/zh/tutorials/first-app/c01-start.md +94 -0
  270. package/zh/tutorials/first-app/c02-component.md +56 -0
  271. package/zh/tutorials/first-app/c03-css.md +305 -0
  272. package/zh/tutorials/first-app/c04-routes.md +169 -0
  273. package/zh/tutorials/first-app/c05-loader.md +82 -0
  274. package/zh/tutorials/first-app/c06-model.md +256 -0
  275. package/zh/tutorials/first-app/c07-container.md +268 -0
  276. package/zh/tutorials/first-app/c08-entries.md +134 -0
  277. package/zh/tutorials/foundations/introduction.md +2 -2
  278. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/default-alias.md +0 -25
  279. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/plugin/_category_.json +0 -4
  280. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/plugin/abstract.md +0 -26
  281. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/plugin/hook-api.md +0 -896
  282. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/plugin/hook.md +0 -170
  283. package/en/docusaurus-plugin-content-docs/current/configure/app/output/enable-modern-mode.md +0 -34
  284. package/zh/apis/app/runtime/default-alias.md +0 -23
  285. package/zh/apis/app/runtime/plugin/_category_.json +0 -4
  286. package/zh/apis/app/runtime/plugin/abstract.md +0 -26
  287. package/zh/apis/app/runtime/plugin/plugin-api.md +0 -117
  288. package/zh/apis/generator/overview.md +0 -32
  289. package/zh/configure/app/output/enable-modern-mode.md +0 -34
  290. package/zh/guides/basic-features/image.md +0 -43
  291. package/zh/guides/topic-detail/compile-speed.md +0 -182
  292. package/zh/guides/topic-detail/framework-plugin/abstract.md +0 -27
  293. package/zh/guides/topic-detail/monorepo/deploy.md +0 -43
  294. package/zh/guides/troubleshooting/compile.md +0 -379
  295. package/zh/tutorials/first-app/c01-getting-started/1.1-prerequisites.md +0 -25
  296. package/zh/tutorials/first-app/c01-getting-started/1.2-minimal-mwa.md +0 -118
  297. package/zh/tutorials/first-app/c01-getting-started/1.3-dev-command.md +0 -29
  298. package/zh/tutorials/first-app/c01-getting-started/1.4-enable-ssr.md +0 -44
  299. package/zh/tutorials/first-app/c01-getting-started/1.5-start-command.md +0 -18
  300. package/zh/tutorials/first-app/c01-getting-started/1.6-create-repo.md +0 -31
  301. package/zh/tutorials/first-app/c01-getting-started/_category_.json +0 -3
  302. package/zh/tutorials/first-app/c02-generator-and-studio/2.1-generator.md +0 -79
  303. package/zh/tutorials/first-app/c02-generator-and-studio/2.2-boilerplates.md +0 -36
  304. package/zh/tutorials/first-app/c02-generator-and-studio/2.3-configuration.md +0 -21
  305. package/zh/tutorials/first-app/c02-generator-and-studio/_category_.json +0 -3
  306. package/zh/tutorials/first-app/c03-ide/3.1-setting-up.md +0 -55
  307. package/zh/tutorials/first-app/c03-ide/3.2-hints-in-ide.md +0 -66
  308. package/zh/tutorials/first-app/c03-ide/3.3-autofix-in-ide.md +0 -11
  309. package/zh/tutorials/first-app/c03-ide/3.4-autofix-in-cli.md +0 -63
  310. package/zh/tutorials/first-app/c03-ide/_category_.json +0 -3
  311. package/zh/tutorials/first-app/c04-es6-plus-and-ts/4.1-use-es6-plus.md +0 -67
  312. package/zh/tutorials/first-app/c04-es6-plus-and-ts/4.2-use-typescript.md +0 -111
  313. package/zh/tutorials/first-app/c04-es6-plus-and-ts/4.3-compatibility.md +0 -67
  314. package/zh/tutorials/first-app/c04-es6-plus-and-ts/_category_.json +0 -3
  315. package/zh/tutorials/first-app/c05-component/5.1-use-ui-library.md +0 -68
  316. package/zh/tutorials/first-app/c05-component/5.2-use-standalone-component.md +0 -92
  317. package/zh/tutorials/first-app/c05-component/_category_.json +0 -3
  318. package/zh/tutorials/first-app/c06-css-and-component/6.1-css-in-js.md +0 -110
  319. package/zh/tutorials/first-app/c06-css-and-component/6.2-utility-class.md +0 -148
  320. package/zh/tutorials/first-app/c06-css-and-component/6.3-postcss.md +0 -84
  321. package/zh/tutorials/first-app/c06-css-and-component/6.4-design-system.md +0 -83
  322. package/zh/tutorials/first-app/c06-css-and-component/6.5-storybook.md +0 -77
  323. package/zh/tutorials/first-app/c06-css-and-component/6.6-testing.md +0 -113
  324. package/zh/tutorials/first-app/c06-css-and-component/_category_.json +0 -3
  325. package/zh/tutorials/first-app/c07-app-entry/7.1-intro.md +0 -64
  326. package/zh/tutorials/first-app/c07-app-entry/7.2-add-entry-in-cli.md +0 -100
  327. package/zh/tutorials/first-app/c07-app-entry/7.3-manage-entries-by-hand.md +0 -74
  328. package/zh/tutorials/first-app/c07-app-entry/_category_.json +0 -3
  329. package/zh/tutorials/first-app/c08-client-side-routing/8.1-code-based-routing.md +0 -153
  330. package/zh/tutorials/first-app/c08-client-side-routing/8.2-file-based-routing.md +0 -310
  331. package/zh/tutorials/first-app/c08-client-side-routing/_category_.json +0 -3
  332. package/zh/tutorials/first-app/c09-bff/9.1-serverless.md +0 -30
  333. package/zh/tutorials/first-app/c09-bff/9.2-enable-bff.md +0 -93
  334. package/zh/tutorials/first-app/c09-bff/9.3-fetch-bff.md +0 -205
  335. package/zh/tutorials/first-app/c09-bff/_category_.json +0 -3
  336. package/zh/tutorials/first-app/c10-model/10.1-application-architecture.md +0 -23
  337. package/zh/tutorials/first-app/c10-model/10.2-add-model.md +0 -185
  338. package/zh/tutorials/first-app/c10-model/10.3-use-model.md +0 -54
  339. package/zh/tutorials/first-app/c10-model/10.4-testing.md +0 -69
  340. package/zh/tutorials/first-app/c10-model/_category_.json +0 -3
  341. package/zh/tutorials/first-app/c11-container/11.1-use-model-with-app-state.md +0 -274
  342. package/zh/tutorials/first-app/c11-container/11.2-add-container.md +0 -106
  343. package/zh/tutorials/first-app/c11-container/11.3-use-loader.md +0 -61
  344. package/zh/tutorials/first-app/c11-container/11.4-testing.md +0 -56
  345. package/zh/tutorials/first-app/c11-container/_category_.json +0 -3
@@ -1,13 +1,13 @@
1
1
  ---
2
- title: 服务端渲染
2
+ title: 服务端渲染(SSR)
3
3
  sidebar_position: 3
4
4
  ---
5
5
 
6
- 在 Modern.js 中,和 Web Server 一样,SSR 服务与应用也是一体的,开发者无需为 SSR 编写复杂的服务端逻辑。同样,开发者也无需关心 SSR 服务的运维,Modern.js 拥有完备的 SSR 降级策略,保证页面能够安全运行。
6
+ 在 Modern.js 中,SSR 也是开箱即用的。开发者无需为 SSR 编写复杂的服务端逻辑,也无需关心 SSR 的运维,或是创建单独的服务。Modern.js 拥有完备的 SSR 降级策略,保证页面能够安全运行。
7
7
 
8
- Modern.js 启用 SSR 非常简单,只需要设置 [`server.ssr`](/docs/configure/app/server/ssr) 为 `true` 即可:
8
+ 启用 SSR 非常简单,只需要设置 [`server.ssr`](/docs/configure/app/server/ssr) 为 `true` 即可:
9
9
 
10
- ```json title="package.json"
10
+ ```json
11
11
  {
12
12
  "server": {
13
13
  "ssr": true
@@ -15,14 +15,25 @@ Modern.js 启用 SSR 非常简单,只需要设置 [`server.ssr`](/docs/configu
15
15
  }
16
16
  ```
17
17
 
18
- ## SSR 时的数据请求
18
+ ## SSR 时的数据获取
19
19
 
20
- Modern.js 中提供了 `useLoader` Hooks API,可以在某些场景下代替 `useEffect` 进行数据请求。这是一个同构的 API,直接使用它即可完成在服务端的数据获取:
20
+ Modern.js 中提供了 Data Loader,方便开发者在 SSR、CSR 下同构的获取数据。每个路由模块,如 `layout.tsx` `page.tsx` 都可以定义自己的 Data Loader:
21
21
 
22
- ```ts
23
- const { data, loading, error } = useLoader(() => {
24
- return loadData()
25
- });
22
+ ```ts title="src/routes/page.tsx"
23
+ export const loader = () => {
24
+ return {
25
+ message: 'Hello World',
26
+ };
27
+ };
28
+ ```
29
+
30
+ 在组件中可以通过 Hooks API 的方式获取 `loader` 函数返回的数据:
31
+
32
+ ```tsx
33
+ export default () => {
34
+ const data = useLoaderData();
35
+ return <div>{data.message}</div>;
36
+ }
26
37
  ```
27
38
 
28
39
  Modern.js 打破传统的 SSR 开发模式,提供了用户无感的 SSR 开发体验。并且提供了优雅的降级处理,一旦 SSR 请求失败,会自动降级在浏览器端重新发起请求。
@@ -30,16 +41,14 @@ Modern.js 打破传统的 SSR 开发模式,提供了用户无感的 SSR 开发
30
41
  不过,开发者仍然需要关注数据的兜底处理,例如 `null` 值或不符合预期的数据返回。避免在 SSR 时产生 React 渲染错误或是返回凌乱的渲染结果。
31
42
 
32
43
  :::info 补充信息
33
- 关于 `useLoader` 的详细介绍可以参考[这里](/docs/apis/app/runtime/core/use-loader)。
44
+ 使用 Data Loader 时,数据获取发生在渲染前,Modern.js 也仍然支持在组件渲染时获取数据。更多相关内容可以查看[数据获取](/docs/guides/basic-features/data-fetch)。
34
45
  :::
35
46
 
36
47
  ## 保持渲染一致
37
48
 
38
- 代码中区分 SSR CSR 渲染,通常需要根据当前的运行容器环境特征做判断,例如 [UA](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) 信息或是某个 Native 模块。如果处理不够仔细,此时很有可能出现不符合预期的渲染结果。
39
-
40
- 这里通过一个例子,演示当 SSR 与 CSR 渲染不一致时出现的问题。
49
+ 有些业务中,通常需要根据当前的运行容器环境特征做不同的 UI 展示,例如 [UA](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) 信息。如果处理不够仔细,此时很有可能出现不符合预期的渲染结果。
41
50
 
42
- 在组件中添加以下代码:
51
+ 这里通过一个例子,演示当 SSR 与 CSR 渲染不一致时出现的问题,在组件中添加以下代码:
43
52
 
44
53
  ```tsx
45
54
  {
@@ -57,10 +66,10 @@ Modern.js 打破传统的 SSR 开发模式,提供了用户无感的 SSR 开发
57
66
  Warning: Expected server HTML to contain a matching <div> in <div>.
58
67
  ```
59
68
 
60
- 这是因为 React 在客户端执行注水逻辑时,发现渲染结果与 SSR 渲染结果不一致造成的。虽然页面表现正常,但在复杂应用中,很有可能因此出现 DOM 层级混乱、样式混乱等问题。
69
+ 这是 React 在客户端执行 hydrate 逻辑时,发现渲染结果与 SSR 渲染结果不一致造成的。虽然页面表现正常,但在复杂应用中,很有可能因此出现 DOM 层级混乱、样式混乱等问题。
61
70
 
62
71
  :::info 注
63
- 关于注水逻辑请参考[这里](https://reactjs.org/docs/react-dom.html#hydrate)。
72
+ 关于 hydrate (注水)逻辑请参考[这里](https://reactjs.org/docs/react-dom.html#hydrate)。
64
73
  :::
65
74
 
66
75
  应用需要保持 SSR 与 CSR 渲染结果的一致性,如果存在不一致的情况,说明这部分内容无需在 SSR 中进行渲染。Modern.js 为这类在 SSR 中不需要渲染的内容提供 [`<NoSSR>` 工具组件](/docs/apis/app/runtime/core/use-runtime-context):
@@ -131,29 +140,25 @@ SPR 利用预渲染与缓存技术,为 SSR 页面提供静态 Web 的响应性
131
140
 
132
141
  在 Modern.js 中使用 SPR 非常简单,只需要在组件中新增 `PreRender` 组件,该组件所在的页面就会自动开启 SPR。
133
142
 
134
- 这里模拟一个使用 `useLoader` API 的组件,`useLoader` 中的请求需要消耗 2s 时间。
143
+ 这里模拟一个使用 `useLoaderData` API 的组件,Data Loader 中的请求需要消耗 2s 时间。
135
144
 
136
145
  ```jsx
137
- import { useLoader } from '@modern-js/runtime';
146
+ import { useLoaderData } from '@modern-js/runtime/router';
147
+
148
+ export const loader = async () => {
149
+ await new Promise((resolve, reject) => {
150
+ setTimeout(() => {
151
+ resolve(null);
152
+ }, 2000);
153
+ });
154
+
155
+ return {
156
+ message: 'Hello Modern.js',
157
+ };
158
+ };
138
159
 
139
160
  export default () => {
140
- const { data } = useLoader(
141
- async () => {
142
- await new Promise((resolve, reject) => {
143
- setTimeout(() => {
144
- resolve(null);
145
- }, 2000);
146
- });
147
-
148
- return {
149
- message: 'Hello Modern.js',
150
- };
151
- },
152
- {
153
- params: 'foo',
154
- },
155
- );
156
-
161
+ const data = useLoaderData();
157
162
  return <div>{data?.message}</div>;
158
163
  };
159
164
  ```
@@ -184,3 +189,104 @@ import { PreRender } from '@modern-js/runtime/ssr';
184
189
  :::info 补充信息
185
190
  `PreRender` 的详细使用可以参考[这里](/docs/apis/app/runtime/ssr/pre-render)。
186
191
  :::
192
+
193
+ ## Treeshaking
194
+
195
+ 开启 SSR 时,Modern.js 会用相同的入口,构建出 SSR Bundle 和 CSR Bundle 两份产物。因此,在 SSR Bundle 中存在 Web API,或是在 CSR Bundle 中存在 Node API 时,都可能导致运行出错。
196
+
197
+ 在组件中引入 Web API,通常情况下是要做一些全局监听,或是获取浏览器相关的数据,例如:
198
+
199
+ ```tsx
200
+ document.addEventListener('load', () => {
201
+ console.log('document load');
202
+ });
203
+ const App = () => {
204
+ return <div>Hello World</div>
205
+ }
206
+ export default App;
207
+ ```
208
+
209
+ 在组件文件中引入 Node API,通常情况下是因为使用了 Data Loader,例如:
210
+
211
+ ```ts
212
+ import fse from 'fs-extra';
213
+ export const loader = () => {
214
+ const file = fse.readFileSync('./myfile');
215
+ return {
216
+ ...
217
+ };
218
+ };
219
+ ```
220
+
221
+ ### 环境变量区分
222
+
223
+ 对于第一种情况,我们可以直接使用 Modern.js 内置的环境变量 `MODERN_TARGET` 进行判断,在构建时删除无用代码:
224
+
225
+ ```ts
226
+ if (process.env.MODERN_TARGET === 'browser') {
227
+ document.addEventListener('load', () => {
228
+ console.log('document load');
229
+ });
230
+ }
231
+ ```
232
+
233
+ :::note
234
+ 更多内容可以查看[环境变量](/docs/guides/basic-features/env-vars)。
235
+ :::
236
+
237
+ ### 文件后缀区分
238
+
239
+ 但例如第二种情况,Treeshaking 的方式并不能保证代码被完全分离。Modern.js 也支持通过 `.node.` 后缀的文件来区分 SSR Bundle 和 CSR Bundle 产物的打包文件。
240
+
241
+ 例如在代码中引入了 `fs-extra`,这时候直接引用到组件中,会造成 CSR 加载报错。可以创建同名的 `.ts` 和 `.node.ts` 文件做一层代理:
242
+
243
+ ```ts title="compat.ts"
244
+ export { readFileSync } from 'fs-extra';
245
+ ```
246
+
247
+ ```ts title="compat.node.ts"
248
+ export const readFileSync: any = () => {};
249
+ ```
250
+
251
+ 在文件中直接引入 `./compat`,此时 SSR 环境下会优先使用 `.node.ts` 后缀的文件,CSR 环境下会使用 `.ts` 后缀的文件。
252
+
253
+ ```ts title="App.tsx"
254
+ import { readFileSync } from './compat'
255
+
256
+ export const loader = () => {
257
+ const file = readFileSync('./myfile');
258
+ return {
259
+ ...
260
+ };
261
+ };
262
+ ```
263
+
264
+ ### 独立文件
265
+
266
+ 上述两种方式,都会为开发者带来一些心智负担。Modern.js 基于[嵌套路由](/docs/guides/basic-features/routes)开发设计了[更简单的方案](/docs/guides/basic-features/data-fetch)来分离 CSR 和 SSR 的代码。
267
+
268
+ ## 接口请求
269
+
270
+ 在 SSR 中发起接口请求时,开发者有时自己封装了同构的请求工具。部分接口需要传递用户 Cookie,开发者可以通过 [`useRuntimeContext`](/docs/guides/basic-features/data-fetch#route-loader) API 获取到请求头来实现。
271
+
272
+ 需要注意的是,此时获取到的是 HTML 请求的请求头,不一定适用于接口请求,因此**千万不能**透传所有请求头。并且,一些后端接口,或是通用网关,会根据请求头中的信息做校验,全量透传容易出现各种难以排查的问题,推荐**按需透传**。
273
+
274
+ 如果实在需要透传所有请求头,请务必过滤 `host` 字段。
275
+
276
+ ## 流式渲染
277
+
278
+ Modern.js 支持了 React 18 的流式渲染,可以通过如下配置修改默认的渲染模式:
279
+
280
+ ```json
281
+ {
282
+ "server": {
283
+ "ssr": {
284
+ "mode": "stream"
285
+ }
286
+ }
287
+ }
288
+ ```
289
+
290
+ :::note
291
+ 目前 Modern.js 内置的数据获取方式还未支持流式渲染,如迫切需要开发者可以按照 React Stream SSR 的 Demo 自建。
292
+ :::
@@ -1,4 +1,36 @@
1
1
  ---
2
- title: 测试
3
2
  sidebar_position: 10
4
3
  ---
4
+
5
+ # 测试
6
+
7
+ Modern.js 默认继承了 [Jest](https://jestjs.io/) 的测试能力。
8
+
9
+ 我们首先需要执行 `pnpm run new` 启用「单元测试 / 集成测试」功能:
10
+
11
+ ```
12
+ ? 请选择你想要的操作: 启用可选功能
13
+ ? 启用可选功能: 启用「单元测试 / 集成测试」功能
14
+ ```
15
+
16
+ 执行上述命令后,`package.json` 中将会自动生成 `"test": "modern test"` 命令。
17
+
18
+ ## 测试文件
19
+
20
+ Modern.js 默认识别的测试文件路径为: `<rootDir>/src/**/*.test.[jt]s?(x)` 和 `<rootDir>/tests/**/*.test.[jt]s?(x)`。
21
+
22
+ 如果你需要自定义 test 目录,可通过 [tools.jest](/docs/configure/app/tools/jest) 进行配置。
23
+
24
+ ## 使用姿势
25
+
26
+ Modern.js test 支持使用 [testing-library](https://testing-library.com/docs/) 相关包 API,可直接通过 `@modern-js/runtime/testing` 进行导入:
27
+
28
+ ```
29
+ import { render, screen } from '@modern-js/runtime/testing';
30
+ ```
31
+
32
+ 其他 Modern.js 支持的 testing API 可参考[这里](/docs/apis/app/runtime/testing/cleanup)。
33
+
34
+ ## transform
35
+
36
+ Modern.js 测试默认使用 [babel-jest](https://www.npmjs.com/package/babel-jest) 进行源码编译,如果你需要使用 [ts-jest](https://github.com/kulshekhar/ts-jest),可以通过 [testing.transform](/docs/configure/app/testing/transformer) 进行配置。
@@ -12,8 +12,8 @@ Modern.js 作为以客户端为中心的开发框架,对服务端的定制能
12
12
  在项目根目录执行 `pnpm run new` 命令,按照如下选择,开启「自定义 Web Serve」功能:
13
13
 
14
14
  ```bash
15
- ? 请选择你想要的操作: 创建工程元素
16
- ? 创建工程元素: 新建「自定义 Web Server」源码目录
15
+ ? 请选择你想要的操作 创建工程元素
16
+ ? 创建工程元素 新建「自定义 Web Server」源码目录
17
17
  ```
18
18
 
19
19
  执行命令后,项目目录下会新建 `server/index.ts` 文件,自定义逻辑在这个文件中编写。
@@ -0,0 +1,46 @@
1
+ ---
2
+ title: 构建能力
3
+ sidebar_position: 2
4
+ ---
5
+
6
+ **Modern.js 的构建能力由 [Modern.js Builder](https://modernjs.dev/builder) 提供。**
7
+
8
+ Modern.js Builder 是 Modern.js 体系的核心组件之一,它是一个面向现代 Web 开发场景的构建引擎,可以脱离 Modern.js 被独立使用。Modern.js Builder 同时支持 webpack 和 rspack 等多种打包工具,默认情况下使用最成熟的 webpack 进行打包。
9
+
10
+ ## 构建架构
11
+
12
+ 从构建的角度看,Modern.js 分为三层架构,从上到下依次是:
13
+
14
+ - 上层研发框架:Modern.js。
15
+ - 通用构建引擎:Modern.js Builder。
16
+ - 底层打包工具:webpack 和 rspack。
17
+
18
+ <img src="https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/builder-layers-1117.png" style={{ maxWidth: '540px' }} />
19
+
20
+ ## 构建文档
21
+
22
+ 由于 Modern.js Builder 是一个可独立使用的模块,我们为它提供了单独的文档,文档地址为:[modernjs.dev/builder](https://modernjs.dev/builder)。
23
+
24
+ 在该文档中,你可以了解到 Modern.js Builder 的详细介绍,同时也可以找到各个构建能力的完整使用指南。当你遇到构建方面的需求或问题时,建议你优先阅读 Modern.js Builder 文档来解决。
25
+
26
+ ## 构建配置
27
+
28
+ Modern.js 的配置继承自 Modern.js Builder,因此你可以在 Modern.js 中使用 Modern.js Builder 提供的所有构建配置。
29
+
30
+ 以 Modern.js Builder 的 `html.title` 配置项为例,你可以直接在 `modern.config.ts` 文件中使用该配置项,它会被自动传递给 Modern.js Builder。
31
+
32
+ ```ts title="modern.config.js"
33
+ export default defineConfig({
34
+ html: {
35
+ title: 'example',
36
+ },
37
+ });
38
+ ```
39
+
40
+ 关于构建配置的详细说明,请参考 [「Modern.js Builder - Builder 配置」](https://modernjs.dev/builder/zh/guide/basic/builder-config.html)。
41
+
42
+ ## 构建能力
43
+
44
+ Modern.js Builder 提供了丰富的构建能力,包括 JavaScript 编译、CSS 编译、静态资源处理、代码热更新、代码压缩、TS 类型检查等几十种能力。
45
+
46
+ 我们推荐你阅读 [「Modern.js Builder - 功能导航」](https://modernjs.dev/builder/zh/guide/features.html) 来了解 Modern.js Builder 提供的所有构建能力。
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "label": "CSS 开发方案",
3
- "position": 3
3
+ "position": 4
4
4
  }
@@ -4,20 +4,7 @@ sidebar_position: 4
4
4
 
5
5
  # Less 和 Sass
6
6
 
7
- [Less](https://lesscss.org/) 和 [Sass](https://sass-lang.com/) 是常用的两种 CSS 预处理器,Modern.js 通过插件来提供 Less 和 Sass 编译能力的支持。
8
-
9
- ## 启用 Less 或 Sass
10
-
11
- 为了使用 Less 或 Sass 编译能力,我们需要先启用对应的功能。
12
-
13
- 以 Less 为例,在当前项目根目录执行 new 命令, 并选择 **启用 Less 支持** 即可。
14
-
15
- ```bash
16
- $ pnpm run new
17
- ? 请选择你想要的操作
18
- ? 启用可选功能 (Use arrow keys)
19
- ❯ 启用 Less 支持
20
- ```
7
+ [Less](https://lesscss.org/) 和 [Sass](https://sass-lang.com/) 是常用的两种 CSS 预处理器,Modern.js 内置了 Less 和 Sass 编译能力的支持。
21
8
 
22
9
  ## 自定义配置
23
10
 
@@ -9,8 +9,8 @@ sidebar_position: 2
9
9
  按照如下进行选择:
10
10
 
11
11
  ```bash
12
- ? 请选择你想要的操作: 启用可选功能
13
- ? 启用可选功能: 启用 Tailwind CSS 支持
12
+ ? 请选择你想要的操作 启用可选功能
13
+ ? 启用可选功能 启用 Tailwind CSS 支持
14
14
  ```
15
15
 
16
16
  使用时在入口的根组件(如 `src/App.jsx`)添加如下代码:
@@ -68,11 +68,7 @@ export default defineConfig({
68
68
  在开启「Tailwind CSS 支持」的功能后,首先需要安装 [`Twin`](https://github.com/ben-rogerson/twin.macro) 依赖:
69
69
 
70
70
  ``` bash
71
- # package manager is `pnpm`
72
71
  pnpm add twin.macro -D
73
-
74
- # package manager is `yarn`
75
- yarn add twin.macro -D
76
72
  ```
77
73
 
78
74
  当项目安装 `twin.macro` 依赖后,Modern.js 会检测到该依赖并对内置的 `babel-plugin-macro` 增加 `twin.macro` 相关的配置。因此在安装完依赖后,无需手动配置。下面是一个简单使用 `twin.macro` 的示例:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: 数据获取
3
- sidebar_position: 2
3
+ sidebar_position: 3
4
4
  ---
5
5
 
6
6
  Modern.js 中提供了开箱即用的数据获取能力,开发者可以通过这些 API,在 CSR 和 SSR 环境同构的进行开发。
@@ -23,6 +23,40 @@ Modern.js 提供了对环境变量的支持,包含内置的环境变量和自
23
23
  MODERN_ENV 的优先级高于 NODE_ENV。
24
24
  :::
25
25
 
26
+ ### MODERN_TARGET
27
+
28
+ 使用 `@modern-js/runtime` 时会自动注入,用于区分 SSR 与 CSR 环境。开发者可以自行在代码中判断,构建时会默认移除 dead code。
29
+
30
+ ```ts title="App.tsx"
31
+ function App() {
32
+ if (process.env.MODERN_TARGET === 'browser') {
33
+ console.log(window.innerHeight);
34
+ };
35
+ };
36
+ ```
37
+
38
+ 开发环境打包后,可以看到 SSR 产物和 CSR 产物如下:
39
+
40
+ ```js title="dist/bundles/main.js"
41
+ function App() {
42
+ if (false) {}
43
+ }
44
+ ```
45
+
46
+ ```js title="dist/static/main.js"
47
+ function App() {
48
+ if (true) {
49
+ console.log(window.innerHeight);
50
+ }
51
+ }
52
+ ```
53
+
54
+ :::note
55
+ 在生产环境,会将 dead code 移除,例如上述 `if` 语句。
56
+ :::
57
+
58
+ 这种方式可以针对不同客户端提供不同的产物,保证代码体积最小化。也能方便处理不同环境下,代码中的一些副作用,
59
+
26
60
  ## 自定义环境变量
27
61
 
28
62
  环境变量支持通过 `shell` 和 `.env` 文件两种方式指定。
@@ -3,6 +3,188 @@ title: HTML 模板
3
3
  sidebar_position: 9
4
4
  ---
5
5
 
6
+ Modern.js 提供了 `jsx` 和 `ejs` 两种方式用于自定义 html 模板。推荐使用 `jsx` 语法,让写模板跟写组件一样丝滑。
7
+
8
+ ## jsx
9
+
10
+ ### 使用说明
11
+
12
+ #### 引入
13
+ ```tsx
14
+ import {
15
+ Html,
16
+ Root,
17
+ Head,
18
+ DocumentContext,
19
+ Body,
20
+ } from '@modern-js/runtime/document';
21
+ ```
22
+
23
+ #### 导出
24
+ ```tsx
25
+ export default Document() {}
26
+
27
+ ```
28
+
29
+ #### 文件位置
30
+
31
+ Document 文件,默认在应用根目录下:
32
+
33
+ ```bash
34
+ .
35
+ ├── src
36
+ │ ├── modern-app-env.d.ts
37
+ │ ├── myapp
38
+ │ │ └── routes
39
+ │ │ ├── index.css
40
+ │ │ ├── layout.tsx
41
+ │ │ ├── Document.tsx
42
+ │ │ └── page.tsx
43
+ │ ├── new-entry
44
+ │ │ └── routes
45
+ │ │ ├── index.css
46
+ │ │ ├── layout.tsx
47
+ │ │ ├── Document.tsx
48
+ │ │ └── page.tsx
49
+ │ └── Document.tsx
50
+ ├── modern.config.ts
51
+ ├── package.json
52
+ ├── pnpm-lock.yaml
53
+ ├── README.md
54
+ └── tsconfig.json
55
+ ```
56
+
57
+ 多 entry 场景构建时,优先 entry 的根目录下的 Docoument.tsx 文件。如果当前 entry 没有 Document.tsx 文件,则会查找根目录下的 Document.tsx 文件。
58
+ 如果还没有,则会 fallback 到 `html 模板` 的逻辑。
59
+
60
+ #### 子组件
61
+
62
+ Document 模板共提供了 `Html`、`Root` `Head` `Body` 渲染页面的组件,以及 `DocumentContext` 等提供
63
+ 分别渲染:
64
+ - `Html`: 提供 html 原生 dom。并计算出 `DocumentStructrueContext` 的值,将 `Html` 的结构传递给子组件,判断其它子组件是否默认渲染。
65
+
66
+ - `Body`: 渲染生成 `body` 节点。其子元素包含 `Root` 组件。支持其它元素同时作为子元素,例如页脚。
67
+
68
+ - `Root`: 渲染的根节点 `<div id='root'></div>`。默认根节点的 `id = 'root'`。可以设置 props.rootId 来更改 id 属性。子元素,也会被渲染进 DOM 里,随着 react 渲染完成,会替换掉,一般用来实现全局 loading。
69
+
70
+ - `Head`: 渲染生成 `head` 节点。会自动填充 meta 元素,以及 `Scripts` 组件。
71
+
72
+ - `Scripts`: 将构建产生的 script 标签渲染到该位置。用于调整构建产物的位置,默认放在 `Head` 组件里,用于
73
+
74
+ `Html` 组件中,`Head` 和 `Body` 是必须要存在的,其它组件可以按需选择合适的组件进行组装。
75
+
76
+ #### 模板参数
77
+
78
+ 因为是 JSX 形式,Document.tsx 里,可以比较自由的在组件内使用各种变量去赋值给各种自定义组件。
79
+ 但同时 Document 自身也提供了 `DocumentContext` context 来提供一些配置、环境参数,方便直接获取。主要以下参数:
80
+
81
+ - `processEnv`:提供构建时的 `process.env`
82
+ - `config`: Modern.js 项目的配置。目前只暴露出 output 相关的配置
83
+ - `entryName`: 当前的 entry 名。
84
+ - `templateParams`: html 模板的参数,由 builder 提供。对应 [html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin) 的 `templateParameters` 配置项最终获取到的结果。不建议使用!
85
+
86
+
87
+ ### 示例
88
+
89
+ ```tsx
90
+ import React, { useContext } from 'react';
91
+ import {
92
+ Html,
93
+ Root,
94
+ Head,
95
+ DocumentContext,
96
+ Body,
97
+ } from '@modern-js/runtime/document';
98
+ import Script from '@/components/Script';
99
+
100
+ // 默认导出
101
+ export default function Document(): React.ReactElement {
102
+ // DocumentContext 提供一些构建时的参数
103
+ const {
104
+ config: { output: htmlConfig },
105
+ entryName,
106
+ templateParams,
107
+ } = useContext(DocumentContext);
108
+
109
+ return (
110
+ <Html>
111
+ <Head>
112
+ // Head 组件支持自定义子元素。包括 link, script
113
+ <link href="https://modernjs.dev">Modern.js</link>
114
+ <script
115
+ // inline script 的脚本需要如下处理
116
+ dangerouslySetInnerHTML={{
117
+ __html: `window.b = 22`,
118
+ }}
119
+ ></script>
120
+ </Head>
121
+ <Body>
122
+ // rootId 可以更改根元素的 id
123
+ <Root rootId="root">
124
+ // Root 支持子元素
125
+ <h1 style={{ color: 'red' }}>以下为构建时传过来的参数:</h1>
126
+ <h2> entryName:{entryName}</h2>
127
+ <h2> title:{htmlConfig.title}</h2>
128
+ <h2> rootId: {templateParams.mountId}</h2>
129
+ </Root>
130
+ // Body 组件支持 Root 以外增加不同的组件,共同组成页面
131
+ <h1>bottom</h1>
132
+ </Body>
133
+ </Html>
134
+ );
135
+ }
136
+
137
+ ```
138
+
139
+ 以上文件,将会生成以下 html 文件:
140
+
141
+ ```html
142
+ <!DOCTYPE html>
143
+ <html>
144
+
145
+ <head>
146
+ <meta charset="utf-8">
147
+ <meta name="viewport"
148
+ content="width=device-width, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
149
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
150
+ <meta name="renderer" content="webkit">
151
+ <meta name="layoutmode" content="standard">
152
+ <meta name="imagemode" content="force">
153
+ <meta name="wap-font-scale" content="no">
154
+ <meta name="format-detection" content="telephone=no">
155
+ <script>...</script>
156
+ <script defer src="/static/js/lib-react.js"></script>
157
+ <script defer src="/static/js/lib-polyfill.js"></script>
158
+ <script defer src="/static/js/lib-router.js"></script>
159
+ <script defer
160
+ src="/static/js/vendors-node_modules_pnpm_loadable_component_5_15_2_react_18_2_0_node_modules_loadable_compon-3fb0cf.js"></script>
161
+ <script defer
162
+ src="/static/js/packages_runtime_plugin-router-legacy_dist_js_treeshaking_runtime_index_js-packages_runtime_p-28f4c9.js"></script>
163
+ <script defer src="/static/js/sub.js"></script>
164
+ <link href="https://www.baidu.com" />
165
+ <script>window.b = 22</script>
166
+ </head>
167
+
168
+ <body>
169
+ <div id="root">
170
+ <!--<?- html ?>-->
171
+ <h1 style="color:red">以下为构建时传过来的参数:</h1>
172
+ <h2> entryName:sub</h2>
173
+ <h2> title:</h2>
174
+ <h2> rootId: root</h2>
175
+ </div>
176
+ <h1>bottom</h1>
177
+ <!--<?- chunksMap.js ?>-->
178
+ <!--<?- SSRDataScript ?>-->
179
+ </body>
180
+
181
+ </html>
182
+ ```
183
+
184
+ ## ejs
185
+
186
+ Modern.js 同时支持了使用 `ejs` 语法编写模板,当项目中,没有编写 `Document.[j|t]sx` 文件时,将自动回退至 `ejs` HTML 模板。
187
+
6
188
  默认情况下,Modern.js 的应用工程中会内置一份 HTML 模板,用于生成 HTML 代码。
7
189
 
8
190
  Modern.js 提供了**「自定义 HTML 片段」**和**「完全自定义 HTML 模板」**两种方式来自定义模板。
@@ -44,28 +44,22 @@ module.exports = {
44
44
 
45
45
  ## 返回随机数据
46
46
 
47
- 可以在 `./config/mock/index.js` 中自主引入 [Mock.js](https://github.com/nuysoft/Mock/wiki/Getting-Started)、[faker.js](https://github.com/marak/Faker.js/) 等库生成随机数据,例如:
47
+ 可以在 `./config/mock/index.js` 中自主引入 [Mock.js](https://github.com/nuysoft/Mock/wiki/Getting-Started) 等库生成随机数据,例如:
48
48
 
49
49
  ```js
50
50
  const Mock = require('mockjs');
51
- const faker = require('faker');
52
51
 
53
52
  module.exports = {
54
53
  '/api/getInfo': Mock.mock({
55
54
  'data|1-10': [{ name: '@cname' }]
56
- }) /* => {data: [{name: "董霞"}, {name: "魏敏"}, {name: "石磊"}} */
57
- '/a/b': {
58
- name: faker.fake("{{name.lastName}}, {{name.firstName}} {{name.suffix}}")
59
- } /* => { name: 'Marks, Dean Sr.'} */
60
- }
55
+ }), /* => {data: [{name: "董霞"}, {name: "魏敏"}, {name: "石磊"}} */
56
+ };
61
57
  ```
62
58
 
63
59
  :::info 更多随机数据生成库
64
60
 
65
- * [Faker.js](https://github.com/marak/Faker.js/)
66
61
  * [Chancejs](https://github.com/chancejs/chancejs)
67
62
  * [Mock](https://github.com/nuysoft/Mock/wiki/Getting-Started)
68
- * https://www.npmtrends.com/mockjs-vs-faker-vs-chance
69
63
 
70
64
  :::
71
65