@zohodesk/react-cli 1.1.8 → 1.1.10
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/.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;
|