@modern-js/module-tools-docs 2.0.0-beta.4 → 2.0.1

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 (198) hide show
  1. package/.eslintrc.js +13 -0
  2. package/docs/en/api/config/_category_.json +4 -0
  3. package/docs/en/api/{build-config.md → config/build-config.md} +198 -105
  4. package/docs/en/api/{build-preset.md → config/build-preset.md} +65 -46
  5. package/docs/{zh/api → en/api/config}/design-system.md +130 -127
  6. package/docs/en/api/config/plugins.md +18 -0
  7. package/docs/en/api/{test.md → config/testing.md} +21 -12
  8. package/docs/en/api/index.md +3 -1
  9. package/docs/en/api/plugin-api/_category_.json +4 -0
  10. package/docs/en/api/plugin-api/plugin-hooks.md +501 -0
  11. package/docs/en/guide/advance/_category_.json +4 -0
  12. package/docs/en/guide/advance/asset.mdx +47 -30
  13. package/docs/en/guide/advance/build-umd.mdx +88 -80
  14. package/docs/en/guide/advance/copy.md +31 -28
  15. package/docs/en/guide/advance/external-dependency.mdx +27 -23
  16. package/docs/en/guide/advance/in-depth-about-build.md +56 -50
  17. package/docs/en/guide/advance/in-depth-about-dev-command.md +7 -4
  18. package/docs/en/guide/advance/theme-config.mdx +80 -0
  19. package/docs/en/guide/basic/_category_.json +4 -0
  20. package/docs/en/guide/basic/before-getting-started.md +28 -23
  21. package/docs/en/guide/basic/command-preview.md +18 -14
  22. package/docs/en/guide/basic/modify-output-product.md +27 -20
  23. package/docs/en/guide/basic/publish-your-project.md +21 -19
  24. package/docs/en/guide/basic/test-your-project.mdx +19 -16
  25. package/docs/en/guide/basic/use-micro-generator.md +10 -7
  26. package/docs/en/guide/basic/using-storybook.mdx +27 -26
  27. package/docs/en/guide/best-practices/_category_.json +4 -0
  28. package/docs/en/guide/best-practices/components.mdx +783 -0
  29. package/docs/en/guide/intro/_category_.json +4 -0
  30. package/docs/en/guide/intro/getting-started.md +9 -4
  31. package/docs/en/guide/intro/welcome.md +4 -0
  32. package/docs/en/guide/intro/why-module-engineering-solution.md +5 -1
  33. package/docs/en/index.md +3 -5
  34. package/docs/en/plugins/guide/_category_.json +4 -0
  35. package/docs/en/plugins/guide/getting-started.mdx +84 -0
  36. package/docs/en/plugins/guide/plugin-object.mdx +85 -0
  37. package/docs/en/plugins/guide/setup-function.mdx +117 -0
  38. package/docs/en/plugins/official-list/_category_.json +4 -0
  39. package/docs/en/plugins/official-list/overview.md +6 -0
  40. package/docs/zh/api/config/_category_.json +4 -0
  41. package/docs/zh/api/config/build-config.md +658 -0
  42. package/docs/zh/api/{build-preset.md → config/build-preset.md} +49 -36
  43. package/docs/zh/api/config/design-system.md +1166 -0
  44. package/docs/zh/api/config/plugins.md +18 -0
  45. package/docs/zh/api/{testing.md → config/testing.md} +18 -13
  46. package/docs/zh/api/index.md +4 -1
  47. package/docs/zh/api/plugin-api/_category_.json +4 -0
  48. package/docs/zh/api/plugin-api/plugin-hooks.md +500 -0
  49. package/docs/zh/guide/advance/_category_.json +4 -0
  50. package/docs/zh/guide/advance/asset.mdx +47 -30
  51. package/docs/zh/guide/advance/build-umd.mdx +88 -71
  52. package/docs/zh/guide/advance/copy.md +31 -28
  53. package/docs/zh/guide/advance/external-dependency.mdx +27 -23
  54. package/docs/zh/guide/advance/in-depth-about-build.md +55 -50
  55. package/docs/zh/guide/advance/in-depth-about-dev-command.md +7 -4
  56. package/docs/zh/guide/advance/theme-config.mdx +78 -0
  57. package/docs/zh/guide/basic/_category_.json +4 -0
  58. package/docs/zh/guide/basic/before-getting-started.md +27 -22
  59. package/docs/zh/guide/basic/command-preview.md +17 -13
  60. package/docs/zh/guide/basic/modify-output-product.md +28 -21
  61. package/docs/zh/guide/basic/publish-your-project.md +22 -17
  62. package/docs/zh/guide/basic/test-your-project.mdx +20 -16
  63. package/docs/zh/guide/basic/use-micro-generator.md +10 -7
  64. package/docs/zh/guide/basic/using-storybook.mdx +27 -24
  65. package/docs/zh/guide/best-practices/_category_.json +4 -0
  66. package/docs/zh/guide/best-practices/components.mdx +793 -0
  67. package/docs/zh/guide/intro/_category_.json +4 -0
  68. package/docs/zh/guide/intro/getting-started.md +10 -4
  69. package/docs/zh/guide/intro/welcome.md +4 -0
  70. package/docs/zh/guide/intro/why-module-engineering-solution.md +5 -1
  71. package/docs/zh/index.md +3 -2
  72. package/docs/zh/plugins/guide/_category_.json +4 -0
  73. package/docs/zh/plugins/guide/getting-started.mdx +84 -0
  74. package/docs/zh/plugins/guide/plugin-object.mdx +85 -0
  75. package/docs/zh/plugins/guide/setup-function.mdx +117 -0
  76. package/docs/zh/plugins/official-list/_category_.json +4 -0
  77. package/docs/zh/plugins/official-list/overview.md +5 -0
  78. package/modern.config.ts +118 -0
  79. package/package.json +8 -6
  80. package/{docs/.island/styles → theme}/index.css +0 -1
  81. package/theme/index.ts +4 -0
  82. package/tsconfig.json +7 -0
  83. package/docs/.island/config.ts +0 -245
  84. package/docs/.island/dist/404.html +0 -41
  85. package/docs/.island/dist/assets/before-getting-started.1b82b538.js +0 -87
  86. package/docs/.island/dist/assets/before-getting-started.582a31cc.js +0 -87
  87. package/docs/.island/dist/assets/build-config.72eb0918.js +0 -804
  88. package/docs/.island/dist/assets/build-config.d8bb1658.js +0 -809
  89. package/docs/.island/dist/assets/build-preset.96805d7d.js +0 -256
  90. package/docs/.island/dist/assets/build-preset.c20dcd40.js +0 -256
  91. package/docs/.island/dist/assets/build-your-ui.7f349247.js +0 -2
  92. package/docs/.island/dist/assets/build-your-ui.a8361604.js +0 -2
  93. package/docs/.island/dist/assets/command-preview.2d45fc82.js +0 -264
  94. package/docs/.island/dist/assets/command-preview.dc51b953.js +0 -264
  95. package/docs/.island/dist/assets/components.esm.03560353.js +0 -9
  96. package/docs/.island/dist/assets/design-system.86694ff5.js +0 -1254
  97. package/docs/.island/dist/assets/design-system.c4745cce.js +0 -639
  98. package/docs/.island/dist/assets/dev.1d326a37.js +0 -37
  99. package/docs/.island/dist/assets/dev.1fd06000.js +0 -37
  100. package/docs/.island/dist/assets/down.f35427d3.svg +0 -1
  101. package/docs/.island/dist/assets/extension.12299fd6.js +0 -2
  102. package/docs/.island/dist/assets/extension.96dc63a4.js +0 -2
  103. package/docs/.island/dist/assets/getting-started.40e9218d.js +0 -117
  104. package/docs/.island/dist/assets/getting-started.b1ed3f10.js +0 -114
  105. package/docs/.island/dist/assets/github.3bf8ccee.svg +0 -1
  106. package/docs/.island/dist/assets/index.2b2347ea.js +0 -33
  107. package/docs/.island/dist/assets/index.6cef6f5f.js +0 -4
  108. package/docs/.island/dist/assets/index.cb118238.js +0 -36
  109. package/docs/.island/dist/assets/index.ccb6ce27.js +0 -4
  110. package/docs/.island/dist/assets/island_inject.11a12ecc.js +0 -1
  111. package/docs/.island/dist/assets/island_inject.b13deaee.js +0 -1
  112. package/docs/.island/dist/assets/loading.8c9bb911.svg +0 -1
  113. package/docs/.island/dist/assets/modify-output-product.7f6bff35.js +0 -100
  114. package/docs/.island/dist/assets/modify-output-product.b91eff1f.js +0 -100
  115. package/docs/.island/dist/assets/moon.6b705924.svg +0 -3
  116. package/docs/.island/dist/assets/plugin.895932d8.js +0 -42
  117. package/docs/.island/dist/assets/plugin.d2fbc531.js +0 -42
  118. package/docs/.island/dist/assets/publish-your-project.21b8309f.js +0 -164
  119. package/docs/.island/dist/assets/publish-your-project.8d398b17.js +0 -166
  120. package/docs/.island/dist/assets/right.89674cd7.svg +0 -1
  121. package/docs/.island/dist/assets/search.0aea6901.svg +0 -1
  122. package/docs/.island/dist/assets/search.1c85d17c.js +0 -3
  123. package/docs/.island/dist/assets/search.484eca11.js +0 -222
  124. package/docs/.island/dist/assets/search.54fca8d0.js +0 -3
  125. package/docs/.island/dist/assets/style.09015a4b.css +0 -1
  126. package/docs/.island/dist/assets/style.2e5f7bc2.css +0 -1970
  127. package/docs/.island/dist/assets/sun.841dac10.svg +0 -11
  128. package/docs/.island/dist/assets/test-your-project.18bd4582.js +0 -190
  129. package/docs/.island/dist/assets/test-your-project.f53bebf7.js +0 -190
  130. package/docs/.island/dist/assets/test.0da1f99f.js +0 -67
  131. package/docs/.island/dist/assets/test.0e81f002.js +0 -66
  132. package/docs/.island/dist/assets/translator.b1077c44.svg +0 -1
  133. package/docs/.island/dist/assets/use-micro-generator.7d9e4016.js +0 -60
  134. package/docs/.island/dist/assets/use-micro-generator.db5520c1.js +0 -60
  135. package/docs/.island/dist/assets/using-storybook.57ea6b77.js +0 -260
  136. package/docs/.island/dist/assets/using-storybook.a2212f2e.js +0 -260
  137. package/docs/.island/dist/assets/welcome.0449a9c8.js +0 -13
  138. package/docs/.island/dist/assets/welcome.a8448931.js +0 -13
  139. package/docs/.island/dist/assets/why-module-engineering-solution.6ae8c0e3.js +0 -26
  140. package/docs/.island/dist/assets/why-module-engineering-solution.c9a45cbd.js +0 -26
  141. package/docs/.island/dist/chunk-COLCRJ2V.js +0 -1
  142. package/docs/.island/dist/chunk-K5FMOYDC.js +0 -10
  143. package/docs/.island/dist/chunk-WE42KMYS.js +0 -26
  144. package/docs/.island/dist/client-entry.js +0 -3
  145. package/docs/.island/dist/en/api/build-config.html +0 -344
  146. package/docs/.island/dist/en/api/build-preset.html +0 -82
  147. package/docs/.island/dist/en/api/design-system.html +0 -155
  148. package/docs/.island/dist/en/api/dev.html +0 -45
  149. package/docs/.island/dist/en/api/index.html +0 -41
  150. package/docs/.island/dist/en/api/plugin.html +0 -48
  151. package/docs/.island/dist/en/api/test.html +0 -58
  152. package/docs/.island/dist/en/guide/before-getting-started.html +0 -127
  153. package/docs/.island/dist/en/guide/build-your-ui.html +0 -41
  154. package/docs/.island/dist/en/guide/command-preview.html +0 -100
  155. package/docs/.island/dist/en/guide/extension.html +0 -41
  156. package/docs/.island/dist/en/guide/getting-started.html +0 -76
  157. package/docs/.island/dist/en/guide/modify-output-product.html +0 -140
  158. package/docs/.island/dist/en/guide/publish-your-project.html +0 -91
  159. package/docs/.island/dist/en/guide/test-your-project.html +0 -72
  160. package/docs/.island/dist/en/guide/use-micro-generator.html +0 -65
  161. package/docs/.island/dist/en/guide/using-storybook.html +0 -113
  162. package/docs/.island/dist/en/guide/welcome.html +0 -53
  163. package/docs/.island/dist/en/guide/why-module-engineering-solution.html +0 -49
  164. package/docs/.island/dist/en/index.html +0 -42
  165. package/docs/.island/dist/react-dom.js +0 -1
  166. package/docs/.island/dist/react-dom_client.js +0 -1
  167. package/docs/.island/dist/react.js +0 -1
  168. package/docs/.island/dist/react_jsx-runtime.js +0 -10
  169. package/docs/.island/dist/ssr-manifest.json +0 -57
  170. package/docs/.island/dist/test-result.png +0 -0
  171. package/docs/.island/dist/why-module-solution.png +0 -0
  172. package/docs/.island/dist/zh/api/build-config.html +0 -347
  173. package/docs/.island/dist/zh/api/build-preset.html +0 -82
  174. package/docs/.island/dist/zh/api/design-system.html +0 -149
  175. package/docs/.island/dist/zh/api/dev.html +0 -46
  176. package/docs/.island/dist/zh/api/index.html +0 -41
  177. package/docs/.island/dist/zh/api/plugin.html +0 -48
  178. package/docs/.island/dist/zh/api/test.html +0 -59
  179. package/docs/.island/dist/zh/guide/before-getting-started.html +0 -127
  180. package/docs/.island/dist/zh/guide/build-your-ui.html +0 -41
  181. package/docs/.island/dist/zh/guide/command-preview.html +0 -100
  182. package/docs/.island/dist/zh/guide/extension.html +0 -41
  183. package/docs/.island/dist/zh/guide/getting-started.html +0 -79
  184. package/docs/.island/dist/zh/guide/modify-output-product.html +0 -140
  185. package/docs/.island/dist/zh/guide/publish-your-project.html +0 -92
  186. package/docs/.island/dist/zh/guide/test-your-project.html +0 -72
  187. package/docs/.island/dist/zh/guide/use-micro-generator.html +0 -65
  188. package/docs/.island/dist/zh/guide/using-storybook.html +0 -114
  189. package/docs/.island/dist/zh/guide/welcome.html +0 -53
  190. package/docs/.island/dist/zh/guide/why-module-engineering-solution.html +0 -49
  191. package/docs/.island/dist/zh/index.html +0 -42
  192. package/docs/.island/index.html +0 -39
  193. package/docs/en/api/design-system.md +0 -524
  194. package/docs/en/api/dev.md +0 -32
  195. package/docs/en/api/plugin.md +0 -34
  196. package/docs/zh/api/build-config.md +0 -570
  197. package/docs/zh/api/dev.md +0 -33
  198. package/docs/zh/api/plugins.md +0 -108
