@zohodesk/react-cli 1.1.8 → 1.1.10
Sign up to get free protection for your applications and to get access to all the features.
- package/.vscode/settings.json +25 -0
- package/README.md +95 -28
- package/bin/cli.js +13 -52
- package/docs/CustomChunks.md +12 -9
- package/lib/common/runPreProcess.js +66 -0
- package/lib/common/splitChunks.js +65 -45
- package/lib/common/testPattern.js +9 -9
- package/lib/configs/webpack.dev.config.js +6 -3
- package/lib/configs/webpack.docs.config.js +4 -2
- package/lib/configs/webpack.impact.config.js +4 -2
- package/lib/configs/webpack.prod.config.js +6 -3
- package/lib/deprecationLogger.js +40 -0
- package/lib/loaderUtils/getCSSLoaders.js +24 -7
- package/lib/pluginUtils/getDevPlugins.js +3 -2
- package/lib/pluginUtils/getProdPlugins.js +1 -1
- package/lib/plugins/ReportGeneratePlugin.js +8 -6
- package/lib/plugins/ResourceHintsPlugin.js +13 -3
- package/lib/plugins/UnusedFilesFindPlugin.js +7 -5
- package/lib/plugins/utils/fileHandling.js +36 -39
- package/lib/schemas/index.js +19 -36
- package/lib/utils/deprecationSupport.js +134 -0
- package/lib/utils/getOptions.js +19 -79
- package/lib/utils/index.js +14 -12
- package/lib/utils/initPreCommitHook.js +5 -5
- package/lib/utils/log.js +11 -0
- package/lib/utils/pullOrigin.js +3 -3
- package/lib/utils/reinstallDependencies.js +3 -3
- package/lib/utils/switchBranch.js +4 -2
- package/npm-shrinkwrap.json +94 -2
- package/package.json +2 -2
- package/templates/docs/css/markdown.css +1 -1
@@ -0,0 +1,25 @@
|
|
1
|
+
{
|
2
|
+
"cSpell.words": [
|
3
|
+
"classname",
|
4
|
+
"cmjs",
|
5
|
+
"devbuild",
|
6
|
+
"escodegen",
|
7
|
+
"expublish",
|
8
|
+
"gitclone",
|
9
|
+
"hgclone",
|
10
|
+
"mockapi",
|
11
|
+
"mockserver",
|
12
|
+
"nowatchserver",
|
13
|
+
"nowatchstart",
|
14
|
+
"postpublish",
|
15
|
+
"propertytojson",
|
16
|
+
"sslcert",
|
17
|
+
"sslcertupdate",
|
18
|
+
"sstest",
|
19
|
+
"uglifycss",
|
20
|
+
"valuereplacer",
|
21
|
+
"xmlhttprequest",
|
22
|
+
"zohodesk",
|
23
|
+
"zsecurity"
|
24
|
+
]
|
25
|
+
}
|
package/README.md
CHANGED
@@ -44,27 +44,82 @@ Now to run app
|
|
44
44
|
|
45
45
|
# Change Logs
|
46
46
|
|
47
|
+
# 1.1.10 (2-8-2023)
|
48
|
+
|
49
|
+
**Issue Fix:**
|
50
|
+
|
51
|
+
- undefined plugin postcss issue fixed for docs.
|
52
|
+
- unnecessary deprecation warning stopped. (for exclude config)
|
53
|
+
|
54
|
+
# 1.1.9 (25-7-2023)
|
55
|
+
|
56
|
+
**Features:-**
|
57
|
+
|
58
|
+
- we have added config file support for react-cli schema. the default config file name `build.config.js` support added. In `build.config.js` you must export configuration object under `config` key. And Note: `build.config.js` is high priority then `package.json` `react-cli` config.
|
59
|
+
- added support for using regex expression to get group of chunks chunkId via Resource Hint plugin prefetch/preload hook.
|
60
|
+
only will be activate when `resourceHints` => `allowPrefetchingMultipleChunks` as `true`
|
61
|
+
- added support for pattern as function for custom chunks split logic.
|
62
|
+
- added options to split chunks base config in the key `app` => `customChunksBaseConfig` as object
|
63
|
+
- added `postCssPluginOrder` feature :
|
64
|
+
|
65
|
+
- If `app > postCssPluginOrder` or `docs > postCssPluginOrder` is set to "false", default plugin order will be followed.
|
66
|
+
- If `app > postCssPluginOrder` or `docs > postCssPluginOrder` is set to "true", order preserved in `plugins` Object will be considered.
|
67
|
+
- If `app > postCssPluginOrder` or `docs > postCssPluginOrder` is set to an array with plugins in a custom order, the custom order will be considered.
|
68
|
+
|
69
|
+
- We use the same plugin names as in `patterns` for the plugins to execute successfully.
|
70
|
+
|
71
|
+
**Issue Fix**
|
72
|
+
|
73
|
+
- fixed file path separator issue with split chunks config for vendor exclude list for windows (that was work well for mac and ubuntu only issue in windows).
|
74
|
+
- fixed cssUniqueness pattern not working in docs.
|
75
|
+
|
76
|
+
**Changes**
|
77
|
+
|
78
|
+
- previously all custom chunks are enforce true, no we have given support for enforce false for chunks on splitChunks config.
|
79
|
+
|
47
80
|
# 1.1.8
|
48
81
|
|
49
82
|
**Issue Fix**
|
50
|
-
|
83
|
+
|
84
|
+
- Docs fix for Selector Replace 'always require argument' issue.
|
51
85
|
|
52
86
|
# 1.1.7
|
53
87
|
|
54
88
|
**Feature**
|
89
|
+
|
55
90
|
- Markdown parser feature added in docs
|
56
|
-
For more info please refer to :
|
57
|
-
[details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/2.0.0/docs/MarkdownParser.md)
|
91
|
+
For more info please refer to :
|
92
|
+
[details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/2.0.0/docs/MarkdownParser.md)
|
93
|
+
|
94
|
+
# 1.1.6-exp.2
|
95
|
+
|
96
|
+
- fixed file path separator issue with split chunks config for vendor exclude list.
|
97
|
+
- added support for not doing enforce true for chunks on splitChunks config.
|
98
|
+
|
99
|
+
# 1.1.5-exp.5
|
100
|
+
|
101
|
+
- fixed the issues regarding custom chunks base config schema.
|
102
|
+
|
103
|
+
# 1.1.5-exp.4
|
104
|
+
|
105
|
+
- added support for using regex expression to get group of chunks chunkId via Resource Hint plugin prefetch/preload hook.
|
106
|
+
|
107
|
+
# 1.1.5-exp.3
|
108
|
+
|
109
|
+
- added options to split chunks base config
|
110
|
+
- added support for passing custom chunks split logic as function.
|
58
111
|
|
59
112
|
# 1.1.6
|
60
113
|
|
61
114
|
**Issue Fix**
|
115
|
+
|
62
116
|
- local install react-cli spawnSync Error fix in npm 8
|
63
117
|
- babel version update issue fix (Cannot read properties of undefined (reading 'file')) and (BABEL_TRANSFORM_ERROR)
|
64
118
|
|
65
119
|
# 1.1.5-exp.2
|
66
120
|
|
67
121
|
**Issue Fix**
|
122
|
+
|
68
123
|
- local install react-cli spawnSync Error fix in npm 8
|
69
124
|
|
70
125
|
# 1.1.5
|
@@ -76,6 +131,7 @@ For more info please refer to :
|
|
76
131
|
# 1.1.4
|
77
132
|
|
78
133
|
**Issue Fix**
|
134
|
+
|
79
135
|
- global install react-cli spawnSync Error fix
|
80
136
|
- `0px` variable value conversion issue fixed
|
81
137
|
- pattern exclude for postcss plugins case fixed
|
@@ -83,6 +139,7 @@ For more info please refer to :
|
|
83
139
|
# 1.1.3
|
84
140
|
|
85
141
|
**Issue Fix**
|
142
|
+
|
86
143
|
- local install react-cli spawnSync Error fix
|
87
144
|
|
88
145
|
# 1.1.2
|
@@ -94,54 +151,63 @@ For more info please refer to :
|
|
94
151
|
# 1.1.1
|
95
152
|
|
96
153
|
**Issue Fix**
|
154
|
+
|
97
155
|
- docs component name incorrect in windows, when using --enableReactLive issue fixed.
|
98
156
|
|
99
|
-
**Feature Update**
|
157
|
+
**Feature Update**
|
158
|
+
|
100
159
|
- Support for desk-library to use Selector Replace plugin using individual script. To use `react-cli selectorReplacer [source] [target]`
|
101
160
|
|
102
161
|
# 1.1.0
|
103
162
|
|
104
163
|
**Feature Update**
|
105
|
-
|
164
|
+
|
165
|
+
- Support for desk-library to use variable conversion plugin using individual script. To use `react-cli variableConverter [source] [target]`
|
106
166
|
- pattern filter changes, new filter system instead of exclude to include or exclude files for plugins.
|
107
|
-
For more info please refer to :
|
108
|
-
[details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/2.0.0/docs/patternFiltering.md)
|
167
|
+
For more info please refer to :
|
168
|
+
[details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/2.0.0/docs/patternFiltering.md)
|
109
169
|
- React Live feature implemented for Docs.
|
110
|
-
[details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/2.0.0/docs/ReactLive.md)
|
170
|
+
[details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/2.0.0/docs/ReactLive.md)
|
111
171
|
|
112
172
|
# 1.0.3-beta.1
|
113
173
|
|
114
174
|
**Issue Fix**
|
115
|
-
- nock api not working issue fixed. This error throwing in @zohodesk/react-cli@1.0.2 version. but working in older versions ( 0.0.1-beta.178 )
|
116
175
|
|
176
|
+
- nock api not working issue fixed. This error throwing in @zohodesk/react-cli@1.0.2 version. but working in older versions ( 0.0.1-beta.178 )
|
117
177
|
|
118
178
|
# 1.0.3
|
119
179
|
|
120
180
|
**Feature Update**
|
181
|
+
|
121
182
|
- Support for global httpsCerts usage
|
122
183
|
- Support for global client_packages_group usage
|
123
|
-
- custom attribute for dynamically loading chunks, In this version we merged changes from [0.0.1-beta.167.1](#0.0.1-beta.167.1).
|
124
|
-
**Package Update**
|
125
|
-
- @zohodesk/client_packages_group@**1.0.1** ==>
|
126
|
-
|
127
|
-
|
184
|
+
- custom attribute for dynamically loading chunks, In this version we merged changes from [0.0.1-beta.167.1](#0.0.1-beta.167.1).
|
185
|
+
**Package Update**
|
186
|
+
- @zohodesk/client_packages_group@**1.0.1** ==> @zohodesk/client_packages_group@**1.0.2**
|
128
187
|
|
129
188
|
# 1.0.2
|
130
189
|
|
131
190
|
**Feature Update**
|
191
|
+
|
132
192
|
- Selector replace plugin made as a custom postcss-plugin with update to code that was unpublished in package.
|
133
193
|
|
134
194
|
# 1.0.1
|
135
195
|
|
136
196
|
**Issue Fix**
|
197
|
+
|
137
198
|
- variable conversion for px and var(--) values in same declaration was not supported, now it is supported.
|
138
199
|
- package-lock.json removed from `.npmignore`
|
139
200
|
|
140
201
|
**Feature Update**
|
202
|
+
|
141
203
|
- exclude added to Selector Plugin
|
204
|
+
|
142
205
|
# 1.0.0
|
206
|
+
|
143
207
|
## Major Release
|
208
|
+
|
144
209
|
**Changes:**
|
210
|
+
|
145
211
|
- File support added for `.webp` for `docs`, `dev` and `prod` mode
|
146
212
|
- File support added for `.webm` for `docs`, `dev` and `prod` mode
|
147
213
|
|
@@ -149,12 +215,11 @@ For more info please refer to :
|
|
149
215
|
|
150
216
|
- We have remove ssl certificate for security reasons.
|
151
217
|
So default https server won't run.
|
152
|
-
In order to make it work as before you
|
218
|
+
In order to make it work as before you need to specify two things
|
153
219
|
1. install `@zohodesk-private/client_dev_cert`
|
154
|
-
2.
|
155
|
-
|
156
|
-
|
157
|
-
|
220
|
+
2. `react-cli.app.server.httpsCerts` option example `"httpsCerts": "@zohodesk-private/client_dev_cert"`
|
221
|
+
unless configaration are proper this may break `start` , `docs` , `nowatchstart`. and mock wms `/wmsmockapi` won't work.
|
222
|
+
So Please be carefull when you update this version or above without proper configaration.
|
158
223
|
|
159
224
|
# 0.0.1-beta.178
|
160
225
|
|
@@ -167,11 +232,11 @@ For more info please refer to :
|
|
167
232
|
|
168
233
|
- We have remove ssl certificate for security reasons.
|
169
234
|
So default https server won't run.
|
170
|
-
In order to make it work as before you
|
235
|
+
In order to make it work as before you need to specify two things
|
171
236
|
1. install `@zohodesk-private/client_dev_cert`
|
172
|
-
2.
|
173
|
-
|
174
|
-
|
237
|
+
2. `react-cli.app.server.httpsCerts` option example `"httpsCerts": "@zohodesk-private/client_dev_cert"`
|
238
|
+
unless configaration are proper this may break `start` , `docs` , `nowatchstart`.
|
239
|
+
So Please be carefull when you update this version or above without proper configaration.
|
175
240
|
|
176
241
|
# 0.0.1-exp.178.2
|
177
242
|
|
@@ -185,11 +250,11 @@ For more info please refer to :
|
|
185
250
|
|
186
251
|
- We have remove ssl certificate for security reasons.
|
187
252
|
So default https server won't run.
|
188
|
-
In order to make it work as before you
|
253
|
+
In order to make it work as before you need to specify two things
|
189
254
|
1. install `@zohodesk-private/client_dev_cert`
|
190
|
-
2.
|
191
|
-
|
192
|
-
|
255
|
+
2. `react-cli.app.server.httpsCerts` option example `"httpsCerts": "@zohodesk-private/client_dev_cert"`
|
256
|
+
unless configaration are proper this may break `start` , `docs` , `nowatchstart`.
|
257
|
+
So Please be carefull when you update this version or above without proper configaration.
|
193
258
|
|
194
259
|
# 0.0.1-beta.177
|
195
260
|
|
@@ -347,8 +412,9 @@ Features:-
|
|
347
412
|
- In docs we have added `Description` for Component Props- check out it in `PropTypes` tab
|
348
413
|
|
349
414
|
# 0.0.1-beta.167.1
|
415
|
+
|
350
416
|
In this version we merged changes from [0.0.1-betaa.138.1](#0.0.1-betaa.138.1).
|
351
|
-
and with [0.0.1-beta.167](#0.0.1-beta.167) version changes.
|
417
|
+
and with [0.0.1-beta.167](#0.0.1-beta.167) version changes.
|
352
418
|
|
353
419
|
# 0.0.1-beta.167
|
354
420
|
|
@@ -612,6 +678,7 @@ impact servise related changes:-
|
|
612
678
|
- few enhancements
|
613
679
|
|
614
680
|
# 0.0.1-betaa.138.1
|
681
|
+
|
615
682
|
- new feature added for custom extra attribute for dynamically added tags by webpack.
|
616
683
|
- To enable this feature you need to enable "react-cli" => "app" => "customAttributes" => "enable"
|
617
684
|
- For more [details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/9eea8df14e55584b2114b5e484ca8b751a4ba191/src/plugins/CustomAttributePlugin.md)
|
package/bin/cli.js
CHANGED
@@ -1,15 +1,19 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
2
|
|
3
3
|
const path = require('path');
|
4
|
-
const {
|
5
|
-
const
|
6
|
-
const { getOptions } = require('../lib/utils/index.js');
|
4
|
+
const { spawnSync: _spawnSync, execSync } = require('child_process');
|
5
|
+
const getOptions = require('../lib/utils/getOptions.js').default;
|
7
6
|
|
8
|
-
const { log } = require('../lib/utils');
|
7
|
+
const { log } = require('../lib/utils/log.js');
|
9
8
|
const { getCliPath } = require('../lib/servers/getCliPath.js');
|
9
|
+
const { runPreProcess } = require('../src/common/runPreProcess.js');
|
10
10
|
//initPreCommitHook();
|
11
11
|
|
12
|
-
const
|
12
|
+
const [, , option] = process.argv;
|
13
|
+
const args = process.argv.slice(3);
|
14
|
+
const appPath = process.cwd();
|
15
|
+
|
16
|
+
const options = getOptions({ start: true, build: true, docs: true }[option]);
|
13
17
|
|
14
18
|
function spawnSync(...args) {
|
15
19
|
const result = _spawnSync(...args);
|
@@ -20,7 +24,6 @@ function spawnSync(...args) {
|
|
20
24
|
}
|
21
25
|
|
22
26
|
const { esLint: esLintOptions } = options || {};
|
23
|
-
const { preprocess } = options;
|
24
27
|
const {
|
25
28
|
ignoreFilePaths: esLintIgnorePaths,
|
26
29
|
fix: esLintFix,
|
@@ -28,10 +31,6 @@ const {
|
|
28
31
|
reportPath: reportPath
|
29
32
|
} = esLintOptions || {};
|
30
33
|
|
31
|
-
const [, , option] = process.argv;
|
32
|
-
const args = process.argv.slice(3);
|
33
|
-
const appPath = process.cwd();
|
34
|
-
|
35
34
|
const webpack = getCliPath('webpack');
|
36
35
|
|
37
36
|
const nodemon = getCliPath('nodemon');
|
@@ -39,49 +38,10 @@ const babel = getCliPath('babel');
|
|
39
38
|
const propertyToJson = getCliPath('propertyToJson');
|
40
39
|
const esLint = getCliPath('eslint');
|
41
40
|
|
42
|
-
|
43
|
-
? path.join(process.cwd(), preprocess.runner)
|
44
|
-
: '';
|
45
|
-
const preprocessCli = preprocess.stopNodemon ? 'node' : nodemon;
|
46
|
-
if (preprocesserPath && existsSync(preprocesserPath)) {
|
47
|
-
// eslint-disable-next-line default-case
|
48
|
-
switch (option) {
|
49
|
-
case 'start':
|
50
|
-
case 'docs':
|
51
|
-
spawn(preprocessCli, [preprocesserPath], {
|
52
|
-
stdio: 'inherit',
|
53
|
-
cwd: path.parse(preprocesserPath).dir
|
54
|
-
});
|
55
|
-
// NOTE: it's ok if we not close this here
|
56
|
-
// Because when node server stops this program willbe closed So this nodemon will be killed as well
|
57
|
-
break;
|
58
|
-
case 'nowatchstart':
|
59
|
-
case 'devbuild':
|
60
|
-
case 'build:library:es':
|
61
|
-
case 'build:component:es':
|
62
|
-
case 'build:library:cmjs':
|
63
|
-
case 'build:component:cmjs':
|
64
|
-
spawnSync('node', [preprocesserPath], {
|
65
|
-
stdio: 'inherit',
|
66
|
-
cwd: preprocesserPath.slice(0, preprocesserPath.lastIndexOf('/') + 1)
|
67
|
-
});
|
68
|
-
break;
|
69
|
-
}
|
70
|
-
}
|
41
|
+
runPreProcess({ options, option, nodemon, spawnSync });
|
71
42
|
|
72
43
|
let result;
|
73
44
|
switch (option) {
|
74
|
-
case 'preprocessor':
|
75
|
-
if (preprocesserPath && existsSync(preprocesserPath)) {
|
76
|
-
result = spawnSync(preprocessCli, [preprocesserPath], {
|
77
|
-
stdio: 'inherit',
|
78
|
-
cwd: preprocesserPath.slice(0, preprocesserPath.lastIndexOf('/') + 1)
|
79
|
-
});
|
80
|
-
process.exit(result.status);
|
81
|
-
} else {
|
82
|
-
console.error(`preProcessor not exists ${preprocesserPath}`);
|
83
|
-
}
|
84
|
-
break;
|
85
45
|
case 'lint-setup': {
|
86
46
|
result = spawnSync(
|
87
47
|
'node',
|
@@ -270,7 +230,7 @@ switch (option) {
|
|
270
230
|
require.resolve('../lib/servers/mockserver.js'),
|
271
231
|
'--delay',
|
272
232
|
'2500ms',
|
273
|
-
'watch',
|
233
|
+
'--watch',
|
274
234
|
`${appPath + path.sep}mockapi`
|
275
235
|
].concat(args),
|
276
236
|
{ stdio: 'inherit' }
|
@@ -477,8 +437,9 @@ switch (option) {
|
|
477
437
|
case '--v':
|
478
438
|
case '-v':
|
479
439
|
log(`@zohodesk/react-cli v${require('../package.json').version}`);
|
440
|
+
log(`Node Js Version : ${process.version}`);
|
441
|
+
log(`Npm Version : ${execSync('npm --version')}`);
|
480
442
|
break;
|
481
|
-
|
482
443
|
default:
|
483
444
|
log(`react-cli > Unknown option "${option}"`);
|
484
445
|
log('react-cli app <appName>');
|
package/docs/CustomChunks.md
CHANGED
@@ -4,23 +4,26 @@ In react-cli we provide options to create custom chunks.
|
|
4
4
|
This Custom Chunk Option is array of Object
|
5
5
|
that Object keys are
|
6
6
|
|
7
|
-
- `pattern` regex pattern as string
|
8
|
-
- `name` chunk name
|
9
|
-
- `size` is count which is
|
7
|
+
- `pattern` **{ String | Function | Array<String> }** regex pattern as string and custom logic to split chunks can be defined using function
|
8
|
+
- `name` **{ String }** chunk name
|
9
|
+
- `size` **{ Number }** is count which is minimum chunk duplicated or need in chunks
|
10
10
|
|
11
11
|
> Since 0.0.1-exp.164.1
|
12
12
|
|
13
13
|
extra features in custom chunks :-
|
14
14
|
for more details [SplitChunkPlugin](https://webpack.js.org/plugins/split-chunks-plugin/) webpack
|
15
15
|
|
16
|
-
- `minChunks`: `minChunks` is
|
17
|
-
- `rules`: `rules` is same as `pattern` with some easy hooks
|
16
|
+
- `minChunks`: `minChunks` is alias of `size` default value is `2`,
|
17
|
+
- `rules`: `rules` is same as `pattern` with some easy hooks **(removed after v1.1.5)**
|
18
18
|
- use `/` for both windows and linux we will replace internally
|
19
19
|
- for `.*` we need to use `*`
|
20
20
|
- we can consider rules as regex when the `rules-string` has any of these `*`, `^`, `$`. So if you want regex then kindly use `*` in your `rules-string` for force regex
|
21
21
|
- `chunks`: by this option we can specify , default value is `all`,
|
22
22
|
- `priority`: priority default value is `-10 * (index + 2)`,
|
23
|
-
- `enforce`: enforce default value is true
|
24
|
-
- `maxSize`: maxSize, default value is 0
|
25
|
-
- `minSize`: minSize, default value is 20000
|
26
|
-
|
23
|
+
- `enforce`: enforce default value is `true`,
|
24
|
+
- `maxSize`: maxSize, default value is `0`,
|
25
|
+
- `minSize`: minSize, default value is `20000`,
|
26
|
+
- `reuseExistingChunk` If the current chunk contains modules already split out from the main bundle, it will be reused instead of a new one being generated. This can affect the resulting file name of the chunk.
|
27
|
+
- `automaticNamePrefix` with this you can specify for chunks created through that specified config. default value `''`.
|
28
|
+
- `cacheGroupName`: `cacheGroupName` is alias of `name`, But it won't work as chunk name, instead it will just work as key in cacheGroup.
|
29
|
+
<!-- includeDependency: includeDependency default value is `false` -->
|
@@ -0,0 +1,66 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
const path = require('path');
|
4
|
+
|
5
|
+
const {
|
6
|
+
existsSync
|
7
|
+
} = require('fs');
|
8
|
+
|
9
|
+
const {
|
10
|
+
spawn
|
11
|
+
} = require('child_process');
|
12
|
+
|
13
|
+
exports.runPreProcess = function runPreProcess({
|
14
|
+
options,
|
15
|
+
option,
|
16
|
+
nodemon,
|
17
|
+
spawnSync
|
18
|
+
}) {
|
19
|
+
const {
|
20
|
+
preprocess
|
21
|
+
} = options;
|
22
|
+
const preprocessorPath = preprocess.runner ? path.join(process.cwd(), preprocess.runner) : '';
|
23
|
+
const preprocessCli = preprocess.stopNodemon ? 'node' : nodemon;
|
24
|
+
|
25
|
+
if (preprocessorPath && existsSync(preprocessorPath)) {
|
26
|
+
const preprocessorDirPath = path.dirname(preprocessorPath);
|
27
|
+
const watchOptions = preprocessCli === nodemon ? ['--watch', preprocessorDirPath] : []; // eslint-disable-next-line default-case
|
28
|
+
|
29
|
+
switch (option) {
|
30
|
+
case 'start':
|
31
|
+
case 'docs':
|
32
|
+
spawn(preprocessCli, [preprocessorPath, ...watchOptions], {
|
33
|
+
stdio: 'inherit',
|
34
|
+
cwd: preprocessorDirPath
|
35
|
+
}); // NOTE: it's ok if we not close this here
|
36
|
+
// Because when node server stops this program will be closed So this nodemon will be killed as well
|
37
|
+
|
38
|
+
break;
|
39
|
+
|
40
|
+
case 'nowatchstart':
|
41
|
+
case 'devbuild':
|
42
|
+
case 'build:library:es':
|
43
|
+
case 'build:component:es':
|
44
|
+
case 'build:library:cmjs':
|
45
|
+
case 'build:component:cmjs':
|
46
|
+
spawnSync('node', [preprocessorPath], {
|
47
|
+
stdio: 'inherit',
|
48
|
+
cwd: preprocessorPath.slice(0, preprocessorPath.lastIndexOf('/') + 1)
|
49
|
+
});
|
50
|
+
break;
|
51
|
+
|
52
|
+
case 'preprocessor':
|
53
|
+
{
|
54
|
+
const result = spawnSync(preprocessCli, [preprocessorPath, ...watchOptions], {
|
55
|
+
stdio: 'inherit',
|
56
|
+
cwd: path.dirname(preprocessorPath)
|
57
|
+
});
|
58
|
+
process.exit(result.status);
|
59
|
+
break;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
} else if (option === 'preprocess') {
|
63
|
+
console.error(`preProcessor not exists ${preprocessorPath}`);
|
64
|
+
process.exit(0);
|
65
|
+
}
|
66
|
+
};
|
@@ -15,35 +15,53 @@ var _testPattern = require("./testPattern");
|
|
15
15
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
const isWindows = _os.default.platform().toLowerCase() === 'win32';
|
19
|
+
const ps = _path.default.sep;
|
20
|
+
const options = (0, _utils.getOptions)();
|
21
|
+
const {
|
22
22
|
app: {
|
23
23
|
vendorExclude,
|
24
24
|
customChunks,
|
25
|
-
vendorInclude
|
25
|
+
vendorInclude,
|
26
|
+
customChunksBaseConfig
|
26
27
|
}
|
27
28
|
} = options;
|
29
|
+
const reactBundleIncludeList = ['react', 'react-dom', 'react-redux', 'react-transition-group', 'scheduler', 'prop-types'];
|
30
|
+
const vendorExcludeList = ['script-loader', 'raw-loader', ...reactBundleIncludeList, ...vendorExclude.map(vendorPath => vendorPath.replace(/[/\\]/g, _path.default.sep))];
|
31
|
+
const vendorIncludeList = [...vendorInclude].map(vendorPath => vendorPath.replace(/[/\\]/g, _path.default.sep));
|
28
32
|
|
29
|
-
|
30
|
-
|
33
|
+
const isVendor = function isVendor(module) {
|
34
|
+
const {
|
31
35
|
userRequest
|
32
36
|
} = module;
|
33
|
-
|
34
|
-
excludeList = [...excludeList, ...vendorExclude];
|
35
|
-
return userRequest && (vendorInclude.some(item => userRequest.indexOf(item) !== -1) || userRequest.indexOf('node_modules') >= 0 && userRequest.endsWith('.css') === false && userRequest.endsWith('publicPathConfig.js') === false && excludeList.every(item => userRequest.indexOf(`node_modules${ps}${item}${ps}`) === -1));
|
37
|
+
return userRequest && (vendorIncludeList.some(item => userRequest.indexOf(item) !== -1) || userRequest.indexOf('node_modules') >= 0 && userRequest.endsWith('.css') === false && userRequest.endsWith('publicPathConfig.js') === false && vendorExcludeList.every(item => userRequest.indexOf(`node_modules${ps}${item}${ps}`) === -1));
|
36
38
|
};
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
+
const isReact = module => {
|
41
|
+
const {
|
40
42
|
userRequest
|
41
43
|
} = module;
|
42
|
-
|
43
|
-
return userRequest && reactBundle.some(pkg => userRequest.indexOf(`node_modules${ps}${pkg}${ps}`) >= 0);
|
44
|
+
return userRequest && reactBundleIncludeList.some(pkg => userRequest.indexOf(`node_modules${ps}${pkg}${ps}`) >= 0);
|
44
45
|
};
|
45
46
|
|
46
|
-
|
47
|
+
function rulesMatcher(pattern) {
|
48
|
+
if (typeof pattern === 'function') {
|
49
|
+
return pattern;
|
50
|
+
}
|
51
|
+
|
52
|
+
if (Array.isArray(pattern)) {
|
53
|
+
return ({
|
54
|
+
userRequest
|
55
|
+
}) => (0, _testPattern.testPattern)(userRequest, pattern);
|
56
|
+
}
|
57
|
+
|
58
|
+
return new RegExp(isWindows ? pattern.replace(/\//g, '\\') : pattern);
|
59
|
+
}
|
60
|
+
|
61
|
+
const baseSplitChunkConfig = Object.assign({
|
62
|
+
minSize: 15000
|
63
|
+
}, customChunksBaseConfig);
|
64
|
+
const specificCacheGroupConfig = {
|
47
65
|
'react.vendor': {
|
48
66
|
name: 'react.vendor',
|
49
67
|
chunks: 'all',
|
@@ -63,45 +81,35 @@ let defaultChunks = {
|
|
63
81
|
priority: -10
|
64
82
|
}
|
65
83
|
};
|
66
|
-
|
84
|
+
const customChunksConfig = {};
|
67
85
|
customChunks.map((obj, index) => ({
|
68
86
|
name: obj.name,
|
69
|
-
|
87
|
+
chunks: obj.chunks || 'all',
|
70
88
|
minChunks: obj.minChunks || obj.size || 2,
|
71
|
-
|
72
|
-
// includeDepenency: obj.includeDepenency || false,
|
89
|
+
pattern: obj.pattern,
|
73
90
|
priority: obj.priority || -10 * (index + 2),
|
74
|
-
enforce: obj.enforce
|
75
|
-
maxSize: obj.maxSize,
|
76
|
-
// || 0,
|
91
|
+
enforce: obj.enforce,
|
77
92
|
minSize: obj.minSize,
|
78
93
|
// || 20000,
|
79
|
-
|
80
|
-
|
94
|
+
maxSize: obj.maxSize,
|
95
|
+
// || 0,
|
96
|
+
reuseExistingChunk: obj.reuseExistingChunk,
|
97
|
+
cacheGroupName: obj.cacheGroupName || obj.name
|
98
|
+
})).forEach(({
|
81
99
|
name,
|
82
|
-
|
100
|
+
chunks = 'all',
|
83
101
|
minChunks,
|
84
|
-
|
102
|
+
pattern,
|
85
103
|
priority,
|
86
|
-
// includeDepenency,
|
87
104
|
enforce,
|
88
105
|
minSize,
|
89
106
|
maxSize,
|
90
|
-
|
107
|
+
reuseExistingChunk,
|
108
|
+
cacheGroupName
|
91
109
|
}) => {
|
92
|
-
|
93
|
-
|
94
|
-
test: rules ? m => {
|
95
|
-
const {
|
96
|
-
userRequest
|
97
|
-
} = m;
|
98
|
-
return (0, _testPattern.testPattern)(userRequest, rules); // return (
|
99
|
-
// pkgs.some(p => isRelated(userRequest, p)) ||
|
100
|
-
// (includeDepenency && isDependency(m, pkgs))
|
101
|
-
// );
|
102
|
-
} : new RegExp(isWindows ? pattern.replace(/\//g, '\\') : pattern),
|
110
|
+
const obj = {
|
111
|
+
test: rulesMatcher(pattern),
|
103
112
|
chunks,
|
104
|
-
enforce,
|
105
113
|
minChunks,
|
106
114
|
priority
|
107
115
|
};
|
@@ -114,13 +122,25 @@ customChunks.map((obj, index) => ({
|
|
114
122
|
obj.maxSize = maxSize;
|
115
123
|
}
|
116
124
|
|
117
|
-
|
125
|
+
if (enforce !== false) {
|
126
|
+
obj.enforce = true;
|
127
|
+
}
|
128
|
+
|
129
|
+
if (name !== undefined) {
|
130
|
+
obj.name = name;
|
131
|
+
}
|
132
|
+
|
133
|
+
if (reuseExistingChunk !== undefined) {
|
134
|
+
obj.reuseExistingChunk = reuseExistingChunk;
|
135
|
+
}
|
136
|
+
|
137
|
+
customChunksConfig[cacheGroupName] = obj;
|
118
138
|
});
|
119
|
-
|
120
|
-
minSize: 12000,
|
139
|
+
const splitChunkConfig = Object.assign({}, baseSplitChunkConfig, {
|
121
140
|
cacheGroups: Object.assign({
|
122
141
|
default: false,
|
123
142
|
vendors: false
|
124
|
-
},
|
125
|
-
};
|
143
|
+
}, specificCacheGroupConfig, customChunksConfig)
|
144
|
+
});
|
145
|
+
var _default = splitChunkConfig;
|
126
146
|
exports.default = _default;
|