@modern-js/main-doc 0.0.0-nightly-20241104170657 → 0.0.0-nightly-20241106064312

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 (44) hide show
  1. package/docs/en/components/init-app.mdx +0 -1
  2. package/docs/en/components/init-rspack-app.mdx +0 -1
  3. package/docs/en/guides/get-started/introduction.mdx +1 -38
  4. package/docs/zh/components/default-mwa-generate.mdx +0 -1
  5. package/docs/zh/components/init-app.mdx +0 -1
  6. package/docs/zh/components/init-rspack-app.mdx +0 -1
  7. package/docs/zh/guides/get-started/introduction.mdx +1 -36
  8. package/package.json +2 -2
  9. package/docs/en/guides/topic-detail/generator/_meta.json +0 -17
  10. package/docs/en/guides/topic-detail/generator/create/_meta.json +0 -1
  11. package/docs/en/guides/topic-detail/generator/create/config.mdx +0 -59
  12. package/docs/en/guides/topic-detail/generator/create/option.md +0 -146
  13. package/docs/en/guides/topic-detail/generator/create/use.mdx +0 -48
  14. package/docs/en/guides/topic-detail/generator/new/_meta.json +0 -1
  15. package/docs/en/guides/topic-detail/generator/new/config.md +0 -115
  16. package/docs/en/guides/topic-detail/generator/new/option.md +0 -67
  17. package/docs/en/guides/topic-detail/generator/new/use.md +0 -75
  18. package/docs/en/guides/topic-detail/generator/plugin/_meta.json +0 -11
  19. package/docs/en/guides/topic-detail/generator/plugin/api/afterForged.md +0 -49
  20. package/docs/en/guides/topic-detail/generator/plugin/api/context.md +0 -184
  21. package/docs/en/guides/topic-detail/generator/plugin/api/input.md +0 -124
  22. package/docs/en/guides/topic-detail/generator/plugin/api/onForged.md +0 -310
  23. package/docs/en/guides/topic-detail/generator/plugin/category.md +0 -88
  24. package/docs/en/guides/topic-detail/generator/plugin/context.md +0 -104
  25. package/docs/en/guides/topic-detail/generator/plugin/structure.md +0 -106
  26. package/docs/en/guides/topic-detail/generator/plugin/use.md +0 -33
  27. package/docs/zh/guides/topic-detail/generator/_meta.json +0 -17
  28. package/docs/zh/guides/topic-detail/generator/create/_meta.json +0 -1
  29. package/docs/zh/guides/topic-detail/generator/create/config.mdx +0 -60
  30. package/docs/zh/guides/topic-detail/generator/create/option.md +0 -146
  31. package/docs/zh/guides/topic-detail/generator/create/use.mdx +0 -48
  32. package/docs/zh/guides/topic-detail/generator/new/_meta.json +0 -1
  33. package/docs/zh/guides/topic-detail/generator/new/config.md +0 -116
  34. package/docs/zh/guides/topic-detail/generator/new/option.md +0 -67
  35. package/docs/zh/guides/topic-detail/generator/new/use.md +0 -74
  36. package/docs/zh/guides/topic-detail/generator/plugin/_meta.json +0 -11
  37. package/docs/zh/guides/topic-detail/generator/plugin/api/afterForged.md +0 -50
  38. package/docs/zh/guides/topic-detail/generator/plugin/api/context.md +0 -184
  39. package/docs/zh/guides/topic-detail/generator/plugin/api/input.md +0 -124
  40. package/docs/zh/guides/topic-detail/generator/plugin/api/onForged.md +0 -310
  41. package/docs/zh/guides/topic-detail/generator/plugin/category.md +0 -93
  42. package/docs/zh/guides/topic-detail/generator/plugin/context.md +0 -105
  43. package/docs/zh/guides/topic-detail/generator/plugin/structure.md +0 -106
  44. package/docs/zh/guides/topic-detail/generator/plugin/use.md +0 -33