@@ -0,0 +1,4 @@
1
+ {
2
+ "label": "Introduction",
3
+ "sidebar_position": 1
4
+ }
@@ -1,3 +1,7 @@
1
+ ---
2
+ sidebar_position: 3
3
+ ---
4
+
1
5
  # Quick start
2
6
 
3
7
  ## 3 minute demo
@@ -21,15 +25,16 @@ Then add the command `"build": "modern build"` to your project's `package.json`
21
25
 
22
26
  ```json
23
27
  {
24
- "scripts": {
25
- "build": "modern build"
26
- }
28
+ "scripts": {
29
+ "build": "modern build"
30
+ }
27
31
  }
28
32
  ```
29
33
 
30
34
  If your project has a `src/index.(js|jsx)` file or both `src/index.(ts|tsx)` and `tsconfig.json` files, then congratulations you can run the `npm run build` command directly to build your project with Module Tools.
31
35
 
32
36
  **If you want to see real projects that use the module engineering solution, you can execute the following command**.
37
+
33
38
  ```bash
34
39
  git clone https://github.com/modern-js-dev/module-tools-examples
35
40
  cd module-tools-example
@@ -62,6 +67,7 @@ Next, in the issue interaction, follow the options below.
62
67
  ? Please select the development language TS
63
68
  ? Please select the package management tool pnpm
64
69
  ```
