@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.
- package/docs/en/components/init-app.mdx +0 -1
- package/docs/en/components/init-rspack-app.mdx +0 -1
- package/docs/en/guides/get-started/introduction.mdx +1 -38
- package/docs/zh/components/default-mwa-generate.mdx +0 -1
- package/docs/zh/components/init-app.mdx +0 -1
- package/docs/zh/components/init-rspack-app.mdx +0 -1
- package/docs/zh/guides/get-started/introduction.mdx +1 -36
- package/package.json +2 -2
- package/docs/en/guides/topic-detail/generator/_meta.json +0 -17
- package/docs/en/guides/topic-detail/generator/create/_meta.json +0 -1
- package/docs/en/guides/topic-detail/generator/create/config.mdx +0 -59
- package/docs/en/guides/topic-detail/generator/create/option.md +0 -146
- package/docs/en/guides/topic-detail/generator/create/use.mdx +0 -48
- package/docs/en/guides/topic-detail/generator/new/_meta.json +0 -1
- package/docs/en/guides/topic-detail/generator/new/config.md +0 -115
- package/docs/en/guides/topic-detail/generator/new/option.md +0 -67
- package/docs/en/guides/topic-detail/generator/new/use.md +0 -75
- package/docs/en/guides/topic-detail/generator/plugin/_meta.json +0 -11
- package/docs/en/guides/topic-detail/generator/plugin/api/afterForged.md +0 -49
- package/docs/en/guides/topic-detail/generator/plugin/api/context.md +0 -184
- package/docs/en/guides/topic-detail/generator/plugin/api/input.md +0 -124
- package/docs/en/guides/topic-detail/generator/plugin/api/onForged.md +0 -310
- package/docs/en/guides/topic-detail/generator/plugin/category.md +0 -88
- package/docs/en/guides/topic-detail/generator/plugin/context.md +0 -104
- package/docs/en/guides/topic-detail/generator/plugin/structure.md +0 -106
- package/docs/en/guides/topic-detail/generator/plugin/use.md +0 -33
- package/docs/zh/guides/topic-detail/generator/_meta.json +0 -17
- package/docs/zh/guides/topic-detail/generator/create/_meta.json +0 -1
- package/docs/zh/guides/topic-detail/generator/create/config.mdx +0 -60
- package/docs/zh/guides/topic-detail/generator/create/option.md +0 -146
- package/docs/zh/guides/topic-detail/generator/create/use.mdx +0 -48
- package/docs/zh/guides/topic-detail/generator/new/_meta.json +0 -1
- package/docs/zh/guides/topic-detail/generator/new/config.md +0 -116
- package/docs/zh/guides/topic-detail/generator/new/option.md +0 -67
- package/docs/zh/guides/topic-detail/generator/new/use.md +0 -74
- package/docs/zh/guides/topic-detail/generator/plugin/_meta.json +0 -11
- package/docs/zh/guides/topic-detail/generator/plugin/api/afterForged.md +0 -50
- package/docs/zh/guides/topic-detail/generator/plugin/api/context.md +0 -184
- package/docs/zh/guides/topic-detail/generator/plugin/api/input.md +0 -124
- package/docs/zh/guides/topic-detail/generator/plugin/api/onForged.md +0 -310
- package/docs/zh/guides/topic-detail/generator/plugin/category.md +0 -93
- package/docs/zh/guides/topic-detail/generator/plugin/context.md +0 -105
- package/docs/zh/guides/topic-detail/generator/plugin/structure.md +0 -106
- package/docs/zh/guides/topic-detail/generator/plugin/use.md +0 -33
|
@@ -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
|
-
:::
|