@modern-js/main-doc 2.21.1 → 2.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (253) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/docs/en/apis/app/commands.mdx +5 -5
  3. package/docs/en/apis/app/hooks/api/api.mdx +80 -0
  4. package/docs/en/apis/app/hooks/api/app.mdx +12 -0
  5. package/docs/en/apis/app/hooks/api/lambda.mdx +57 -0
  6. package/docs/en/apis/app/hooks/api/test.mdx +1 -1
  7. package/docs/en/apis/app/hooks/config/html.mdx +2 -2
  8. package/docs/en/apis/app/hooks/config/icon.mdx +19 -19
  9. package/docs/en/apis/app/hooks/config/mock.mdx +1 -1
  10. package/docs/en/apis/app/hooks/config/public.mdx +10 -10
  11. package/docs/en/apis/app/hooks/config/storybook.mdx +3 -3
  12. package/docs/en/apis/app/hooks/config/upload.mdx +13 -13
  13. package/docs/en/apis/app/hooks/modern-config.mdx +4 -4
  14. package/docs/en/apis/app/hooks/server/index_.mdx +2 -9
  15. package/docs/en/apis/app/hooks/server/test.mdx +5 -2
  16. package/docs/en/apis/app/hooks/shared.mdx +1 -1
  17. package/docs/en/apis/app/hooks/src/app.mdx +17 -27
  18. package/docs/en/apis/app/hooks/src/index_.mdx +6 -6
  19. package/docs/en/apis/app/hooks/src/pages.mdx +41 -37
  20. package/docs/en/apis/app/hooks/src/routes.mdx +16 -36
  21. package/docs/en/apis/app/hooks/src/server.mdx +1 -1
  22. package/docs/en/apis/app/hooks/src/stories.mdx +6 -3
  23. package/docs/en/apis/app/hooks/src/test.mdx +4 -3
  24. package/docs/en/apis/app/runtime/core/use-runtime-context.mdx +5 -1
  25. package/docs/en/apis/app/runtime/web-server/hook.mdx +2 -2
  26. package/docs/en/apis/app/runtime/web-server/middleware.mdx +2 -2
  27. package/docs/en/components/init-app.mdx +3 -3
  28. package/docs/en/components/init-rspack-app.mdx +4 -4
  29. package/docs/en/components/language-config.mdx +9 -0
  30. package/docs/en/components/package-manager.mdx +11 -0
  31. package/docs/en/components/ua-polyfill.mdx +2 -2
  32. package/docs/en/configure/app/source/config-dir.mdx +1 -1
  33. package/docs/en/configure/app/source/design-system.mdx +67 -67
  34. package/docs/en/configure/app/source/disable-default-entries.mdx +6 -5
  35. package/docs/en/configure/app/source/disable-entry-dirs.mdx +5 -5
  36. package/docs/en/configure/app/source/enable-async-entry.mdx +9 -9
  37. package/docs/en/configure/app/source/entries-dir.mdx +3 -3
  38. package/docs/en/configure/app/source/entries.mdx +21 -19
  39. package/docs/en/configure/app/tools/swc.mdx +2 -2
  40. package/docs/en/guides/advanced-features/bff/frameworks.mdx +2 -2
  41. package/docs/en/guides/advanced-features/bff/function.mdx +4 -4
  42. package/docs/en/guides/advanced-features/bff/type.mdx +5 -5
  43. package/docs/en/guides/advanced-features/rspack-start.mdx +6 -6
  44. package/docs/en/guides/advanced-features/ssg.mdx +2 -2
  45. package/docs/en/guides/advanced-features/testing.mdx +2 -2
  46. package/docs/en/guides/advanced-features/web-server.mdx +2 -2
  47. package/docs/en/guides/basic-features/css.mdx +2 -2
  48. package/docs/en/guides/basic-features/mock.mdx +1 -1
  49. package/docs/en/guides/basic-features/routes.mdx +11 -7
  50. package/docs/en/guides/concept/entries.mdx +3 -3
  51. package/docs/en/guides/topic-detail/generator/create/_category_.json +4 -0
  52. package/docs/en/guides/topic-detail/generator/create/config.mdx +75 -0
  53. package/docs/en/guides/topic-detail/generator/create/option.md +151 -0
  54. package/docs/en/guides/topic-detail/generator/create/use.mdx +66 -0
  55. package/docs/en/guides/topic-detail/generator/new/_category_.json +4 -0
  56. package/docs/en/guides/topic-detail/generator/new/config.md +155 -0
  57. package/docs/en/guides/topic-detail/generator/new/option.md +67 -0
  58. package/docs/en/guides/topic-detail/generator/new/use.md +95 -0
  59. package/docs/en/guides/topic-detail/generator/plugin/_category_.json +2 -2
  60. package/docs/en/guides/topic-detail/generator/plugin/api/_category_.json +1 -1
  61. package/docs/en/guides/topic-detail/generator/plugin/api/afterForged.md +49 -0
  62. package/docs/en/guides/topic-detail/generator/plugin/api/context.md +184 -0
  63. package/docs/en/guides/topic-detail/generator/plugin/api/input.md +124 -0
  64. package/docs/en/guides/topic-detail/generator/plugin/api/onForged.md +310 -0
  65. package/docs/en/guides/topic-detail/generator/plugin/category.md +88 -0
  66. package/docs/en/guides/topic-detail/generator/plugin/context.md +104 -0
  67. package/docs/en/guides/topic-detail/generator/plugin/structure.md +106 -0
  68. package/docs/en/guides/topic-detail/generator/plugin/use.md +33 -0
  69. package/docs/en/guides/topic-detail/micro-frontend/c02-development.mdx +8 -8
  70. package/docs/en/tutorials/first-app/c03-css.mdx +2 -2
  71. package/docs/en/tutorials/first-app/c08-entries.mdx +3 -3
  72. package/docs/zh/apis/app/commands.mdx +3 -3
  73. package/docs/zh/apis/app/hooks/api/{functions/api.mdx → api.mdx} +4 -4
  74. package/docs/zh/apis/app/hooks/api/app.mdx +12 -0
  75. package/docs/zh/apis/app/hooks/api/{framework/lambda.mdx → lambda.mdx} +5 -5
  76. package/docs/zh/apis/app/hooks/api/test.mdx +3 -3
  77. package/docs/zh/apis/app/hooks/config/icon.mdx +15 -15
  78. package/docs/zh/apis/app/hooks/config/mock.mdx +1 -1
  79. package/docs/zh/apis/app/hooks/config/public.mdx +3 -3
  80. package/docs/zh/apis/app/hooks/config/upload.mdx +1 -1
  81. package/docs/zh/apis/app/hooks/modern-config.mdx +3 -3
  82. package/docs/zh/apis/app/hooks/server/index_.mdx +1 -6
  83. package/docs/zh/apis/app/hooks/shared.mdx +1 -1
  84. package/docs/zh/apis/app/hooks/src/app.mdx +15 -25
  85. package/docs/zh/apis/app/hooks/src/index_.mdx +6 -6
  86. package/docs/zh/apis/app/hooks/src/pages.mdx +7 -3
  87. package/docs/zh/apis/app/hooks/src/routes.mdx +4 -4
  88. package/docs/zh/apis/app/hooks/src/stories.mdx +1 -1
  89. package/docs/zh/apis/app/runtime/core/use-runtime-context.mdx +5 -1
  90. package/docs/zh/components/language-config.mdx +9 -0
  91. package/docs/zh/components/package-manager.mdx +11 -0
  92. package/docs/zh/components/ua-polyfill.mdx +1 -1
  93. package/docs/zh/configure/app/source/design-system.mdx +3 -4
  94. package/docs/zh/configure/app/source/enable-async-entry.mdx +2 -5
  95. package/docs/zh/configure/app/source/entries.mdx +2 -2
  96. package/docs/zh/configure/app/tools/swc.mdx +2 -2
  97. package/docs/zh/guides/advanced-features/rspack-start.mdx +6 -6
  98. package/docs/zh/guides/advanced-features/ssg.mdx +1 -1
  99. package/docs/zh/guides/advanced-features/testing.mdx +2 -2
  100. package/docs/zh/guides/advanced-features/web-server.mdx +1 -1
  101. package/docs/zh/guides/basic-features/css.mdx +1 -1
  102. package/docs/zh/guides/basic-features/mock.mdx +1 -1
  103. package/docs/zh/guides/basic-features/routes.mdx +7 -4
  104. package/docs/zh/guides/concept/entries.mdx +3 -3
  105. package/docs/zh/guides/topic-detail/generator/create/_category_.json +4 -0
  106. package/docs/zh/guides/topic-detail/generator/create/config.mdx +76 -0
  107. package/docs/zh/guides/topic-detail/generator/create/option.md +151 -0
  108. package/docs/zh/guides/topic-detail/generator/create/use.mdx +66 -0
  109. package/docs/zh/guides/topic-detail/generator/new/_category_.json +4 -0
  110. package/docs/zh/guides/topic-detail/generator/new/config.md +153 -0
  111. package/docs/zh/guides/topic-detail/generator/new/option.md +67 -0
  112. package/docs/zh/guides/topic-detail/generator/new/use.md +94 -0
  113. package/docs/zh/guides/topic-detail/generator/plugin/_category_.json +2 -2
  114. package/docs/zh/guides/topic-detail/generator/plugin/api/_category_.json +1 -1
  115. package/docs/zh/guides/topic-detail/generator/plugin/api/afterForged.md +50 -0
  116. package/docs/zh/guides/topic-detail/generator/plugin/api/context.md +184 -0
  117. package/docs/zh/guides/topic-detail/generator/plugin/api/input.md +124 -0
  118. package/docs/zh/guides/topic-detail/generator/plugin/api/onForged.md +310 -0
  119. package/docs/zh/guides/topic-detail/generator/plugin/category.md +93 -0
  120. package/docs/zh/guides/topic-detail/generator/plugin/context.md +105 -0
  121. package/docs/zh/guides/topic-detail/generator/plugin/structure.md +106 -0
  122. package/docs/zh/guides/topic-detail/generator/plugin/use.md +33 -0
  123. package/docs/zh/guides/topic-detail/micro-frontend/c02-development.mdx +4 -4
  124. package/docs/zh/guides/topic-detail/model/test-model.mdx +1 -1
  125. package/docs/zh/tutorials/first-app/c03-css.mdx +1 -1
  126. package/docs/zh/tutorials/first-app/c08-entries.mdx +1 -1
  127. package/package.json +5 -5
  128. package/docs/en/apis/app/hooks/api/framework/_category_.json +0 -4
  129. package/docs/en/apis/app/hooks/api/framework/lambda.mdx +0 -57
  130. package/docs/en/apis/app/hooks/api/functions/_category_.json +0 -4
  131. package/docs/en/apis/app/hooks/api/functions/api.mdx +0 -81
  132. package/docs/en/apis/app/hooks/api/functions/app.mdx +0 -12
  133. package/docs/en/apis/app/hooks/api/functions/common.mdx +0 -9
  134. package/docs/en/guides/topic-detail/generator/codesmith/_category_.json +0 -4
  135. package/docs/en/guides/topic-detail/generator/codesmith/api/_category_.json +0 -4
  136. package/docs/en/guides/topic-detail/generator/codesmith/api/app.mdx +0 -152
  137. package/docs/en/guides/topic-detail/generator/codesmith/api/ejs.mdx +0 -56
  138. package/docs/en/guides/topic-detail/generator/codesmith/api/fs.mdx +0 -54
  139. package/docs/en/guides/topic-detail/generator/codesmith/api/git.mdx +0 -50
  140. package/docs/en/guides/topic-detail/generator/codesmith/api/handlebars.mdx +0 -57
  141. package/docs/en/guides/topic-detail/generator/codesmith/api/json.mdx +0 -56
  142. package/docs/en/guides/topic-detail/generator/codesmith/api/npm.mdx +0 -48
  143. package/docs/en/guides/topic-detail/generator/codesmith/develop.mdx +0 -53
  144. package/docs/en/guides/topic-detail/generator/codesmith/introduce.mdx +0 -47
  145. package/docs/en/guides/topic-detail/generator/codesmith/run-in-js.mdx +0 -47
  146. package/docs/en/guides/topic-detail/generator/codesmith/structure.mdx +0 -89
  147. package/docs/en/guides/topic-detail/generator/config/_category_.json +0 -4
  148. package/docs/en/guides/topic-detail/generator/config/app.mdx +0 -82
  149. package/docs/en/guides/topic-detail/generator/config/common.mdx +0 -100
  150. package/docs/en/guides/topic-detail/generator/config/module.mdx +0 -42
  151. package/docs/en/guides/topic-detail/generator/config/monorepo.mdx +0 -28
  152. package/docs/en/guides/topic-detail/generator/plugin/abstract.mdx +0 -23
  153. package/docs/en/guides/topic-detail/generator/plugin/api/file/_category_.json +0 -4
  154. package/docs/en/guides/topic-detail/generator/plugin/api/file/addFile.mdx +0 -52
  155. package/docs/en/guides/topic-detail/generator/plugin/api/file/addHelper.mdx +0 -26
  156. package/docs/en/guides/topic-detail/generator/plugin/api/file/addManyFile.mdx +0 -58
  157. package/docs/en/guides/topic-detail/generator/plugin/api/file/addPartial.mdx +0 -26
  158. package/docs/en/guides/topic-detail/generator/plugin/api/file/introduce.mdx +0 -39
  159. package/docs/en/guides/topic-detail/generator/plugin/api/file/rmDir.mdx +0 -24
  160. package/docs/en/guides/topic-detail/generator/plugin/api/file/rmFile.mdx +0 -24
  161. package/docs/en/guides/topic-detail/generator/plugin/api/file/updateJSONFile.mdx +0 -54
  162. package/docs/en/guides/topic-detail/generator/plugin/api/file/updateModernConfig.mdx +0 -27
  163. package/docs/en/guides/topic-detail/generator/plugin/api/file/updateTextRawFile.mdx +0 -33
  164. package/docs/en/guides/topic-detail/generator/plugin/api/git/_category_.json +0 -4
  165. package/docs/en/guides/topic-detail/generator/plugin/api/git/gitAddAndCommit.mdx +0 -20
  166. package/docs/en/guides/topic-detail/generator/plugin/api/git/initGitRepo.mdx +0 -16
  167. package/docs/en/guides/topic-detail/generator/plugin/api/git/isInGitRepo.mdx +0 -16
  168. package/docs/en/guides/topic-detail/generator/plugin/api/hook/_category_.json +0 -4
  169. package/docs/en/guides/topic-detail/generator/plugin/api/hook/afterForged.mdx +0 -35
  170. package/docs/en/guides/topic-detail/generator/plugin/api/hook/onForged.mdx +0 -35
  171. package/docs/en/guides/topic-detail/generator/plugin/api/info/_category_.json +0 -4
  172. package/docs/en/guides/topic-detail/generator/plugin/api/info/isFileExit.mdx +0 -22
  173. package/docs/en/guides/topic-detail/generator/plugin/api/info/locale.mdx +0 -17
  174. package/docs/en/guides/topic-detail/generator/plugin/api/info/readDir.mdx +0 -22
  175. package/docs/en/guides/topic-detail/generator/plugin/api/input/_category_.json +0 -4
  176. package/docs/en/guides/topic-detail/generator/plugin/api/input/addInputAfter.mdx +0 -55
  177. package/docs/en/guides/topic-detail/generator/plugin/api/input/addInputBefore.mdx +0 -55
  178. package/docs/en/guides/topic-detail/generator/plugin/api/input/setInput.mdx +0 -43
  179. package/docs/en/guides/topic-detail/generator/plugin/api/input/setInputValue.mdx +0 -31
  180. package/docs/en/guides/topic-detail/generator/plugin/api/input/type.mdx +0 -65
  181. package/docs/en/guides/topic-detail/generator/plugin/api/introduce.mdx +0 -90
  182. package/docs/en/guides/topic-detail/generator/plugin/api/new/_category_.json +0 -4
  183. package/docs/en/guides/topic-detail/generator/plugin/api/new/createElement.mdx +0 -33
  184. package/docs/en/guides/topic-detail/generator/plugin/api/new/createSubProject.mdx +0 -35
  185. package/docs/en/guides/topic-detail/generator/plugin/api/new/enableFunc.mdx +0 -44
  186. package/docs/en/guides/topic-detail/generator/plugin/api/new/introduce.mdx +0 -15
  187. package/docs/en/guides/topic-detail/generator/plugin/api/npm/_category_.json +0 -4
  188. package/docs/en/guides/topic-detail/generator/plugin/api/npm/install.mdx +0 -18
  189. package/docs/en/guides/topic-detail/generator/plugin/develop.mdx +0 -125
  190. package/docs/en/guides/topic-detail/generator/plugin/use.mdx +0 -61
  191. package/docs/en/guides/topic-detail/generator/project.mdx +0 -118
  192. package/docs/zh/apis/app/hooks/api/framework/_category_.json +0 -4
  193. package/docs/zh/apis/app/hooks/api/functions/_category_.json +0 -4
  194. package/docs/zh/apis/app/hooks/api/functions/app.mdx +0 -12
  195. package/docs/zh/apis/app/hooks/api/functions/common.mdx +0 -9
  196. package/docs/zh/guides/topic-detail/generator/codesmith/_category_.json +0 -4
  197. package/docs/zh/guides/topic-detail/generator/codesmith/api/_category_.json +0 -4
  198. package/docs/zh/guides/topic-detail/generator/codesmith/api/app.mdx +0 -152
  199. package/docs/zh/guides/topic-detail/generator/codesmith/api/ejs.mdx +0 -56
  200. package/docs/zh/guides/topic-detail/generator/codesmith/api/fs.mdx +0 -54
  201. package/docs/zh/guides/topic-detail/generator/codesmith/api/git.mdx +0 -49
  202. package/docs/zh/guides/topic-detail/generator/codesmith/api/handlebars.mdx +0 -56
  203. package/docs/zh/guides/topic-detail/generator/codesmith/api/json.mdx +0 -56
  204. package/docs/zh/guides/topic-detail/generator/codesmith/api/npm.mdx +0 -47
  205. package/docs/zh/guides/topic-detail/generator/codesmith/develop.mdx +0 -53
  206. package/docs/zh/guides/topic-detail/generator/codesmith/introduce.mdx +0 -59
  207. package/docs/zh/guides/topic-detail/generator/codesmith/run-in-js.mdx +0 -47
  208. package/docs/zh/guides/topic-detail/generator/codesmith/structure.mdx +0 -89
  209. package/docs/zh/guides/topic-detail/generator/config/_category_.json +0 -4
  210. package/docs/zh/guides/topic-detail/generator/config/app.mdx +0 -82
  211. package/docs/zh/guides/topic-detail/generator/config/common.mdx +0 -100
  212. package/docs/zh/guides/topic-detail/generator/config/module.mdx +0 -42
  213. package/docs/zh/guides/topic-detail/generator/config/monorepo.mdx +0 -28
  214. package/docs/zh/guides/topic-detail/generator/plugin/abstract.mdx +0 -23
  215. package/docs/zh/guides/topic-detail/generator/plugin/api/file/_category_.json +0 -4
  216. package/docs/zh/guides/topic-detail/generator/plugin/api/file/addFile.mdx +0 -52
  217. package/docs/zh/guides/topic-detail/generator/plugin/api/file/addHelper.mdx +0 -26
  218. package/docs/zh/guides/topic-detail/generator/plugin/api/file/addManyFile.mdx +0 -55
  219. package/docs/zh/guides/topic-detail/generator/plugin/api/file/addPartial.mdx +0 -26
  220. package/docs/zh/guides/topic-detail/generator/plugin/api/file/introduce.mdx +0 -39
  221. package/docs/zh/guides/topic-detail/generator/plugin/api/file/rmDir.mdx +0 -24
  222. package/docs/zh/guides/topic-detail/generator/plugin/api/file/rmFile.mdx +0 -24
  223. package/docs/zh/guides/topic-detail/generator/plugin/api/file/updateJSONFile.mdx +0 -54
  224. package/docs/zh/guides/topic-detail/generator/plugin/api/file/updateModernConfig.mdx +0 -27
  225. package/docs/zh/guides/topic-detail/generator/plugin/api/file/updateTextRawFile.mdx +0 -33
  226. package/docs/zh/guides/topic-detail/generator/plugin/api/git/_category_.json +0 -4
  227. package/docs/zh/guides/topic-detail/generator/plugin/api/git/gitAddAndCommit.mdx +0 -20
  228. package/docs/zh/guides/topic-detail/generator/plugin/api/git/initGitRepo.mdx +0 -16
  229. package/docs/zh/guides/topic-detail/generator/plugin/api/git/isInGitRepo.mdx +0 -16
  230. package/docs/zh/guides/topic-detail/generator/plugin/api/hook/_category_.json +0 -4
  231. package/docs/zh/guides/topic-detail/generator/plugin/api/hook/afterForged.mdx +0 -35
  232. package/docs/zh/guides/topic-detail/generator/plugin/api/hook/onForged.mdx +0 -35
  233. package/docs/zh/guides/topic-detail/generator/plugin/api/info/_category_.json +0 -4
  234. package/docs/zh/guides/topic-detail/generator/plugin/api/info/isFileExit.mdx +0 -22
  235. package/docs/zh/guides/topic-detail/generator/plugin/api/info/locale.mdx +0 -17
  236. package/docs/zh/guides/topic-detail/generator/plugin/api/info/readDir.mdx +0 -22
  237. package/docs/zh/guides/topic-detail/generator/plugin/api/input/_category_.json +0 -4
  238. package/docs/zh/guides/topic-detail/generator/plugin/api/input/addInputAfter.mdx +0 -57
  239. package/docs/zh/guides/topic-detail/generator/plugin/api/input/addInputBefore.mdx +0 -56
  240. package/docs/zh/guides/topic-detail/generator/plugin/api/input/setInput.mdx +0 -43
  241. package/docs/zh/guides/topic-detail/generator/plugin/api/input/setInputValue.mdx +0 -29
  242. package/docs/zh/guides/topic-detail/generator/plugin/api/input/type.mdx +0 -65
  243. package/docs/zh/guides/topic-detail/generator/plugin/api/introduce.mdx +0 -92
  244. package/docs/zh/guides/topic-detail/generator/plugin/api/new/_category_.json +0 -4
  245. package/docs/zh/guides/topic-detail/generator/plugin/api/new/createElement.mdx +0 -33
  246. package/docs/zh/guides/topic-detail/generator/plugin/api/new/createSubProject.mdx +0 -35
  247. package/docs/zh/guides/topic-detail/generator/plugin/api/new/enableFunc.mdx +0 -44
  248. package/docs/zh/guides/topic-detail/generator/plugin/api/new/introduce.mdx +0 -15
  249. package/docs/zh/guides/topic-detail/generator/plugin/api/npm/_category_.json +0 -4
  250. package/docs/zh/guides/topic-detail/generator/plugin/api/npm/install.mdx +0 -16
  251. package/docs/zh/guides/topic-detail/generator/plugin/develop.mdx +0 -125
  252. package/docs/zh/guides/topic-detail/generator/plugin/use.mdx +0 -61
  253. package/docs/zh/guides/topic-detail/generator/project.mdx +0 -118
