UNPKG

4.21 kBPlain TextView Raw
1import * as Joi from '@hapi/joi'
2
3const schema = Joi.object().keys({
4 projectName: Joi.string().required(),
5 date: Joi.date(),
6 designWidth: Joi.number().integer().positive(),
7 deviceRatio: Joi.object().pattern(Joi.number(), Joi.number()),
8 sourceRoot: Joi.string().required(),
9 outputRoot: Joi.string().required(),
10
11 plugins: Joi.array().items(Joi.alternatives(
12 Joi.string(),
13 Joi.array().ordered(Joi.string().required(), Joi.object())
14 )),
15
16 presets: Joi.array().items(Joi.alternatives(
17 Joi.string(),
18 Joi.array().ordered(Joi.string().required(), Joi.object())
19 )),
20
21 env: Joi.object().pattern(
22 Joi.string(), Joi.any()
23 ),
24
25 defineConstants: Joi.object().pattern(
26 Joi.string(), Joi.any()
27 ),
28
29 copy: Joi.object().keys({
30 patterns: Joi.array().items(
31 Joi.object().keys({
32 from: Joi.string().required(),
33 to: Joi.string().required(),
34 ignore: Joi.string()
35 })
36 ),
37
38 options: Joi.object().keys({
39 ignore: Joi.array().items(Joi.string())
40 })
41 }),
42
43 framework: Joi.any().valid('nerv', 'react', 'vue', 'vue3'),
44
45 mini: Joi.object().keys({
46 compile: Joi.object().keys({
47 exclude: Joi.array().items(Joi.string(), Joi.function()),
48 include: Joi.array().items(Joi.string(), Joi.function())
49 }),
50 webpackChain: Joi.func(),
51 commonChunks: Joi.alternatives(Joi.func(), Joi.array().items(Joi.string())),
52 addChunkPages: Joi.func(),
53 output: Joi.object(),
54 postcss: Joi.object().pattern(
55 Joi.string(),
56 Joi.object().keys({
57 enable: Joi.bool(),
58 config: Joi.object() // 第三方配置
59 })
60 ), // 第三方配置
61 cssLoaderOption: Joi.object(), // 第三方配置
62 styleLoaderOption: Joi.object(), // 第三方配置
63 sassLoaderOption: Joi.object(), // 第三方配置
64 lessLoaderOption: Joi.object(), // 第三方配置
65 stylusLoaderOption: Joi.object(), // 第三方配置
66 mediaUrlLoaderOption: Joi.object(), // 第三方配置
67 fontUrlLoaderOption: Joi.object(), // 第三方配置
68 imageUrlLoaderOption: Joi.object(), // 第三方配置
69 miniCssExtractPluginOption: Joi.object() // 第三方配置
70 }).unknown(),
71
72 alias: Joi.object().pattern(Joi.string(), Joi.string()),
73
74 csso: Joi.object().keys({
75 enable: Joi.bool(),
76 config: Joi.object()
77 }),
78 uglify: Joi.object().keys({
79 enable: Joi.bool(),
80 config: Joi.object()
81 }),
82 terser: Joi.object().keys({
83 enable: Joi.bool(),
84 config: Joi.object()
85 }),
86 sass: Joi.object().keys({
87 resource: Joi.alternatives(Joi.array(), Joi.string()),
88 projectDirectory: Joi.string(),
89 data: Joi.string()
90 }).unknown(),
91
92 h5: Joi.object().keys({
93 devServer: Joi.object(), // 第三方配置
94 publicPath: Joi.string(),
95 staticDirectory: Joi.string(),
96 chunkDirectory: Joi.string(),
97 webpackChain: Joi.func(),
98 output: Joi.object(),
99 router: Joi.object(),
100
101 esnextModules: Joi.array().items(Joi.string()),
102
103 // DEPRECATED: https://nervjs.github.io/taro/docs/config-detail.html#deprecated-h5webpack
104 webpack: Joi.forbidden(),
105
106 // https://webpack.js.org/configuration/entry-context/#entry
107 entry: Joi.alternatives(
108 Joi.string(),
109 Joi.array().items(Joi.string()),
110 Joi.object().pattern(
111 Joi.string(),
112 Joi.alternatives(Joi.string(), Joi.array().items(Joi.string()))
113 ),
114 Joi.func()
115 ),
116 enableSourceMap: Joi.bool(),
117 enableExtract: Joi.bool(),
118 cssLoaderOption: Joi.object(), // 第三方配置
119 styleLoaderOption: Joi.object(), // 第三方配置
120 sassLoaderOption: Joi.object(), // 第三方配置
121 lessLoaderOption: Joi.object(), // 第三方配置
122 stylusLoaderOption: Joi.object(), // 第三方配置
123 mediaUrlLoaderOption: Joi.object(), // 第三方配置
124 fontUrlLoaderOption: Joi.object(), // 第三方配置
125 imageUrlLoaderOption: Joi.object(), // 第三方配置
126 miniCssExtractPluginOption: Joi.object(), // 第三方配置
127
128 postcss: Joi.object().pattern(
129 Joi.string(),
130 Joi.object().keys({
131 enable: Joi.bool(),
132 config: Joi.object() // 第三方配置
133 })
134 )
135 }).unknown()
136}).unknown()
137
138export default schema