70
+
65
71
  > The project name is the value of the `"name"` field in `package.json`.
66
72
 
67
73
  Then the process of initializing the project will start. After the project directory and files are generated and the dependencies are installed, a complete module project is created.
@@ -75,4 +81,3 @@ Choose your tutorial scenario...
75
81
  - I'm a beginner and need to learn [basic usage](/en/guide/before-getting-started) of Module Tools.
76
82
  - I have learned the basic usage of Module Tools and can learn [advanced usage](/en/guide/before-getting-started) of Module Tools.
77
83
  - I am the maintainer of the project and need to learn how to develop plugins for Module Tools and learn more about Module Tools Advanced.
78
-
@@ -1,3 +1,7 @@
1
+ ---
2
+ sidebar_position: 1
3
+ ---
4
+
1
5
  # Welcome to Module Tools
2
6
 
3
7
  Module Tools is a modules engineering solution for Modern.js, as well as a core dependency. It allows developers to build, debug, and publish module type project more easily. A module type project can mostly be thought of as an npm package type project, which may be a component, component library or tool library project.
@@ -1,3 +1,7 @@
1
+ ---
2
+ sidebar_position: 2
3
+ ---
4
+
1
5
  # Why module project solution
2
6
 
3
7
  You've probably all experienced it: when developing a component library or tool library from scratch, we have to consider not only how to write the code logic of the project itself, but also how to build, debug, test, format the code, and other things that have nothing to do with the code logic.
