@spcsn/taro-cli 0.1.0

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 (213) hide show
  1. package/LICENSE +174 -0
  2. package/README.md +0 -0
  3. package/bin/taro +7 -0
  4. package/dist/cli.d.ts +6 -0
  5. package/dist/cli.js +266 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/customCommand.d.ts +5 -0
  8. package/dist/commands/customCommand.js +23 -0
  9. package/dist/commands/customCommand.js.map +1 -0
  10. package/dist/config/index.d.ts +8 -0
  11. package/dist/config/index.js +10 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/config/packagesManagement.d.ts +19 -0
  14. package/dist/config/packagesManagement.js +22 -0
  15. package/dist/config/packagesManagement.js.map +1 -0
  16. package/dist/create/constants.d.ts +1 -0
  17. package/dist/create/constants.js +5 -0
  18. package/dist/create/constants.js.map +1 -0
  19. package/dist/create/creator.d.ts +9 -0
  20. package/dist/create/creator.js +64 -0
  21. package/dist/create/creator.js.map +1 -0
  22. package/dist/create/fetchTemplate.d.ts +8 -0
  23. package/dist/create/fetchTemplate.js +169 -0
  24. package/dist/create/fetchTemplate.js.map +1 -0
  25. package/dist/create/page.d.ts +65 -0
  26. package/dist/create/page.js +266 -0
  27. package/dist/create/page.js.map +1 -0
  28. package/dist/create/plugin.d.ts +16 -0
  29. package/dist/create/plugin.js +77 -0
  30. package/dist/create/plugin.js.map +1 -0
  31. package/dist/create/project.d.ts +70 -0
  32. package/dist/create/project.js +481 -0
  33. package/dist/create/project.js.map +1 -0
  34. package/dist/doctor/index.d.ts +4 -0
  35. package/dist/doctor/index.js +23 -0
  36. package/dist/doctor/index.js.map +1 -0
  37. package/dist/index.d.ts +16 -0
  38. package/dist/index.js +24 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/presets/commands/build.d.ts +3 -0
  41. package/dist/presets/commands/build.js +236 -0
  42. package/dist/presets/commands/build.js.map +1 -0
  43. package/dist/presets/commands/config.d.ts +3 -0
  44. package/dist/presets/commands/config.js +121 -0
  45. package/dist/presets/commands/config.js.map +1 -0
  46. package/dist/presets/commands/create.d.ts +3 -0
  47. package/dist/presets/commands/create.js +112 -0
  48. package/dist/presets/commands/create.js.map +1 -0
  49. package/dist/presets/commands/global-config.d.ts +3 -0
  50. package/dist/presets/commands/global-config.js +175 -0
  51. package/dist/presets/commands/global-config.js.map +1 -0
  52. package/dist/presets/commands/help.d.ts +3 -0
  53. package/dist/presets/commands/help.js +16 -0
  54. package/dist/presets/commands/help.js.map +1 -0
  55. package/dist/presets/commands/info.d.ts +3 -0
  56. package/dist/presets/commands/info.js +96 -0
  57. package/dist/presets/commands/info.js.map +1 -0
  58. package/dist/presets/commands/init.d.ts +3 -0
  59. package/dist/presets/commands/init.js +46 -0
  60. package/dist/presets/commands/init.js.map +1 -0
  61. package/dist/presets/commands/inspect.d.ts +3 -0
  62. package/dist/presets/commands/inspect.js +155 -0
  63. package/dist/presets/commands/inspect.js.map +1 -0
  64. package/dist/presets/commands/update.d.ts +3 -0
  65. package/dist/presets/commands/update.js +187 -0
  66. package/dist/presets/commands/update.js.map +1 -0
  67. package/dist/presets/constant/hooks.d.ts +13 -0
  68. package/dist/presets/constant/hooks.js +17 -0
  69. package/dist/presets/constant/hooks.js.map +1 -0
  70. package/dist/presets/constant/index.d.ts +1 -0
  71. package/dist/presets/constant/index.js +18 -0
  72. package/dist/presets/constant/index.js.map +1 -0
  73. package/dist/presets/files/generateFrameworkInfo.d.ts +3 -0
  74. package/dist/presets/files/generateFrameworkInfo.js +30 -0
  75. package/dist/presets/files/generateFrameworkInfo.js.map +1 -0
  76. package/dist/presets/files/generateProjectConfig.d.ts +3 -0
  77. package/dist/presets/files/generateProjectConfig.js +72 -0
  78. package/dist/presets/files/generateProjectConfig.js.map +1 -0
  79. package/dist/presets/files/writeFileToDist.d.ts +3 -0
  80. package/dist/presets/files/writeFileToDist.js +50 -0
  81. package/dist/presets/files/writeFileToDist.js.map +1 -0
  82. package/dist/presets/hooks/build.d.ts +3 -0
  83. package/dist/presets/hooks/build.js +55 -0
  84. package/dist/presets/hooks/build.js.map +1 -0
  85. package/dist/presets/hooks/create.d.ts +3 -0
  86. package/dist/presets/hooks/create.js +42 -0
  87. package/dist/presets/hooks/create.js.map +1 -0
  88. package/dist/presets/index.d.ts +4 -0
  89. package/dist/presets/index.js +50 -0
  90. package/dist/presets/index.js.map +1 -0
  91. package/dist/presets/platforms/plugin.d.ts +3 -0
  92. package/dist/presets/platforms/plugin.js +106 -0
  93. package/dist/presets/platforms/plugin.js.map +1 -0
  94. package/dist/presets/platforms/rn.d.ts +3 -0
  95. package/dist/presets/platforms/rn.js +130 -0
  96. package/dist/presets/platforms/rn.js.map +1 -0
  97. package/dist/util/appConfig.d.ts +11 -0
  98. package/dist/util/appConfig.js +27 -0
  99. package/dist/util/appConfig.js.map +1 -0
  100. package/dist/util/createPage.d.ts +9 -0
  101. package/dist/util/createPage.js +114 -0
  102. package/dist/util/createPage.js.map +1 -0
  103. package/dist/util/defineConfig.d.ts +17 -0
  104. package/dist/util/defineConfig.js +11 -0
  105. package/dist/util/defineConfig.js.map +1 -0
  106. package/dist/util/index.d.ts +23 -0
  107. package/dist/util/index.js +149 -0
  108. package/dist/util/index.js.map +1 -0
  109. package/dist/util/types.d.ts +58 -0
  110. package/dist/util/types.js +3 -0
  111. package/dist/util/types.js.map +1 -0
  112. package/global.d.ts +4 -0
  113. package/index.js +3 -0
  114. package/package.json +74 -0
  115. package/postinstall.js +17 -0
  116. package/src/__tests__/__mocks__/presets.ts +15 -0
  117. package/src/__tests__/build-config.spec.ts +66 -0
  118. package/src/__tests__/cli.spec.ts +226 -0
  119. package/src/__tests__/config.spec.ts +224 -0
  120. package/src/__tests__/doctor-config.spec.ts +943 -0
  121. package/src/__tests__/doctor-recommand.spec.ts +136 -0
  122. package/src/__tests__/doctor.spec.ts +94 -0
  123. package/src/__tests__/dotenv-parse.spec.ts +105 -0
  124. package/src/__tests__/env/.env +2 -0
  125. package/src/__tests__/fixtures/default/.env +3 -0
  126. package/src/__tests__/fixtures/default/.env.development +1 -0
  127. package/src/__tests__/fixtures/default/.env.local +1 -0
  128. package/src/__tests__/fixtures/default/.env.pre +3 -0
  129. package/src/__tests__/fixtures/default/.env.production +1 -0
  130. package/src/__tests__/fixtures/default/.env.uat +5 -0
  131. package/src/__tests__/fixtures/default/.env.uat.local +1 -0
  132. package/src/__tests__/fixtures/default/babel.config.js +10 -0
  133. package/src/__tests__/fixtures/default/config/dev.js +9 -0
  134. package/src/__tests__/fixtures/default/config/index.js +84 -0
  135. package/src/__tests__/fixtures/default/config/prod.js +18 -0
  136. package/src/__tests__/fixtures/default/package.json +27 -0
  137. package/src/__tests__/fixtures/default/src/app.config.js +11 -0
  138. package/src/__tests__/fixtures/default/src/app.js +16 -0
  139. package/src/__tests__/fixtures/default/src/app.scss +0 -0
  140. package/src/__tests__/fixtures/default/src/index.html +19 -0
  141. package/src/__tests__/fixtures/default/src/pages/index/index.config.js +3 -0
  142. package/src/__tests__/fixtures/default/src/pages/index/index.jsx +22 -0
  143. package/src/__tests__/fixtures/default/src/pages/index/index.scss +0 -0
  144. package/src/__tests__/info.spec.ts +72 -0
  145. package/src/__tests__/inspect.spec.ts +160 -0
  146. package/src/__tests__/update.spec.ts +310 -0
  147. package/src/__tests__/utils/index.ts +54 -0
  148. package/src/cli.ts +240 -0
  149. package/src/commands/customCommand.ts +22 -0
  150. package/src/config/index.ts +7 -0
  151. package/src/config/manifest.default.json +33 -0
  152. package/src/config/packagesManagement.ts +20 -0
  153. package/src/config/rn-stylelint.json +4 -0
  154. package/src/config/tsconfig.json +22 -0
  155. package/src/create/constants.ts +1 -0
  156. package/src/create/creator.ts +37 -0
  157. package/src/create/fetchTemplate.ts +161 -0
  158. package/src/create/page.ts +325 -0
  159. package/src/create/plugin.ts +55 -0
  160. package/src/create/project.ts +539 -0
  161. package/src/doctor/index.ts +21 -0
  162. package/src/index.ts +24 -0
  163. package/src/presets/commands/build.ts +215 -0
  164. package/src/presets/commands/config.ts +86 -0
  165. package/src/presets/commands/create.ts +104 -0
  166. package/src/presets/commands/global-config.ts +140 -0
  167. package/src/presets/commands/help.ts +17 -0
  168. package/src/presets/commands/info.ts +81 -0
  169. package/src/presets/commands/init.ts +63 -0
  170. package/src/presets/commands/inspect.ts +137 -0
  171. package/src/presets/commands/update.ts +175 -0
  172. package/src/presets/constant/hooks.ts +14 -0
  173. package/src/presets/constant/index.ts +1 -0
  174. package/src/presets/files/generateFrameworkInfo.ts +30 -0
  175. package/src/presets/files/generateProjectConfig.ts +41 -0
  176. package/src/presets/files/writeFileToDist.ts +17 -0
  177. package/src/presets/hooks/build.ts +22 -0
  178. package/src/presets/hooks/create.ts +9 -0
  179. package/src/presets/index.ts +15 -0
  180. package/src/presets/platforms/plugin.ts +75 -0
  181. package/src/presets/platforms/rn.ts +125 -0
  182. package/src/util/appConfig.ts +32 -0
  183. package/src/util/createPage.ts +139 -0
  184. package/src/util/defineConfig.ts +28 -0
  185. package/src/util/index.ts +126 -0
  186. package/src/util/types.ts +81 -0
  187. package/templates/default/_editorconfig +12 -0
  188. package/templates/default/_env.development +2 -0
  189. package/templates/default/_env.production +1 -0
  190. package/templates/default/_env.test +1 -0
  191. package/templates/default/_gitignore +8 -0
  192. package/templates/default/babel.config.js +14 -0
  193. package/templates/default/config/dev.js +5 -0
  194. package/templates/default/config/index.js +61 -0
  195. package/templates/default/config/prod.js +5 -0
  196. package/templates/default/package.json.tmpl +52 -0
  197. package/templates/default/project.config.json +15 -0
  198. package/templates/default/src/app.config.js +11 -0
  199. package/templates/default/src/app.css +0 -0
  200. package/templates/default/src/app.js +15 -0
  201. package/templates/default/src/pages/index/index.config.js +3 -0
  202. package/templates/default/src/pages/index/index.css +0 -0
  203. package/templates/default/src/pages/index/index.jsx +15 -0
  204. package/templates/default/template_creator.js +61 -0
  205. package/templates/default/tsconfig.json +30 -0
  206. package/templates/default/types/global.d.ts +27 -0
  207. package/templates/global-config/index.json +4 -0
  208. package/templates/global-config/package.json +5 -0
  209. package/templates/plugin-compile/README.md +32 -0
  210. package/templates/plugin-compile/index.js +3 -0
  211. package/templates/plugin-compile/package.json.tmpl +43 -0
  212. package/templates/plugin-compile/src/index.ts +153 -0
  213. package/templates/plugin-compile/tsconfig.json +28 -0