@@ -0,0 +1,50 @@
1
+ ---
2
+ sidebar_position: 3
3
+ ---
4
+
5
+ # afterForged
6
+
7
+ `afterForged` 为生成器插件中用于文件操作后其他步骤操作的生命周期函数。
8
+
9
+ ## 类型
10
+
11
+ ```ts
12
+ export type AfterForgedAPI = {
13
+ isInGitRepo: () => Promise<boolean>;
14
+ initGitRepo: () => Promise<void>;
15
+ gitAddAndCommit: (commitMessage: string) => Promise<void>;
16
+ install: () => Promise<void>;
17
+ };
18
+
19
+ export type PluginAfterForgedFunc = (api: AfterForgedAPI, inputData: Record<string, unknown>) => Promise<void>;
20
+
21
+ export interface IPluginContext {
22
+ afterForged: (func: PluginAfterForgedFunc) => void;
23
+ ...
24
+ }
25
+ ```
26
+
27
+ ## API
28
+
29
+ 下面将分别介绍 api 参数提供的 API。
30
+
31
+ ### isInGitRepo
32
+
33
+ 判断当前项目是否为一个 Git 仓库。
34
+
35
+ ### initGitRepo
36
+
37
+ 初始化当前项目为 Git 仓库。
38
+
39
+ ### gitAddAndCommit
40
+
41
+ 提交当前仓库变更。
42
+
43
+ 参数:
44
+
45
+ - `commitMessage`: commit 信息。
46
+
47
+
48
+ ### install
49
+
50
+ 在项目根目录安装依赖。`install` 函数中将根据 `packageManager` 的值使用对应的包管理工具安装依赖。
@@ -0,0 +1,184 @@
1
+ ---
2
+ sidebar_position: 1
3
+ ---
4
+
5
+ # context
6
+
7
+ 生成器插件在 `main` 文件中默认导出了一个函数,函数参数为 `context`,生成器插件提供的所有 API 都是由这个 `context` 提供的。
8
+
9
+ ## 类型
10
+
11
+ 我们先大概了解一下 `context` 的类型定义:
12
+
13
+ ```ts
14
+ export interface IPluginContext {
15
+ locale?: string;
16
+ addInputBefore: (key: string, input: Schema) => void;
17
+ addInputAfter: (key: string, input: Schema) => void;
18
+ setInput: (key: string, field: string, value: unknown) => void;
19
+ setInputValue: (value: Record<string, unknown>) => void;
20
+ setDefaultConfig: (value: Record<string, unknown>) => void;
21
+ isFileExist: (fileName: string) => Promise<boolean>;
22
+ readDir: (dir: string) => Promise<string[]>;
23
+ setGitMessage: (gitMessage: string) => void;
24
+ onForged: (func: PluginForgedFunc) => void;
25
+ afterForged: (func: PluginAfterForgedFunc) => void;
26
+ }
27
+ ```
28
+
29
+ `context` 提供的内容主要分为三类:
30
+
31
+ - 获取当前生成器执行环境信息
32
+
33
+ - 操作 input 输入
34
+
35
+ - 生成器插件生命周期函数
36
+
37
+ 下面将从这三个分类分别介绍生成器插件 API。
38
+
39
+
40
+ ### 获取信息
41
+
42
+ #### locale
43
+
44
+ 获取生成器插件执行环境的语言。`@modern-js/create` 提供了 `zh` 和 `en` 两种语言,这里即为对应的这两种值。
45
+
46
+ #### isFileExist
47
+
48
+ 判断文件是否存在。我们很多时候需要在定义操作前确认目标项目文件是否已经存在,可以直接通过该 API 获取。
49
+
50
+ 例如我们需要获取 `package.json` 文件是否存在,然后做相应的操作:
51
+
52
+ ```ts
53
+ const isExist = await context.isFileExist('package.json');
54
+ if (isExist) {
55
+ ...
56
+ }
57
+ ```
58
+
59
+ #### readDir
60
+
61
+ 获取文件夹内文件列表。我们很多时候需要在定义操作前获取目标项目文件夹下面文件列表,可以直接通过该 API 获取。
62
+
63
+ 例如我们需要获取 src 文件夹下所有文件,然后进行相应操作:
64
+
65
+ ```ts
66
+ const files = await context.readDir('src');
67
+
68
+ files.map(name => {
69
+ ...
70
+ });
71
+ ```
72
+
73
+ ### input 操作
74
+
75
+ input 操作中使用的 key 参数可参考[配置参数](/guides/topic-detail/generator/create/config.html),需要在使用对应工程方案下的 key,即不支持在 `solution` 和 `scenes`。
76
+
77
+ input 操作中的 input 参数对应的 Schema 类型可参考 [Input](/guides/topic-detail/generator/plugin/api/input.html)。
78
+
79
+ #### addInputBefore
80
+
81
+ 在指定的 input `key` 前添加问题。
82
+
83
+ 例如:
84
+
85
+ ```ts
86
+ context.addInputBefore('packageManager', {
87
+ type: 'object',
88
+ properties: {
89
+ language: {
90
+ type: 'string',
91
+ title: '开发语言',
92
+ enum: [
93
+ { label: 'TS', value: 'ts' },
94
+ { label: 'ES6+', value: 'js' },
95
+ ],
96
+ },
97
+ },
98
+ });
99
+ ```
100
+
101
+ #### addInputAfter
102
+
103
+ 在指定的 input `key` 后添加问题。
104
+
105
+ 例如:
106
+
107
+ ```ts
108
+ context.addInputAfter('packageManager', {
109
+ type: 'object',
110
+ properties: {
111
+ language: {
112
+ type: 'string',
113
+ title: '开发语言',
114
+ enum: [
115
+ { label: 'TS', value: 'ts' },
116
+ { label: 'ES6+', value: 'js' },
117
+ ],
118
+ },
119
+ },
120
+ });
121
+ ```
122
+
123
+ :::info
124
+ 1. 添加问题的 `key` 不能和 Modern.js 提供的工程方案自身的问题的 `key` 重复。
125
+ 2. 添加问题 `addInputAfter` 的优先级高于 `addInputBefore`,当同时对一个 key 添加 After 问题和对其后一个key 添加 Before 问题时,After 问题会在 Before 之前。
126
+ 3. 当需要在相同 `key` 前面或者后面添加多个问题时,可多次调用该方法,问题的顺序会按照调用顺序进行排列。
127
+
128
+ :::
129
+
130
+ #### setInput
131
+
132
+ 设置指定 input `key` 的属性。
133
+
134
+ 例如设置 `packageName` 的 `title` 属性:
135
+
136
+ ```ts
137
+ context.setInput('packageName', 'title', "展示名称");
138
+ ```
139
+
140
+ :::info
141
+ 对于 Modern.js 工程方案提供的输入选项,只支持删除,不支持增加,增加会造成代码中的逻辑判断存在问题。
142
+ :::
143
+
144
+
145
+ #### setInputValue
146
+
147
+ 设置指定 input `key` 的选项默认值。
148
+
149
+ 例如设置 `packageManager` 的默认值:
150
+
151
+ ```ts
152
+ context.setInputValue({
153
+ packageManager: 'npm',
154
+ });
155
+ ```
156
+
157
+ :::info
158
+ 设置完成后,该问题还是需要交互,只是会使用生成器插件配置的默认值。
159
+ :::
160
+
161
+ #### setDefaultConfig
162
+
163
+ 设置指定 input `key` 的默认值。
164
+
165
+ 例如设置 `packageManager` 的默认值:
166
+
167
+ ```ts
168
+ context.setDefaultConfig({
169
+ packageManager: 'npm',
170
+ });
171
+ ```
172
+
173
+ :::info
174
+ 设置完成后,将不再展示对应问题,和 `@modern-js/create` 制定 `--config` 行为一致。不支持设置 `vertical` 和 `projectOrg`。
175
+ :::
176
+
177
+ #### setGitMessage
178
+
179
+ 设置 Git 初始提交信息。Modern.js 默认 Git 初始化提交信息为 `feat: init`,通过该函数可以修改。
180
+
181
+
182
+ ### 生命周期函数
183
+
184
+ 生命周期函数比较复杂,将通过后面两节 [`onForged`](/guides/topic-detail/generator/plugin/api/onForged.html) 和 [`afterForged`](/guides/topic-detail/generator/plugin/api/afterForged.html) 分别介绍。
@@ -0,0 +1,124 @@
1
+ ---
2
+ sidebar_position: 4
3
+ ---
4
+
5
+ # Input
6
+
7
+ 生成器插件提供了 Input 的方式完成与用户的问题交互,使用 JSON Schema 的方式进行定义:
8
+
9
+ 例如:
10
+
11
+ ```js
12
+ const schema = {
13
+ type: 'object',
14
+ properties: {
15
+ language: {
16
+ type: 'string',
17
+ title: '开发语言',
18
+ enum: [
19
+ { label: 'TS', value: 'ts' },
20
+ { label: 'ES6+', value: 'js' },
21
+ ],
22
+ },
23
+ },
24
+ };
25
+ ```
26
+
27
+ JSON Schema 的格式参考了开源的 [Formily](https://formilyjs.org/) Schema 的格式,下面将对支持的字段进行介绍:
28
+
29
+ ## type
30
+
31
+ 定义当前 Schema 类型,当前支持的类型为 `string`、`number` 和 `object`。字符串输入和下拉选项都需要使用 `string` 类型。 `object` 类型用于实现 Schema 之间嵌套,需要配和 `properties` 属性使用。
32
+
33
+ ## title
34
+
35
+ 定义当前 Schema 展示名称。
36
+
37
+ ## default
38
+
39
+ 定义当前 Schema 的默认值。
40
+
41
+ ## enum
42
+
43
+ 当前 Schema 为下列选项时,定义选项内容。
44
+
45
+ 子项支持 `string` 或者 `{ label: string; value: string}` 类型,当下拉选项中值和展示值相同时,可直接使用 `string` 定义。
46
+
47
+ 当需要表示多选选项时,设置 `default` 字段为 `[]` 即可。
48
+
49
+ ## x-validator
50
+
51
+ 当前 Schema 的校验规则。当 Schema 为输入类型时,在输入完成后会自动完成校验。
52
+
53
+ 这里校验规则支持[ Formily 提供的校验规则](https://formilyjs.org/zh-CN/guide/advanced/validate),例如最大值为 5:
54
+
55
+ ```js
56
+ const schema = {
57
+ type: 'object',
58
+ properties: {
59
+ max_5: {
60
+ type: 'number',
61
+ title: '最大值(>5报错)',
62
+ 'x-validator': {
63
+ maximum: 5,
64
+ },
65
+ },
66
+ },
67
+ };
68
+ ```
69
+
70
+ 也支持直接使用验证函数:
71
+
72
+ ```js
73
+ const schema = {
74
+ type: 'object',
75
+ properties: {
76
+ path: {
77
+ type: 'string',
78
+ title: '只能包含数字和字母',
79
+ 'x-validator': value => {
80
+ if (!/^[0-9a-zA-Z]*$/g.test(value)) {
81
+ return '格式不正确';
82
+ }
83
+ return '';
84
+ },
85
+ },
86
+ },
87
+ };
88
+ ```
89
+
90
+ ## x-reactions
91
+
92
+ 使用 Schema 之间的联动,这里和[ Formily 联动规则](https://formilyjs.org/zh-CN/guide/advanced/linkages)完全相同。
93
+
94
+ 例如:
95
+
96
+ ```js
97
+ const schema = {
98
+ type: 'object',
99
+ properties: {
100
+ name: {
101
+ type: 'string',
102
+ title: '名称',
103
+ },
104
+ path: {
105
+ type: 'string',
106
+ title: '路径',
107
+ 'x-reactions': [
108
+ {
109
+ dependencies: ['name'],
110
+ fulfill: {
111
+ state: {
112
+ value: '{{$deps[0]}}',
113
+ },
114
+ },
115
+ },
116
+ ],
117
+ },
118
+ },
119
+ };
120
+ ```
121
+
122
+ ## properties
123
+
124
+ 组织当前 Schema 的结构,定义子表单。`properties` 为对象,`key` 为 Schema 关键字,`value` 为上述描述的 Schema 对象。
@@ -0,0 +1,310 @@
1
+ ---
2
+ sidebar_position: 2
3
+ ---
4
+
5
+ # onForged
6
+
7
+ `onForged` 为生成器插件中用于文件操作的生命周期函数。
8
+
9
+ ## 类型
10
+
11
+ ```ts
12
+ export type ForgedAPI = {
13
+ addFile: (params: AddFileParams) => Promise<void>;
14
+ addManyFiles: (params: AddManyFilesParams) => Promise<void>;
15
+ updateJSONFile: (fileName: string, updateInfo: Record<string, unknown>) => Promise<void>;
16
+ updateTextRawFile: (fileName: string, update: (content: string[]) => string[]) => Promise<void>;
17
+ updateModernConfig: (updateInfo: Record<string, any>) => Promise<void>;
18
+ rmFile: (fileName: string) => Promise<void>;
19
+ rmDir: (dirName: string) => Promise<void>;
20
+ addHelper: (name: string, fn: Handlebars.HelperDelegate) => void;
21
+ addPartial: (name: string, str: Handlebars.Template) => void;
22
+ createElement: (element: ActionElement, params: Record<string, unknown>) => Promise<void>;
23
+ enableFunc: (func: ActionFunction, params?: Record<string, unknown> | undefined) => Promise<void>;
24
+ };
25
+
26
+ export type PluginForgedFunc = (
27
+ api: ForgedAPI,
28
+ inputData: Record<string, unknown>,
29
+ ) => void | Promise<void>;
30
+
31
+ export interface IPluginContext {
32
+ onForged: (func: PluginForgedFunc) => void;
33
+ ...
34
+ }
35
+ ```
36
+
37
+ `onForged` 参数为一个回调函数,回调函数参数为 `api` 和 `input`,分别用于提供该生命周期函数提供的 API 及当前输入信息。
38
+
39
+ ## 概念
40
+
41
+ ### 文件类型
42
+
43
+ 生成器插件将文件类型分为撕四类:
44
+
45
+ - 文本文件
46
+
47
+ 纯文本内容文件,可使用 [Handlebars](https://handlebarsjs.com/) 或 [EJS](https://ejs.co/) 进行模板处理的文件。
48
+
49
+ - 二进制文件
50
+
51
+ 图片、音频、视频等文件。
52
+
53
+ - JSON 文件
54
+
55
+ JSON 格式的文件。
56
+
57
+ - 文本列表文件
58
+
59
+ 文件由行文本组成的文件,例如 `.gitignore`, `.editorconfig`, `.npmrc`。
60
+
61
+ 对应四种文件的类型定义为:
62
+
63
+ ```ts
64
+ export enum FileType {
65
+ Text = 'text',
66
+ Binary = 'binary',
67
+ Json = 'json',
68
+ TextRaw = 'textRaw',
69
+ }
70
+ ```
71
+
72
+ ## API
73
+
74
+ 下面将分别介绍 api 参数提供的 API。
75
+
76
+ ### addFile
77
+
78
+ 添加单个文件。
79
+
80
+ 参数类型:
81
+
82
+ ```ts
83
+ export interface AddFileParams {
84
+ type: FileType;
85
+ file: string;
86
+ template?: string;
87
+ templateFile?: string;
88
+ force?: boolean;
89
+ data?: Record<string, string>;
90
+ }
91
+ ```
92
+
93
+ - `type`: 文件类型。
94
+ - `file`:目标文件路径,相对于目标项目目录的相对路径。
95
+ - `template`:模板内容,该字段值可直接用于模板渲染文件。优先级低于 `templateFile`。
96
+ - `templateFile`:模板文件路径,相对于 templates 目录的相对路径即可。
97
+ - `force`:是否强制覆盖,当目标文件存在时是否强制覆盖,默认为 false。
98
+ - `data`:模板渲染数据。
99
+
100
+ :::info
101
+ 文本类型文件默认使用 Handlebars 进行处理,当模板文件以 `.ejs` 结尾的话,会使用 [EJS](https://ejs.co/) 进行模板渲染。
102
+ :::
103
+
104
+ 例如添加模板文件 `App.tsx.hanlebars` 到 `src/App.tsx` 中:
105
+
106
+ ```ts
107
+ context.onForged(async (api: ForgedAPI, _input: Record<string, unknown>) => {
108
+ await api.addFile({
109
+ type: FileType.Text,
110
+ file: `src/App.tsx`,
111
+ templateFile: `App.tsx.handlebars`,
112
+ });
113
+ })
114
+ ```
115
+
116
+ ### addManyFiless
117
+
118
+ 批量添加文件,一般用于添加多个文件到同一个目标目录。
119
+
120
+ 参数类型:
121
+
122
+ ```ts
123
+ export interface AddManyFilesParams {
124
+ type: FileType;
125
+ destination: string;
126
+ templateFiles: string[] | (() => string[]);
127
+ templateBase?: string;
128
+ fileNameFunc?: (name: string) => string;
129
+ data?: Record<string, string>;
130
+ }
131
+ ```
132
+
133
+ - `type`: 文件类型。
134
+ - `destination`:目标文件夹,相对于目标项目目录的相对路径。
135
+ - `templateFiles`:模板文件列表,支持 [globby](https://www.npmjs.com/package/globby) 正则表达式
136
+ - `templateBase`:模板文件的公共路径,使用该参数时目标文件会自动删除该路径。
137
+ - `fileNameFunc`:重命名文件函数,添加文件过程中会依次将文件名传入到该函数,可以根据需要进行重命名。
138
+ - `data`:模板渲染数据。
139
+
140
+ 例如将模板文件 `src-ts` 目录下所有文件渲染到 `src` 目录:
141
+
142
+ ```ts
143
+ context.onForged(async (api: ForgedAPI, _input: Record<string, unknown>) => {
144
+ await api.addManyFiles({
145
+ type: FileType.Text,
146
+ destination: 'src',
147
+ templateFiles: ['src-ts/**/*'],
148
+ templateBase: 'src-ts',
149
+ fileNameFunc: name => name.replace('.handlebars', ''),
150
+ });
151
+ })
152
+ ```
153
+
154
+ ### updateJSONFile
155
+
156
+ 更新 JSON 文件字段。
157
+
158
+ 参数类型:
159
+
160
+ ```ts
161
+ fileName: strings
162
+ updateInfo: Record<string, unknown>
163
+ ```
164
+
165
+ - `fileName`:JSON 文件路径,相对于目标项目的路径。
166
+ - `updateInfo`:更新信息,嵌套字段更新需要平铺,不然会更新整体造成内容丢失。
167
+
168
+ 例如更新 `package.json` 的 name 字段:
169
+
170
+ ```ts
171
+ context.onForged(async (api: ForgedAPI, _input: Record<string, unknown>) => {
172
+ await api.updateJSONFile('package.json', { name: 'new_name' });
173
+ })
174
+ ```
175
+
176
+ 例如更新 `dependencies` 的 `react-dom` 版本:
177
+
178
+ ```ts
179
+ context.onForged(async (api: ForgedAPI, _input: Record<string, unknown>) => {
180
+ await api.updateJSONFile('package.json', {
181
+ 'dependencies.react-dom': '^18',
182
+ });
183
+ })
184
+ ```
185
+
186
+ ### updateTextRawFile
187
+
188
+ 更新文本列表文件内容。
189
+
190
+ 参数类型:
191
+
192
+ ```ts
193
+ fileName: string
194
+ update: (content: string[]) => string[]
195
+ ```
196
+
197
+ - `fileName`: 文本列表文件路径,相对于目标项目的路径。
198
+ - `update`:更新函数,参数为当前文件内容以 `\n` 进行分割的数组,返回值也为修改完成后的数组,`@modern-js/create` 会自动以 `\n` 合并,并写入源文件。
199
+
200
+ 例如 `.gitinore` 文件中增加 dist 目录:
201
+
202
+ ```ts
203
+ context.onForged(async (api: ForgedAPI, _input: Record<string, unknown>) => {
204
+ await api.updateTextRawFile('.gitinore', (content) => [...content, 'dist']);
205
+ })
206
+ ```
207
+
208
+ ### updateModernConfig(不推荐)
209
+
210
+ Modern.js 配置除了可以在 `modern.config.[tj]s` 中配置外,还支持 `package.json` 中配置 `modernConfig` 配置。该函数用于更新该字段。
211
+
212
+ 参数类型:
213
+
214
+ ```ts
215
+ updateInfo: Record<string, any>
216
+ ```
217
+
218
+ - `updateInfo`: 更新内容信息。updateModernConfig 是基于 updateJSONFile 的封装,将自动更新到 `modernConfig` 字段下,updateInfo 中只需填写 `modernConfig` 下的配置字段即可。
219
+
220
+ 例如开启 ssr:
221
+
222
+ ```ts
223
+ context.onForged(async (api: ForgedAPI, _input: Record<string, unknown>) => {
224
+ await api.updateModernConfig({ 'server.ssr': true });
225
+ })
226
+ ```
227
+
228
+ ### rmFile
229
+
230
+ 删除文件。
231
+
232
+ 参数类型:
233
+
234
+ ```ts
235
+ fileName: string
236
+ ```
237
+
238
+ - `fileName`:删除的文件路径,相对于目标项目的路径。
239
+
240
+ ### rmDir
241
+
242
+ 删除文件夹。
243
+
244
+ 参数类型:
245
+
246
+ ```ts
247
+ dirName: string
248
+ ```
249
+
250
+ - `dirName`:删除的文件夹路径,相对于目标项目的路径。
251
+
252
+ ### addHelper
253
+
254
+ 添加 handlebrs 渲染的[自定义 Helper](https://handlebarsjs.com/guide/#custom-helpers)。
255
+
256
+ 参数类型:
257
+
258
+ ```ts
259
+ name: string
260
+ fn: Handlebars.HelperDelegate
261
+ ```
262
+
263
+ - `name`:Helper 函数名称。
264
+ - `fn`:Helper 函数实现。
265
+
266
+ ### addPartial
267
+
268
+ 添加 Handlebars 渲染的 [Partial](https://handlebarsjs.com/guide/partials.html#basic-partials)。
269
+
270
+ 参数类型:
271
+
272
+ ```ts
273
+ name: string
274
+ str: Handlebars.Template
275
+ ```
276
+
277
+ - `name`:Partial 名称。
278
+ - `str`:Partial 的模板字符串。
279
+
280
+ ### createElement
281
+
282
+ 自动调用 new 命令创建工程元素。
283
+
284
+ 参数类型:
285
+
286
+ ```ts
287
+ element: ActionElement
288
+ params: Record<string, unknown>
289
+ ```
290
+
291
+ - `element`:工程元素类型,新建入口或者新建自定义 Web Server 源码目录。
292
+ - `params`:对应创建工程元素的其他参数。
293
+
294
+ ### enableFunc
295
+
296
+ 自动调用 new 命令开启可选功能。
297
+
298
+ 参数类型:
299
+
300
+ ```ts
301
+ func: ActionFunction
302
+ params?: Record<string, unknown>
303
+ ```
304
+
305
+ - `func`:开启功能名称。
306
+ - `params`:对应开启功能的其他参数。
307
+
308
+ :::info
309
+ 创建工程元素和开启功能配置可参考[配置参数](/guides/topic-detail/generator/new/config.html)。
310
+ :::