@@ -12,6 +16,6 @@ To ensure the quality of the code and the integrity of the project, we often nee
12
16
 
13
17
  If you have to go through all this work every time you develop a module type project, you will spend most of your development time in the beginning on these things that are not related to code implementation. If we could provide a module engineering solution that would help developers to solve the project engineering issues and allow them to focus more on code implementation, it would greatly improve the module type project development experience.
14
18
 
15
- ![Not using engineering solution vs. using engineering solution](/why-module-solution.png)
19
+ ![Not using engineering solution vs. using engineering solution](https://lf3-static.bytednsdoc.com/obj/eden-cn/uhbfnupenuhf/module-tools/why-module-solution.png)
16
20
 
17
21
  Modern.js, in order to make developing module type projects easier, provides a module engineering solution in order to solve the above mentioned problems and provides the main features using Module Tools. **Module-tools can be understood as a tool dedicated to the development of module type projects**.
package/docs/en/index.md CHANGED
@@ -2,16 +2,13 @@
2
2
  pageType: home
3
3
 
4
4
  hero:
5
- name: Module tools
5
+ name: Modern.js Module
6
6
  text: 模块工程解决方案
7
7
  tagline: 简单、强大、高性能的现代化npm包开发方案
8
- image:
9
- src: /island.png
10
- alt: Island
11
8
  actions:
12
9
  - theme: brand
13
10
  text: 快速开始
14
- link: /zh/guide/getting-started
11
+ link: /guide/getting-started
15
12
 
16
13
  features:
17
14
  - title: 'Libuild: 现代库构建方案'
@@ -33,3 +30,4 @@ features:
33
30
  details: 通过其插件扩展机制,你可以轻松的扩展Module tools的各项能力。
34
31
  icon: 🎨
35
32
  ---
33
+ # index
@@ -0,0 +1,4 @@
1
+ {
2
+ "label": "Guide",
3
+ "sidebar_position": 1
4
+ }
@@ -0,0 +1,84 @@
1
+ ---
2
+ sidebar_position: 1
3
+ ---
4
+
5
+ # Quick Start
6
+
7
+ Module engineering solution not only provides a rich set of features, but also supports extending the capabilities of the current project by way of plugins.
8
+
9
+ We can quickly see how to write a module-tools plugin by using the following example.
10
+
11
+ <CH.Spotlight>
12
+
13
+ ```md . /project
14
+ . /project .
15
+ ├── plugins
16
+ │ └── example.ts
17
+ ├── src/
18
+ └── modern.config.ts
19
+ ```
20
+
21
+ ---
22
+
23
+ First we create `. /plugins/example.ts` file under the initialized project.
24
+
25
+ ```md . /project
26
+
27
+ ```
28
+
29
+ ---
30
+
31
+ Next add the code for the plugin to the `example.ts` file.
32
+
33
+ ```ts
34
+ import type { CliPlugin, ModuleTools } from '@modern-js/module-tools';
35
+
36
+ export const ExamplePlugin = (): CliPlugin<ModuleTools> => {
37
+ return {
38
+ name: 'example',
39
+ setup() {
40
+ console.info('this is example plugin');
41
+ return {
42
+ // use hooks
43
+ afterBuild() {
44
+ console.info('build over');
45
+ }
46
+ };
47
+ };
48
+ };
49
+ };
50
+ ```
51
+
52
+ ---
53
+
54
+ Then we register the plugin we just wrote via the [`plugins`](/en/api/plugins) API.
55
+
56
+ ```ts . /modern.config.ts
57
+ import { ExamplePlugin } from '. /plugins/example';
58
+ export default defineConfig({
59
+ plugins: [ExamplePlugin()],
60
+ });
61
+ ```
62
+
63
+ ---
64
+
65
+ Finally, run `modern build` and you will see.
66
+
67
+ ```bash terminal
68
+ This is example plugin
69
+ Build succeed: 510.684ms
70
+ build over
71
+ ```
72
+
73
+ </CH.Spotlight>
74
+
75
+ With the above example, we learned the following things.
76
+
77
+ - The recommended plugin directory structure
78
+ - The initialization code of the plugin
79
+ - Plugin registration
80
+
81
+ In addition to the above, we also need to understand.
82
+
83
+ - [plugin objects, type definitions and recommended configuration items](/en/plugins/guide/plugin-object)
84
+ - [setup functions, `api` object parameters, lifecycle hooks](/en/plugins/guide/setup-functions)
@@ -0,0 +1,85 @@
1
+ ---
2
+ sidebar_position: 2
3
+ ---
4
+
5
+ # Plugin Object
6
+
7
+ The module-tools plugin is an object, and the object contains the following properties.
8
+
9
+ - `name`: The name of the plugin, a unique identifier.
10
+ - `setup`: plugin initialization function, which will be executed only once. setup function can return a [Hooks object](), and module-tools will execute the function corresponding to the Hook defined on the Hooks object at a specific time.
11
+
12
+ For example, in the following plugin code example, the `beforeBuild` function is triggered before the project starts the build task and the `build start` log is printed.
13
+
14
+ <CH.Code>
15
+
16
+ ```ts . /plugins/demo.tsx
17
+ import type { CliPlugin, ModuleTools } from '@modern-js/module-tools';
18
+
19
+ const MyPlugin: CliPlugin<ModuleTools> = {
20
+ name: 'my-plugin',
21
+
22
+ setup() {
23
+ return {
24
+ // this is hook
25
+ beforeBuild: () => {
26
+ console.info('build start');
27
+ },
28
+ };
29
+ },
30
+ };
31
+ ```
32
+
33
+ ---
34
+
35
+ ```ts . /modern.config.ts
36
+ import { MyPlugin } from '. /plugins/demo';
37
+ export default {
38
+ plugins: [MyPlugin()],
39
+ };
40
+ ```
41
+
42
+ </CH.Code>
43
+
44
+ ## Plugin type definitions
45
+
46
+ When using TypeScript, you can introduce the built-in `CliPlugin` and `ModuleTools` types to provide the correct type derivation for plugins: ``
47
+
48
+ ```ts
49
+ import type { CliPlugin, ModuleTools } from '@modern-js/module-tools';
50
+
51
+ const MyPlugin: CliPlugin<ModuleTools> = {
52
+ name: 'my-plugin',
53
+
54
+ setup() {
55
+ const foo = '1';
56
+
57
+ return {
58
+ // this is hook
59
+ afterBuild: () => {
60
+ //...
61
+ },
62
+ };
63
+ },
64
+ };
65
+ ```
66
+
67
+ ## Plugin configuration items
68
+
69
+ **It is recommended to write the plugin as a function**, so that the plugin can receive configuration items via function entry.
70
+
71
+ ```ts
72
+ import type { CliPlugin, ModuleTools } from '@modern-js/module-tools';
73
+
74
+ type MyPluginOptions = {
75
+ foo: string;
76
+ };
77
+
78
+ const MyPlugin = (options: MyPluginOptions): CliPlugin<ModuleTools> => ({
79
+ name: 'my-plugin',
80
+
81
+ setup() {
82
+ console.log(options.foo);
83
+ },
84
+ });
85
+ ```
@@ -0,0 +1,117 @@
1
+ ---
2
+ sidebar_position: 3
3
+ ---
4
+
5
+ # Setup function
6
+
7
+ In the [[Plugin object]](/zh/plugins/guide/plugin-object) section we know that the plug-in object contains a `setup` function that not only contains an `api` object parameter, but also returns a Hooks object.
8
+
9
+ ## Plugin API objects
10
+
11
+ The `setup` function of the plugin will provide an `api` object parameter, and you can call some of the methods provided on this object to get information about the configuration, project context, etc.
12
+
13
+ ```ts
14
+ export default (): CliPlugin<ModuleTools> => ({
15
+ name: 'my-plugin',
16
+
17
+ setup(api) {
18
+ // Get the original configuration of the application
19
+ const config = api.useConfigContext();
20
+ // Get the application runtime context
21
+ const appContext = api.useAppContext();
22
+ // Get the final configuration after resolving
23
+ const resolvedConfig = api.useResolvedConfigContext();
24
+ },
25
+ });
26
+ ```
27
+
28
+ ### `api.useAppContext`
29
+
30
+ Used to get project context information.
31
+
32
+ ```ts
33
+ const useAppContext: () => IAppContext;
34
+
35
+ interface IAppContext {
36
+ appDirectory: string;
37
+ configFile: string | false;
38
+ packageName: string;
39
+ nodeModulesDirectory: string;
40
+ internalDirectory: string;
41
+ plugins: {
42
+ cli?: any;
43
+ server?: any;
44
+ }[];
45
+ }
46
+ ```
47
+
48
+ :::info
49
+ We can see through the actual type file that there are other fields, but the only ones that make sense for the module project at the moment are the above. api object other methods are the same.
50
+ :::
51
+
52
+ ### `api.useResolvedConfigContext`
53
+
54
+ Used to get the final configuration after parsing.
55
+
56
+ :::info
57
+ If you need to get the build-related final configuration, you need to use the [`beforeBuild`]() Hook.
58
+ :::
59
+
60
+ ```ts
61
+ const useResolvedConfigContext: () => NormalizedConfig;
62
+
63
+ interface NormalizedConfig {
64
+ buildConfig: PartialBuildConfig;
65
+ buildPreset: BuildPreset;
66
+ designSystem?: Record<string, any>;
67
+ dev: Dev;
68
+ plugins: PluginConfig;
69
+ runtime: RuntimeConfig;
70
+ runtimeByEntries?: RuntimeByEntriesConfig;
71
+ _raw: UserConfig;
72
+ }
73
+ ```
74
+
75
+ ### `api.useHookRunners`
76
+
77
+ Used to get the executors of Hooks and trigger the execution of a specific Hook.
78
+
79
+ ```ts
80
+ import type { CliPlugin } from '@modern-js/core';
81
+
82
+ export default (): CliPlugin => ({
83
+ name: 'my-plugin',
84
+
85
+ async setup(api) {
86
+ const hookRunners = api.useHookRunners();
87
+ // trigger the afterBuild Hook
88
+ await hookRunners.afterBuild();
89
+ },
90
+ });
91
+ ```
92
+
93
+ ## Asynchronous setup
94
+
95
+ The setup of a CLI plugin can be an asynchronous function that performs asynchronous logic during the initialization process.
96
+
97
+ ```ts
98
+ export default (): CliPlugin<ModuleTools> => ({
99
+ name: 'my-plugin',
100
+
101
+ async setup(api) {
102
+ await doSomething();
103
+ },
104
+ });
105
+ ```
106
+
107
+ ## Life cycle hooks
108
+
109
+ We know that the `setup` function returns a Hooks object, which can also be understood as an object with module-tools lifecycle hooks.
110
+
111
+ Currently there are two main types of hooks.
112
+
113
+ - build hooks: triggered only when the `build` command is executed to build the source code product.
114
+ - `buildPlatform` hook: triggered only when the `build --platform` command is executed to generate other build products.
115
+ - debug hooks: hooks that are triggered when running the `dev` command.
116
+
117
+ See the [API documentation](/en/api/plugin-hooks) for a full list of lifecycle hooks.
@@ -0,0 +1,4 @@
1
+ {
2
+ "label": "Plugins List",
3
+ "sidebar_position": 2
4
+ }
@@ -0,0 +1,6 @@
1
+ # Overview
2
+
3
+ ## Official Plugin
4
+
5
+ (Under Building)
6
+
@@ -0,0 +1,4 @@
1
+ {
2
+ "label": "配置项",
3
+ "sidebar_position": 1
4
+ }