@@ -0,0 +1,943 @@
1
+ import * as helper from '@spcsn/taro-helper';
2
+
3
+ import doctor from '../doctor';
4
+
5
+ const validator = doctor.validators[1];
6
+ const baseConfig = {
7
+ projectName: 'test',
8
+ sourceRoot: 'src',
9
+ outputRoot: 'dist',
10
+ framework: 'react',
11
+ };
12
+
13
+ function getConfig(config) {
14
+ return {
15
+ projectConfig: {
16
+ ...baseConfig,
17
+ ...config,
18
+ },
19
+ helper,
20
+ configPath: '',
21
+ };
22
+ }
23
+
24
+ describe('config validator of doctor', () => {
25
+ it("should config include's all the required values", async () => {
26
+ let { messages } = await validator({
27
+ projectConfig: {},
28
+ helper,
29
+ configPath: '',
30
+ });
31
+ expect(messages.length).toEqual(6);
32
+ let msgs = messages.map((line) => line.content);
33
+ expect(msgs.includes('缺少 "projectName" 配置项')).toBeTruthy();
34
+ expect(msgs.includes('缺少 "sourceRoot" 配置项')).toBeTruthy();
35
+ expect(msgs.includes('缺少 "outputRoot" 配置项')).toBeTruthy();
36
+ expect(msgs.includes('缺少 "framework" 配置项')).toBeTruthy();
37
+
38
+ const res = await validator({
39
+ projectConfig: {
40
+ projectName: '',
41
+ sourceRoot: '',
42
+ outputRoot: '',
43
+ framework: '',
44
+ },
45
+ helper,
46
+ configPath: '',
47
+ });
48
+ messages = res.messages;
49
+
50
+ expect(messages.length).toEqual(3);
51
+ msgs = messages.map((line) => line.content);
52
+ expect(
53
+ msgs.includes('framework 的值 "" 与任何指定选项 ["nerv","react","preact","solid","vue","vue3","none"] 都不匹配'),
54
+ ).toBeTruthy();
55
+ });
56
+
57
+ it('date', async () => {
58
+ let { messages } = await validator(
59
+ getConfig({
60
+ date: '2020-5-26',
61
+ }),
62
+ );
63
+
64
+ expect(messages.length).toEqual(3);
65
+
66
+ const res = await validator(
67
+ getConfig({
68
+ date: 'abc',
69
+ }),
70
+ );
71
+ messages = res.messages;
72
+
73
+ expect(messages.length).toEqual(3);
74
+ expect(messages[2].content).toEqual(
75
+ 'date 的值 "abc" 与 "\\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01])" 不匹配',
76
+ );
77
+ });
78
+
79
+ it('framework', async () => {
80
+ let res = await validator(
81
+ getConfig({
82
+ framework: 'react',
83
+ }),
84
+ );
85
+ expect(res.messages.length).toEqual(3);
86
+
87
+ res = await validator(
88
+ getConfig({
89
+ framework: 'vue',
90
+ }),
91
+ );
92
+ expect(res.messages.length).toEqual(3);
93
+
94
+ res = await validator(
95
+ getConfig({
96
+ framework: 'nerv',
97
+ }),
98
+ );
99
+ expect(res.messages.length).toEqual(3);
100
+
101
+ res = await validator(
102
+ getConfig({
103
+ framework: 'vue3',
104
+ }),
105
+ );
106
+ expect(res.messages.length).toEqual(3);
107
+
108
+ res = await validator(
109
+ getConfig({
110
+ framework: 'other',
111
+ }),
112
+ );
113
+ expect(res.messages.length).toEqual(3);
114
+ expect(res.messages[2].content).toEqual(
115
+ 'framework 的值 "other" 与任何指定选项 ["nerv","react","preact","solid","vue","vue3","none"] 都不匹配',
116
+ );
117
+ });
118
+
119
+ it('designWidth', async () => {
120
+ let res = await validator(
121
+ getConfig({
122
+ designWidth: '750',
123
+ }),
124
+ );
125
+ expect(res.messages.length).toEqual(3);
126
+
127
+ res = await validator(
128
+ getConfig({
129
+ designWidth: 'a',
130
+ }),
131
+ );
132
+ expect(res.messages.length).toEqual(3);
133
+
134
+ res = await validator(
135
+ getConfig({
136
+ designWidth: 700.5,
137
+ }),
138
+ );
139
+ expect(res.messages.length).toEqual(3);
140
+
141
+ res = await validator(
142
+ getConfig({
143
+ designWidth: -640,
144
+ }),
145
+ );
146
+ expect(res.messages.length).toEqual(3);
147
+ });
148
+
149
+ it('deviceRatio', async () => {
150
+ let res = await validator(
151
+ getConfig({
152
+ deviceRatio: {
153
+ 640: 2.34 / 2,
154
+ 750: 1,
155
+ 828: 1.81 / 2,
156
+ },
157
+ }),
158
+ );
159
+ expect(res.messages.length).toEqual(3);
160
+
161
+ res = await validator(
162
+ getConfig({
163
+ deviceRatio: {
164
+ 640: 2.34 / 2,
165
+ 750: 'a',
166
+ 828: 1.81 / 2,
167
+ },
168
+ }),
169
+ );
170
+ expect(res.messages.length).toEqual(3);
171
+ });
172
+
173
+ it('plugins', async () => {
174
+ let res = await validator(
175
+ getConfig({
176
+ plugins: [
177
+ '@spcsn/taro-plugin-mock',
178
+ [
179
+ '@spcsn/taro-plugin-mock',
180
+ {
181
+ mocks: {
182
+ '/api/user/1': {
183
+ name: 'judy',
184
+ desc: 'Mental guy',
185
+ },
186
+ },
187
+ },
188
+ ],
189
+ ['@spcsn/taro-plugin-mock'],
190
+ '/absulute/path/plugin/filename',
191
+ ],
192
+ }),
193
+ );
194
+ expect(res.messages.length).toEqual(3);
195
+
196
+ res = await validator(
197
+ getConfig({
198
+ plugins: [1, {}, ['x', 1], [{}, 'x'], ['x', {}, 1], ['']],
199
+ }),
200
+ );
201
+ expect(res.messages.length).toEqual(6);
202
+ });
203
+
204
+ it('presets', async () => {
205
+ let res = await validator(
206
+ getConfig({
207
+ presets: [
208
+ '@spcsn/taro-plugin-mock',
209
+ [
210
+ '@spcsn/taro-plugin-mock',
211
+ {
212
+ mocks: {
213
+ '/api/user/1': {
214
+ name: 'judy',
215
+ desc: 'Mental guy',
216
+ },
217
+ },
218
+ },
219
+ ],
220
+ ['@spcsn/taro-plugin-mock'],
221
+ '/absulute/path/plugin/filename',
222
+ ],
223
+ }),
224
+ );
225
+ expect(res.messages.length).toEqual(3);
226
+
227
+ res = await validator(
228
+ getConfig({
229
+ presets: [1, {}, ['x', 1], [{}, 'x'], ['x', {}, 1], ['']],
230
+ }),
231
+ );
232
+ expect(res.messages.length).toEqual(6);
233
+ });
234
+
235
+ it('terser', async () => {
236
+ let res = await validator(
237
+ getConfig({
238
+ terser: {
239
+ enable: true,
240
+ config: {},
241
+ },
242
+ }),
243
+ );
244
+ expect(res.messages.length).toEqual(3);
245
+
246
+ res = await validator(
247
+ getConfig({
248
+ terser: {
249
+ enables: true,
250
+ enable: 1,
251
+ config: [],
252
+ },
253
+ }),
254
+ );
255
+ expect(res.messages.length).toEqual(5);
256
+ });
257
+
258
+ it('csso', async () => {
259
+ let res = await validator(
260
+ getConfig({
261
+ csso: {
262
+ enable: true,
263
+ config: {},
264
+ },
265
+ }),
266
+ );
267
+ expect(res.messages.length).toEqual(3);
268
+
269
+ res = await validator(
270
+ getConfig({
271
+ csso: {
272
+ enables: true,
273
+ enable: 1,
274
+ config: [],
275
+ },
276
+ }),
277
+ );
278
+ expect(res.messages.length).toEqual(5);
279
+ });
280
+
281
+ it('uglify', async () => {
282
+ let res = await validator(
283
+ getConfig({
284
+ uglify: {
285
+ enable: true,
286
+ config: {},
287
+ },
288
+ }),
289
+ );
290
+ expect(res.messages.length).toEqual(3);
291
+
292
+ res = await validator(
293
+ getConfig({
294
+ uglify: {
295
+ enables: true,
296
+ enable: 1,
297
+ config: [],
298
+ },
299
+ }),
300
+ );
301
+ expect(res.messages.length).toEqual(3);
302
+ });
303
+
304
+ it('sass', async () => {
305
+ let res = await validator(
306
+ getConfig({
307
+ sass: {
308
+ resource: '/src/styles/variable.scss',
309
+ },
310
+ }),
311
+ );
312
+ expect(res.messages.length).toEqual(3);
313
+
314
+ res = await validator(
315
+ getConfig({
316
+ sass: {
317
+ resource: ['./src/styles/variable.scss', './src/styles/mixins.scss'],
318
+ projectDirectory: '/root',
319
+ data: '$nav-height: 48px;',
320
+ },
321
+ }),
322
+ );
323
+ expect(res.messages.length).toEqual(3);
324
+
325
+ res = await validator(
326
+ getConfig({
327
+ sass: {
328
+ resource: {},
329
+ projectDirectory: 1,
330
+ data: 1,
331
+ },
332
+ }),
333
+ );
334
+ expect(res.messages.length).toEqual(5);
335
+ });
336
+
337
+ it('env', async () => {
338
+ const res = await validator(
339
+ getConfig({
340
+ env: {
341
+ NODE_ENV: '"development"',
342
+ },
343
+ }),
344
+ );
345
+ expect(res.messages.length).toEqual(3);
346
+ });
347
+
348
+ it('defineConstants', async () => {
349
+ const res = await validator(
350
+ getConfig({
351
+ defineConstants: {
352
+ A: '"a"',
353
+ },
354
+ }),
355
+ );
356
+ expect(res.messages.length).toEqual(3);
357
+ });
358
+
359
+ it('alias', async () => {
360
+ let res = await validator(
361
+ getConfig({
362
+ alias: {
363
+ '@/components': 'src/components',
364
+ },
365
+ }),
366
+ );
367
+ expect(res.messages.length).toEqual(3);
368
+
369
+ res = await validator(
370
+ getConfig({
371
+ alias: {
372
+ '@/components': ['src/components'],
373
+ '@/utils': 1,
374
+ '@/project': {},
375
+ },
376
+ }),
377
+ );
378
+ expect(res.messages.length).toEqual(3);
379
+ });
380
+
381
+ it('copy', async () => {
382
+ let res = await validator(
383
+ getConfig({
384
+ copy: {
385
+ patterns: [
386
+ { from: 'src/asset/tt/', to: 'dist/asset/tt/', ignore: ['*.js'] },
387
+ { from: 'src/asset/tt/sd.jpg', to: 'dist/asset/tt/sd.jpg' },
388
+ ],
389
+ },
390
+ }),
391
+ );
392
+ expect(res.messages.length).toEqual(3);
393
+
394
+ res = await validator(
395
+ getConfig({
396
+ copy: {
397
+ options: {
398
+ ignore: ['*.js', '*.css'],
399
+ },
400
+ },
401
+ }),
402
+ );
403
+ expect(res.messages.length).toEqual(3);
404
+
405
+ res = await validator(
406
+ getConfig({
407
+ copy: {
408
+ patterns: [{ ignore: ['*.js'] }, { from: 'src/asset/tt/sd.jpg' }, { to: 'dist/asset/tt/sd.jpg' }],
409
+ options: {
410
+ ignore: [1, true, {}],
411
+ },
412
+ },
413
+ }),
414
+ );
415
+ expect(res.messages.length).toEqual(9);
416
+ });
417
+
418
+ it('mini.compile', async () => {
419
+ let res = await validator(
420
+ getConfig({
421
+ mini: {
422
+ compile: {
423
+ exclude: ['src/pages/index/vod-wx-sdk-v2.js', (modulePath) => modulePath.indexOf('vod-wx-sdk-v2') >= 0],
424
+ include: ['src/pages/index/vod-wx-sdk-v2.js', (modulePath) => modulePath.indexOf('vod-wx-sdk-v2') >= 0],
425
+ },
426
+ },
427
+ }),
428
+ );
429
+ expect(res.messages.length).toEqual(3);
430
+
431
+ res = await validator(
432
+ getConfig({
433
+ mini: {
434
+ compile: {
435
+ exclude: [null, []],
436
+ include: [1, {}],
437
+ },
438
+ },
439
+ }),
440
+ );
441
+ expect(res.messages.length).toEqual(6);
442
+ });
443
+
444
+ it('mini.webpackChain', async () => {
445
+ let res = await validator(
446
+ getConfig({
447
+ mini: {
448
+ webpackChain(chain, webpack) {
449
+ console.log(chain, webpack);
450
+ },
451
+ },
452
+ }),
453
+ );
454
+ expect(res.messages.length).toEqual(3);
455
+
456
+ res = await validator(
457
+ getConfig({
458
+ mini: {
459
+ webpackChain: 'some',
460
+ },
461
+ }),
462
+ );
463
+ expect(res.messages.length).toEqual(3);
464
+ });
465
+
466
+ it('mini.commonChunks', async () => {
467
+ let res = await validator(
468
+ getConfig({
469
+ mini: {
470
+ commonChunks: ['runtime', 'vendors', 'taro', 'common'],
471
+ },
472
+ }),
473
+ );
474
+ expect(res.messages.length).toEqual(3);
475
+
476
+ res = await validator(
477
+ getConfig({
478
+ mini: {
479
+ commonChunks(commonChunks) {
480
+ commonChunks.push('yourCustomCommonChunkName');
481
+ return commonChunks;
482
+ },
483
+ },
484
+ }),
485
+ );
486
+ expect(res.messages.length).toEqual(3);
487
+
488
+ res = await validator(
489
+ getConfig({
490
+ mini: {
491
+ commonChunks: 1,
492
+ },
493
+ }),
494
+ );
495
+ expect(res.messages.length).toEqual(3);
496
+ });
497
+
498
+ it('mini.addChunkPages', async () => {
499
+ let res = await validator(
500
+ getConfig({
501
+ mini: {
502
+ addChunkPages(pages, pagesNames) {
503
+ console.log(pages, pagesNames);
504
+ },
505
+ },
506
+ }),
507
+ );
508
+ expect(res.messages.length).toEqual(3);
509
+
510
+ res = await validator(
511
+ getConfig({
512
+ mini: {
513
+ addChunkPages: 1,
514
+ },
515
+ }),
516
+ );
517
+ expect(res.messages.length).toEqual(3);
518
+ });
519
+
520
+ it('mini.postcss', async () => {
521
+ let res = await validator(
522
+ getConfig({
523
+ mini: {
524
+ postcss: {
525
+ autoprefixer: {
526
+ enable: true,
527
+ config: {},
528
+ },
529
+ },
530
+ },
531
+ }),
532
+ );
533
+ expect(res.messages.length).toEqual(3);
534
+
535
+ res = await validator(
536
+ getConfig({
537
+ mini: {
538
+ postcss: {
539
+ autoprefixer: {
540
+ enable: 1,
541
+ config: 'a',
542
+ },
543
+ pxtransform: true,
544
+ },
545
+ },
546
+ }),
547
+ );
548
+ expect(res.messages.length).toEqual(5);
549
+ });
550
+
551
+ it('mini.output', async () => {
552
+ let res = await validator(
553
+ getConfig({
554
+ mini: {
555
+ output: {},
556
+ },
557
+ }),
558
+ );
559
+ expect(res.messages.length).toEqual(3);
560
+
561
+ res = await validator(
562
+ getConfig({
563
+ mini: {
564
+ output: 1,
565
+ },
566
+ }),
567
+ );
568
+ expect(res.messages.length).toEqual(3);
569
+ });
570
+
571
+ it("mini's third party options", async () => {
572
+ const res = await validator(
573
+ getConfig({
574
+ mini: {
575
+ cssLoaderOption: {},
576
+ styleLoaderOption: {},
577
+ sassLoaderOption: {},
578
+ lessLoaderOption: {},
579
+ stylusLoaderOption: {},
580
+ mediaUrlLoaderOption: {},
581
+ fontUrlLoaderOption: {},
582
+ imageUrlLoaderOption: {},
583
+ miniCssExtractPluginOption: {},
584
+ },
585
+ }),
586
+ );
587
+ expect(res.messages.length).toEqual(3);
588
+ });
589
+
590
+ it('h5.devServer', async () => {
591
+ let res = await validator(
592
+ getConfig({
593
+ h5: {
594
+ devServer: {
595
+ port: 10086,
596
+ },
597
+ },
598
+ }),
599
+ );
600
+ expect(res.messages.length).toEqual(3);
601
+
602
+ res = await validator(
603
+ getConfig({
604
+ h5: {
605
+ devServer: 1,
606
+ },
607
+ }),
608
+ );
609
+ expect(res.messages.length).toEqual(3);
610
+ });
611
+
612
+ it('h5.output', async () => {
613
+ let res = await validator(
614
+ getConfig({
615
+ h5: {
616
+ output: {
617
+ filename: 'js/[name].[hash:8].js',
618
+ chunkFilename: 'js/[name].[chunkhash:8].js',
619
+ },
620
+ },
621
+ }),
622
+ );
623
+ expect(res.messages.length).toEqual(3);
624
+
625
+ res = await validator(
626
+ getConfig({
627
+ h5: {
628
+ output: 1,
629
+ },
630
+ }),
631
+ );
632
+ expect(res.messages.length).toEqual(3);
633
+ });
634
+
635
+ it('h5.publicPath', async () => {
636
+ let res = await validator(
637
+ getConfig({
638
+ h5: {
639
+ publicPath: '/',
640
+ },
641
+ }),
642
+ );
643
+ expect(res.messages.length).toEqual(3);
644
+
645
+ res = await validator(
646
+ getConfig({
647
+ h5: {
648
+ publicPath: 1,
649
+ },
650
+ }),
651
+ );
652
+ expect(res.messages.length).toEqual(3);
653
+ });
654
+
655
+ it('h5.staticDirectory', async () => {
656
+ let res = await validator(
657
+ getConfig({
658
+ h5: {
659
+ staticDirectory: '/',
660
+ },
661
+ }),
662
+ );
663
+ expect(res.messages.length).toEqual(3);
664
+
665
+ res = await validator(
666
+ getConfig({
667
+ h5: {
668
+ staticDirectory: 1,
669
+ },
670
+ }),
671
+ );
672
+ expect(res.messages.length).toEqual(3);
673
+ });
674
+
675
+ it('h5.chunkDirectory', async () => {
676
+ let res = await validator(
677
+ getConfig({
678
+ h5: {
679
+ chunkDirectory: '/',
680
+ },
681
+ }),
682
+ );
683
+ expect(res.messages.length).toEqual(3);
684
+
685
+ res = await validator(
686
+ getConfig({
687
+ h5: {
688
+ chunkDirectory: 1,
689
+ },
690
+ }),
691
+ );
692
+ expect(res.messages.length).toEqual(3);
693
+ });
694
+
695
+ it('h5.webpackChain', async () => {
696
+ let res = await validator(
697
+ getConfig({
698
+ h5: {
699
+ webpackChain(chain, webpack) {
700
+ console.log(chain, webpack);
701
+ },
702
+ },
703
+ }),
704
+ );
705
+ expect(res.messages.length).toEqual(3);
706
+
707
+ res = await validator(
708
+ getConfig({
709
+ h5: {
710
+ webpackChain: 'some',
711
+ },
712
+ }),
713
+ );
714
+ expect(res.messages.length).toEqual(3);
715
+ });
716
+
717
+ // it('h5.webpack[DEPRECATED]', async () => {
718
+ // const res = await validator(getConfig({
719
+ // h5: {
720
+ // webpack: 1
721
+ // }
722
+ // }))
723
+ // expect(res.messages.length).toEqual(3)
724
+ // expect(res.messages[0].content).toEqual('h5.webpack "h5.webpack" is not allowed')
725
+ // })
726
+
727
+ it('h5.router', async () => {
728
+ let res = await validator(
729
+ getConfig({
730
+ h5: {
731
+ router: {
732
+ mode: 'hash',
733
+ },
734
+ },
735
+ }),
736
+ );
737
+ expect(res.messages.length).toEqual(3);
738
+
739
+ res = await validator(
740
+ getConfig({
741
+ h5: {
742
+ router: 1,
743
+ },
744
+ }),
745
+ );
746
+ expect(res.messages.length).toEqual(3);
747
+ });
748
+
749
+ it('h5.entry', async () => {
750
+ let res = await validator(
751
+ getConfig({
752
+ h5: {
753
+ entry: './path/to/my/entry/file.js',
754
+ },
755
+ }),
756
+ );
757
+ expect(res.messages.length).toEqual(3);
758
+
759
+ res = await validator(
760
+ getConfig({
761
+ h5: {
762
+ entry: ['./path/to/my/entry/file.js', './path/other/file.js'],
763
+ },
764
+ }),
765
+ );
766
+ expect(res.messages.length).toEqual(3);
767
+
768
+ res = await validator(
769
+ getConfig({
770
+ h5: {
771
+ entry: {
772
+ main: './path/to/my/entry/file.js',
773
+ },
774
+ },
775
+ }),
776
+ );
777
+ expect(res.messages.length).toEqual(3);
778
+
779
+ res = await validator(
780
+ getConfig({
781
+ h5: {
782
+ entry: {
783
+ main: ['./path/to/my/entry/file.js', './path/other/file.js'],
784
+ },
785
+ },
786
+ }),
787
+ );
788
+ expect(res.messages.length).toEqual(3);
789
+
790
+ res = await validator(
791
+ getConfig({
792
+ h5: {
793
+ entry: () => './demo',
794
+ },
795
+ }),
796
+ );
797
+ expect(res.messages.length).toEqual(3);
798
+ });
799
+
800
+ it('h5.enableSourceMap', async () => {
801
+ let res = await validator(
802
+ getConfig({
803
+ h5: {
804
+ enableSourceMap: true,
805
+ },
806
+ }),
807
+ );
808
+ expect(res.messages.length).toEqual(3);
809
+
810
+ res = await validator(
811
+ getConfig({
812
+ h5: {
813
+ enableSourceMap: 1,
814
+ },
815
+ }),
816
+ );
817
+ expect(res.messages.length).toEqual(3);
818
+ });
819
+
820
+ it('h5.enableExtract', async () => {
821
+ let res = await validator(
822
+ getConfig({
823
+ h5: {
824
+ enableExtract: true,
825
+ },
826
+ }),
827
+ );
828
+ expect(res.messages.length).toEqual(3);
829
+
830
+ res = await validator(
831
+ getConfig({
832
+ h5: {
833
+ enableExtract: 1,
834
+ },
835
+ }),
836
+ );
837
+ expect(res.messages.length).toEqual(3);
838
+ });
839
+
840
+ it('h5.esnextModules', async () => {
841
+ let res = await validator(
842
+ getConfig({
843
+ h5: {
844
+ esnextModules: ['taro-ui'],
845
+ },
846
+ }),
847
+ );
848
+ expect(res.messages.length).toEqual(3);
849
+
850
+ res = await validator(
851
+ getConfig({
852
+ h5: {
853
+ esnextModules: [1, true, {}],
854
+ },
855
+ }),
856
+ );
857
+ expect(res.messages.length).toEqual(4);
858
+
859
+ res = await validator(getConfig({ h5: 1 }));
860
+ expect(res.messages.length).toEqual(3);
861
+ });
862
+
863
+ it('h5.postcss', async () => {
864
+ let res = await validator(
865
+ getConfig({
866
+ h5: {
867
+ postcss: {
868
+ autoprefixer: {
869
+ enable: true,
870
+ config: {},
871
+ },
872
+ },
873
+ },
874
+ }),
875
+ );
876
+ expect(res.messages.length).toEqual(3);
877
+
878
+ res = await validator(
879
+ getConfig({
880
+ h5: {
881
+ postcss: {
882
+ autoprefixer: {
883
+ enable: 1,
884
+ config: 'a',
885
+ },
886
+ pxtransform: true,
887
+ },
888
+ },
889
+ }),
890
+ );
891
+ expect(res.messages.length).toEqual(5);
892
+ });
893
+
894
+ it("h5's third party options", async () => {
895
+ const res = await validator(
896
+ getConfig({
897
+ h5: {
898
+ cssLoaderOption: {},
899
+ styleLoaderOption: {},
900
+ sassLoaderOption: {},
901
+ lessLoaderOption: {},
902
+ stylusLoaderOption: {},
903
+ mediaUrlLoaderOption: {},
904
+ fontUrlLoaderOption: {},
905
+ imageUrlLoaderOption: {},
906
+ miniCssExtractPluginOption: {},
907
+ },
908
+ }),
909
+ );
910
+ expect(res.messages.length).toEqual(3);
911
+ });
912
+
913
+ it('unknow', async () => {
914
+ const res = await validator(
915
+ getConfig({
916
+ unknow: {},
917
+ }),
918
+ );
919
+ expect(res.messages.length).toEqual(3);
920
+ });
921
+
922
+ it('mini.unknow', async () => {
923
+ const res = await validator(
924
+ getConfig({
925
+ mini: {
926
+ unknow: {},
927
+ },
928
+ }),
929
+ );
930
+ expect(res.messages.length).toEqual(3);
931
+ });
932
+
933
+ it('h5.unknow', async () => {
934
+ const res = await validator(
935
+ getConfig({
936
+ h5: {
937
+ unknow: {},
938
+ },
939
+ }),
940
+ );
941
+ expect(res.messages.length).toEqual(3);
942
+ });
943
+ });