@@ -1,11 +0,0 @@
1
- [
2
- "structure",
3
- "category",
4
- "use",
5
- "context",
6
- {
7
- "type": "dir",
8
- "name": "api",
9
- "label": "API"
10
- }
11
- ]
@@ -1,49 +0,0 @@
1
- ---
2
- sidebar_position: 3
3
- ---
4
-
5
- # afterForged
6
-
7
- `afterForged` is a lifecycle function used for other step operations after file operations in generator plugin.
8
-
9
- ## Types
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
- The APIs provided by the `api` parameter will be introduced below.
30
-
31
- ### isInGitRepo
32
-
33
- Checks whether the current project is a git repository.
34
-
35
- ### initGitRepo
36
-
37
- Initializes the current project as a git repository.
38
-
39
- ### gitAddAndCommit
40
-
41
- Commits changes to the current repository.
42
-
43
- Parameters:
44
-
45
- - `commitMessage`: commit message.
46
-
47
- ### install
48
-
49
- Installs dependencies in the root directory of the project. The `install` function will use the corresponding package manager according to the value of `packageManager` to install dependencies.
@@ -1,184 +0,0 @@
1
- ---
2
- sidebar_position: 1
3
- ---
4
-
5
- # context
6
-
7
- The generator plugin exports a function by default in the `main` file, and the function parameter is `context`. All APIs provided by the generator plugin are provided by this `context`.
8
-
9
- ## Types
10
-
11
- Let's first understand the type definition of `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
- The contents provided by `context` can be mainly divided into three categories:
30
-
31
- - Get the information of the current generator execution environment.
32
-
33
- - Operate input.
34
-
35
- - Generator plugin lifecycle function.
36
-
37
-
38
- The generator plugin APIs will be introduced from these three categories below.
39
-
40
- ### Get Information
41
-
42
- #### locale
43
-
44
- Gets the language of the generator plugin execution environment. `@modern-js/create` provides two languages, `zh` and `en`, which correspond to these two values.
45
-
46
- #### isFileExist
47
-
48
- Checks whether a file exists. We often need to confirm whether the target project file exists before defining the operation. This API can be used directly for this purpose.
49
-
50
- For example, we need to find out if the `package.json` file exists and then do someing:
51
-
52
- ```ts
53
- const isExist = await context.isFileExist('package.json');
54
- if (isExist) {
55
- ...
56
- }
57
- ```
58
-
59
- #### readDir
60
-
61
- Gets the file list in a folder. We often need to get the file list under the target project folder before defining the operation. This API can be used directly for this purpose.
62
-
63
- For example, we need to get all files under the `src` folder and then do someing:
64
-
65
- ```ts
66
- const files = await context.readDir('src');
67
-
68
- files.map(name => {
69
- ...
70
- });
71
- ```
72
-
73
- ### Input Operations
74
-
75
- The `key` parameter used in input operations can refer to [Configuration Parameters](/guides/topic-detail/generator/create/config.html) and use the key under the solution’s scheme, that is, it does not support `solution` and `scenes`.
76
-
77
- The input parameter in input operations corresponds to the schema type described in [Input](/guides/topic-detail/generator/plugin/api/input.html).
78
-
79
- #### addInputBefore
80
-
81
- Adds a question before the specified input `key`.
82
-
83
- For example:
84
-
85
- ```ts
86
- context.addInputBefore('packageManager', {
87
- type: 'object',
88
- properties: {
89
- language: {
90
- type: 'string',
91
- title: 'Please select the programming language:',
92
- enum: [
93
- { label: 'TS', value: 'ts' },
94
- { label: 'ES6+', value: 'js' },
95
- ],
96
- },
97
- },
98
- });
99
- ```
100
-
101
- #### addInputAfter
102
-
103
- Adds a question after the specified input `key`.
104
-
105
- For example:
106
-
107
- ```ts
108
- context.addInputAfter('packageManager', {
109
- type: 'object',
110
- properties: {
111
- language: {
112
- type: 'string',
113
- title: 'Please select the programming language:',
114
- enum: [
115
- { label: 'TS', value: 'ts' },
116
- { label: 'ES6+', value: 'js' },
117
- ],
118
- },
119
- },
120
- });
121
- ```
122
-
123
- :::info
124
- 1. The `key` for adding a question cannot be the same as the `key` of the question provided by Modern.js solution scheme itself.
125
- 2. The priority of adding a question with `addInputAfter` is higher than that of `addInputBefore`. When adding an After question to a key and adding a Before question to the next key, the After question will be before the Before question.
126
- 3. When adding multiple questions before or after the same `key`, this method can be called multiple times, and the order of the questions will be arranged according to the calling sequence.
127
-
128
- :::
129
-
130
- #### setInput
131
-
132
- Sets the attributes of the specified input `key`.
133
-
134
- For example, set the `title` attribute of `packageName`:
135
-
136
- ```ts
137
- context.setInput('packageName', 'title', "Name");
138
- ```
139
-
140
- :::info
141
- For input options provided by Modern.js solution schemes, only deletion is supported, and adding will cause logical judgment problems in the code.
142
- :::
143
-
144
-
145
- #### setInputValue
146
-
147
- Sets the default value of the specified input `key`.
148
-
149
- For example, set the default value of `packageManager`:
150
-
151
- ```ts
152
- context.setInputValue({
153
- packageManager: 'npm',
154
- });
155
- ```
156
-
157
- :::info
158
- After setting, the question still needs to be interactive, but the default value configured by the generator plugin will be used.
159
- :::
160
-
161
- #### setDefaultConfig
162
-
163
- Sets the default value of the specified input `key`.
164
-
165
- For example, set the default value of `packageManager`:
166
-
167
- ```ts
168
- context.setDefaultConfig({
169
- packageManager: 'npm',
170
- });
171
- ```
172
-
173
- :::info
174
- After setting, the corresponding question will no longer be displayed, which is consistent with the `--config` behavior specified by `@modern-js/create`. Does not support setting `vertical` and `projectOrg`.
175
- :::
176
-
177
- #### setGitMessage
178
-
179
- Sets the initial git commit message. Modern.js defaults to the git initialization commit message as `feat: init`, which can be modified by this function.
180
-
181
-
182
- ### Lifecycle Functions
183
-
184
- The lifecycle functions are relatively complex and will be introduced separately in the following two sections, [`onForged`](/guides/topic-detail/generator/plugin/api/onForged.html) and [`afterForged`](/guides/topic-detail/generator/plugin/api/afterForged.html).
@@ -1,124 +0,0 @@
1
- ---
2
- sidebar_position: 4
3
- ---
4
-
5
- # Input
6
-
7
- Generator plugin provides a way to interact with users through Input, which is defined using JSON Schema:
8
-
9
- For example:
10
-
11
- ```js
12
- const schema = {
13
- type: 'object',
14
- properties: {
15
- language: {
16
- type: 'string',
17
- title: 'Please select the programming language:',
18
- enum: [
19
- { label: 'TS', value: 'ts' },
20
- { label: 'ES6+', value: 'js' },
21
- ],
22
- },
23
- },
24
- };
25
- ```
26
-
27
- JSON Schema format is based on the open source [Formily](https://formilyjs.org/) Schema format. The following are the supported fields:
28
-
29
- ## type
30
-
31
- Defines the type of the current schema. Currently supported types are `string`, `number`, and `object`. `string` type is used for string inputs and dropdown options. `object` type is used for nesting schemas and needs to be used with the `properties` attribute.
32
-
33
- ## title
34
-
35
- Defines the display name of the current schema.
36
-
37
- ## default
38
-
39
- Defines the default value of the current schema.
40
-
41
- ## enum
42
-
43
- Defines the options when the current schema is a dropdown selection.
44
-
45
- The sub-items support `string` or `{ label: string; value: string}` types. When the value and display value are the same in the dropdown options, `string` can be used directly to define the options.
46
-
47
- When representing multiple selection options, set the `default` field to `[]`.
48
-
49
- ## x-validator
50
-
51
- Defines the validation rules for the current schema. When the schema is an input type, validation will be automatically performed after input completion.
52
-
53
- The validation rules supported here are provided by [Formily](https://formilyjs.org/zh-CN/guide/advanced/validate), for example, the maximum value is 5:
54
-
55
- ```js
56
- const schema = {
57
- type: 'object',
58
- properties: {
59
- max_5: {
60
- type: 'number',
61
- title: 'Maximum value (>5 will cause an error)',
62
- 'x-validator': {
63
- maximum: 5,
64
- },
65
- },
66
- },
67
- };
68
- ```
69
-
70
- It also supports using validation functions directly:
71
-
72
- ```js
73
- const schema = {
74
- type: 'object',
75
- properties: {
76
- path: {
77
- type: 'string',
78
- title: 'Can only contain numbers and letters',
79
- 'x-validator': value => {
80
- if (!/^[0-9a-zA-Z]*$/g.test(value)) {
81
- return 'Incorrect format';
82
- }
83
- return '';
84
- },
85
- },
86
- },
87
- };
88
- ```
89
-
90
- ## x-reactions
91
-
92
- Use linkage between schemas. This is exactly the same as [Formily linkage rules](https://formilyjs.org/zh-CN/guide/advanced/linkages).
93
-
94
- For example:
95
-
96
- ```js
97
- const schema = {
98
- type: 'object',
99
- properties: {
100
- name: {
101
- type: 'string',
102
- title: 'Name',
103
- },
104
- path: {
105
- type: 'string',
106
- title: 'Path',
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
- Organize the structure of the current schema and define sub-forms. `properties` is an object, where the `key` is the schema keyword and the `value` is a schema object as described above.
@@ -1,310 +0,0 @@
1
- ---
2
- sidebar_position: 2
3
- ---
4
-
5
- # onForged
6
-
7
- `onForged` is a lifecycle function used for file operations in generator plugin.
8
-
9
- ## Types
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
- The `onForged` parameter is a callback function with `api` and `input` as parameters, which are used to provide the APIs and current input information provided by the lifecycle function.
38
-
39
- ## Concepts
40
-
41
- ### File Types
42
-
43
- The generator plugin classifies files into four categories:
44
-
45
- - Text files
46
-
47
- Files with pure text content that can be processed using [Handlebars](https://handlebarsjs.com/) or [EJS](https://ejs.co/) templates.
48
-
49
- - Binary files
50
-
51
- Files such as images, audio, and video.
52
-
53
- - JSON files
54
-
55
- Files in JSON format.
56
-
57
- - Text list files
58
-
59
- Files composed of lines of text, such as `.gitignore`, `.editorconfig`, and `.npmrc`.
60
-
61
- The type definitions for the four types of files are:
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
- The APIs provided by the `api` parameter will be introduced below.
75
-
76
- ### addFile
77
-
78
- Adds a single file.
79
-
80
- Parameter types:
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`: File type.
94
- - `file`: Target file path, relative to the target project directory.
95
- - `template`: Template content, the value of this field can be directly used to render the file. Lower priority than `templateFile`.
96
- - `templateFile`: Template file path, relative to the templates directory.
97
- - `force`: Whether to force overwrite when the target file exists, default is false.
98
- - `data`: Template rendering data.
99
-
100
- :::info
101
- Text files are processed using Handlebars by default. If the template file ends with `.ejs`, [EJS](https://ejs.co/) will be used for template rendering.
102
- :::
103
-
104
- For example, add the template file `App.tsx.hanlebars` to `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
- ### addManyFiles
117
-
118
- Adds multiple files, usually used to add multiple files to the same target directory.
119
-
120
- Parameter types:
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`: File type.
134
- - `destination`: Target folder, relative path to the target project directory.
135
- - `templateFiles`: Template file list, supporting regular expressions from [globby](https://www.npmjs.com/package/globby).
136
- - `templateBase`: Common path of template files. When using this parameter, the target file will automatically delete this path.
137
- - `fileNameFunc`: Function to rename files. During the file addition process, the file name will be passed to this function in turn, and the renaming can be performed as needed.
138
- - `data`: Template rendering data.
139
-
140
- For example, render all files in the `src-ts` directory of the template file to the `src` directory:
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
- Update fields in a JSON file.
157
-
158
- Parameter types:
159
-
160
- ```ts
161
- fileName: strings
162
- updateInfo: Record<string, unknown>
163
- ```
164
-
165
- - `fileName`: JSON file path, relative to the target project path.
166
- - `updateInfo`: Update information. Nested field updates need to be flattened, otherwise the entire update will cause content loss.
167
-
168
- For example, update the `name` field of `package.json`:
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
- For example, update the version of `react-dom` in `dependencies`:
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
- Update the contents of a text list file.
189
-
190
- Parameter types:
191
-
192
- ```ts
193
- fileName: string
194
- update: (content: string[]) => string[]
195
- ```
196
-
197
- - `fileName`: Text list file path, relative to the target project path.
198
- - `update`: Update function. The parameter is an array divided by `\n` of the current file content, and the return value is also the modified array after modification. `@modern-js/create` will automatically merge it with `\n` and write it to the source file.
199
-
200
- For example, add the `dist` directory to the `.gitinore` file:
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 (not recommended)
209
-
210
- In addition to configuring in `modern.config.[tj]s`, Modern.js configuration also supports configuring `modernConfig` in `package.json`. This function is used to update this field.
211
-
212
- Parameter types:
213
-
214
- ```ts
215
- updateInfo: Record<string, any>
216
- ```
217
-
218
- - `updateInfo`: Update content information. `updateModernConfig` is a package based on `updateJSONFile`, which will automatically update under the `modernConfig` field. Only the configuration fields under `modernConfig` need to be filled in `updateInfo`.
219
-
220
- For example, enable 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
- Delete files.
231
-
232
- Parameter types:
233
-
234
- ```ts
235
- fileName: string
236
- ```
237
-
238
- - `fileName`: The path of the file to be deleted, relative to the target project path.
239
-
240
- ### rmDir
241
-
242
- Delete a folder.
243
-
244
- Parameter types:
245
-
246
- ```ts
247
- dirName: string
248
- ```
249
-
250
- - `dirName`: The path of the folder to be deleted, relative to the target project path.
251
-
252
- ### addHelper
253
-
254
- Add a [custom helper](https://handlebarsjs.com/guide/#custom-helpers) rendered by handlebrs.
255
-
256
- Parameter types:
257
-
258
- ```ts
259
- name: string
260
- fn: Handlebars.HelperDelegate
261
- ```
262
-
263
- - `name`: Helper function name.
264
- - `fn`: Helper function implementation.
265
-
266
- ### addPartial
267
-
268
- Add a [Partial](https://handlebarsjs.com/guide/partials.html#basic-partials) rendered by Handlebars.
269
-
270
- Parameter types:
271
-
272
- ```ts
273
- name: string
274
- str: Handlebars.Template
275
- ```
276
-
277
- - `name`: Partial name.
278
- - `str`: Template string of the Partial.
279
-
280
- ### createElement
281
-
282
- Automatically run the `new` command to create project elements.
283
-
284
- Parameter types:
285
-
286
- ```ts
287
- element: ActionElement
288
- params: Record<string, unknown>
289
- ```
290
-
291
- - `element`: Type of project element, new entry or new custom Web Server source directory.
292
- - `params`: Other parameters corresponding to creating project elements.
293
-
294
- ### enableFunc
295
-
296
- Automatically run the `new` command to enable optional features.
297
-
298
- Parameter types:
299
-
300
- ```ts
301
- func: ActionFunction
302
- params?: Record<string, unknown>
303
- ```
304
-
305
- - `func`: Name of the feature to enable.
306
- - `params`: Other parameters corresponding to enabling the feature.
307
-
308
- :::info
309
- Refer to [Configuration Parameters](/guides/topic-detail/generator/new/config.html) for creating project elements and enabling feature configurations.
310
- :::