@modern-js/module-tools-docs 2.0.0-beta.4 → 2.0.1

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 (198) hide show
  1. package/.eslintrc.js +13 -0
  2. package/docs/en/api/config/_category_.json +4 -0
  3. package/docs/en/api/{build-config.md → config/build-config.md} +198 -105
  4. package/docs/en/api/{build-preset.md → config/build-preset.md} +65 -46
  5. package/docs/{zh/api → en/api/config}/design-system.md +130 -127
  6. package/docs/en/api/config/plugins.md +18 -0
  7. package/docs/en/api/{test.md → config/testing.md} +21 -12
  8. package/docs/en/api/index.md +3 -1
  9. package/docs/en/api/plugin-api/_category_.json +4 -0
  10. package/docs/en/api/plugin-api/plugin-hooks.md +501 -0
  11. package/docs/en/guide/advance/_category_.json +4 -0
  12. package/docs/en/guide/advance/asset.mdx +47 -30
  13. package/docs/en/guide/advance/build-umd.mdx +88 -80
  14. package/docs/en/guide/advance/copy.md +31 -28
  15. package/docs/en/guide/advance/external-dependency.mdx +27 -23
  16. package/docs/en/guide/advance/in-depth-about-build.md +56 -50
  17. package/docs/en/guide/advance/in-depth-about-dev-command.md +7 -4
  18. package/docs/en/guide/advance/theme-config.mdx +80 -0
  19. package/docs/en/guide/basic/_category_.json +4 -0
  20. package/docs/en/guide/basic/before-getting-started.md +28 -23
  21. package/docs/en/guide/basic/command-preview.md +18 -14
  22. package/docs/en/guide/basic/modify-output-product.md +27 -20
  23. package/docs/en/guide/basic/publish-your-project.md +21 -19
  24. package/docs/en/guide/basic/test-your-project.mdx +19 -16
  25. package/docs/en/guide/basic/use-micro-generator.md +10 -7
  26. package/docs/en/guide/basic/using-storybook.mdx +27 -26
  27. package/docs/en/guide/best-practices/_category_.json +4 -0
  28. package/docs/en/guide/best-practices/components.mdx +783 -0
  29. package/docs/en/guide/intro/_category_.json +4 -0
  30. package/docs/en/guide/intro/getting-started.md +9 -4
  31. package/docs/en/guide/intro/welcome.md +4 -0
  32. package/docs/en/guide/intro/why-module-engineering-solution.md +5 -1
  33. package/docs/en/index.md +3 -5
  34. package/docs/en/plugins/guide/_category_.json +4 -0
  35. package/docs/en/plugins/guide/getting-started.mdx +84 -0
  36. package/docs/en/plugins/guide/plugin-object.mdx +85 -0
  37. package/docs/en/plugins/guide/setup-function.mdx +117 -0
  38. package/docs/en/plugins/official-list/_category_.json +4 -0
  39. package/docs/en/plugins/official-list/overview.md +6 -0
  40. package/docs/zh/api/config/_category_.json +4 -0
  41. package/docs/zh/api/config/build-config.md +658 -0
  42. package/docs/zh/api/{build-preset.md → config/build-preset.md} +49 -36
  43. package/docs/zh/api/config/design-system.md +1166 -0
  44. package/docs/zh/api/config/plugins.md +18 -0
  45. package/docs/zh/api/{testing.md → config/testing.md} +18 -13
  46. package/docs/zh/api/index.md +4 -1
  47. package/docs/zh/api/plugin-api/_category_.json +4 -0
  48. package/docs/zh/api/plugin-api/plugin-hooks.md +500 -0
  49. package/docs/zh/guide/advance/_category_.json +4 -0
  50. package/docs/zh/guide/advance/asset.mdx +47 -30
  51. package/docs/zh/guide/advance/build-umd.mdx +88 -71
  52. package/docs/zh/guide/advance/copy.md +31 -28
  53. package/docs/zh/guide/advance/external-dependency.mdx +27 -23
  54. package/docs/zh/guide/advance/in-depth-about-build.md +55 -50
  55. package/docs/zh/guide/advance/in-depth-about-dev-command.md +7 -4
  56. package/docs/zh/guide/advance/theme-config.mdx +78 -0
  57. package/docs/zh/guide/basic/_category_.json +4 -0
  58. package/docs/zh/guide/basic/before-getting-started.md +27 -22
  59. package/docs/zh/guide/basic/command-preview.md +17 -13
  60. package/docs/zh/guide/basic/modify-output-product.md +28 -21
  61. package/docs/zh/guide/basic/publish-your-project.md +22 -17
  62. package/docs/zh/guide/basic/test-your-project.mdx +20 -16
  63. package/docs/zh/guide/basic/use-micro-generator.md +10 -7
  64. package/docs/zh/guide/basic/using-storybook.mdx +27 -24
  65. package/docs/zh/guide/best-practices/_category_.json +4 -0
  66. package/docs/zh/guide/best-practices/components.mdx +793 -0
  67. package/docs/zh/guide/intro/_category_.json +4 -0
  68. package/docs/zh/guide/intro/getting-started.md +10 -4
  69. package/docs/zh/guide/intro/welcome.md +4 -0
  70. package/docs/zh/guide/intro/why-module-engineering-solution.md +5 -1
  71. package/docs/zh/index.md +3 -2
  72. package/docs/zh/plugins/guide/_category_.json +4 -0
  73. package/docs/zh/plugins/guide/getting-started.mdx +84 -0
  74. package/docs/zh/plugins/guide/plugin-object.mdx +85 -0
  75. package/docs/zh/plugins/guide/setup-function.mdx +117 -0
  76. package/docs/zh/plugins/official-list/_category_.json +4 -0
  77. package/docs/zh/plugins/official-list/overview.md +5 -0
  78. package/modern.config.ts +118 -0
  79. package/package.json +8 -6
  80. package/{docs/.island/styles → theme}/index.css +0 -1
  81. package/theme/index.ts +4 -0
  82. package/tsconfig.json +7 -0
  83. package/docs/.island/config.ts +0 -245
  84. package/docs/.island/dist/404.html +0 -41
  85. package/docs/.island/dist/assets/before-getting-started.1b82b538.js +0 -87
  86. package/docs/.island/dist/assets/before-getting-started.582a31cc.js +0 -87
  87. package/docs/.island/dist/assets/build-config.72eb0918.js +0 -804
  88. package/docs/.island/dist/assets/build-config.d8bb1658.js +0 -809
  89. package/docs/.island/dist/assets/build-preset.96805d7d.js +0 -256
  90. package/docs/.island/dist/assets/build-preset.c20dcd40.js +0 -256
  91. package/docs/.island/dist/assets/build-your-ui.7f349247.js +0 -2
  92. package/docs/.island/dist/assets/build-your-ui.a8361604.js +0 -2
  93. package/docs/.island/dist/assets/command-preview.2d45fc82.js +0 -264
  94. package/docs/.island/dist/assets/command-preview.dc51b953.js +0 -264
  95. package/docs/.island/dist/assets/components.esm.03560353.js +0 -9
  96. package/docs/.island/dist/assets/design-system.86694ff5.js +0 -1254
  97. package/docs/.island/dist/assets/design-system.c4745cce.js +0 -639
  98. package/docs/.island/dist/assets/dev.1d326a37.js +0 -37
  99. package/docs/.island/dist/assets/dev.1fd06000.js +0 -37
  100. package/docs/.island/dist/assets/down.f35427d3.svg +0 -1
  101. package/docs/.island/dist/assets/extension.12299fd6.js +0 -2
  102. package/docs/.island/dist/assets/extension.96dc63a4.js +0 -2
  103. package/docs/.island/dist/assets/getting-started.40e9218d.js +0 -117
  104. package/docs/.island/dist/assets/getting-started.b1ed3f10.js +0 -114
  105. package/docs/.island/dist/assets/github.3bf8ccee.svg +0 -1
  106. package/docs/.island/dist/assets/index.2b2347ea.js +0 -33
  107. package/docs/.island/dist/assets/index.6cef6f5f.js +0 -4
  108. package/docs/.island/dist/assets/index.cb118238.js +0 -36
  109. package/docs/.island/dist/assets/index.ccb6ce27.js +0 -4
  110. package/docs/.island/dist/assets/island_inject.11a12ecc.js +0 -1
  111. package/docs/.island/dist/assets/island_inject.b13deaee.js +0 -1
  112. package/docs/.island/dist/assets/loading.8c9bb911.svg +0 -1
  113. package/docs/.island/dist/assets/modify-output-product.7f6bff35.js +0 -100
  114. package/docs/.island/dist/assets/modify-output-product.b91eff1f.js +0 -100
  115. package/docs/.island/dist/assets/moon.6b705924.svg +0 -3
  116. package/docs/.island/dist/assets/plugin.895932d8.js +0 -42
  117. package/docs/.island/dist/assets/plugin.d2fbc531.js +0 -42
  118. package/docs/.island/dist/assets/publish-your-project.21b8309f.js +0 -164
  119. package/docs/.island/dist/assets/publish-your-project.8d398b17.js +0 -166
  120. package/docs/.island/dist/assets/right.89674cd7.svg +0 -1
  121. package/docs/.island/dist/assets/search.0aea6901.svg +0 -1
  122. package/docs/.island/dist/assets/search.1c85d17c.js +0 -3
  123. package/docs/.island/dist/assets/search.484eca11.js +0 -222
  124. package/docs/.island/dist/assets/search.54fca8d0.js +0 -3
  125. package/docs/.island/dist/assets/style.09015a4b.css +0 -1
  126. package/docs/.island/dist/assets/style.2e5f7bc2.css +0 -1970
  127. package/docs/.island/dist/assets/sun.841dac10.svg +0 -11
  128. package/docs/.island/dist/assets/test-your-project.18bd4582.js +0 -190
  129. package/docs/.island/dist/assets/test-your-project.f53bebf7.js +0 -190
  130. package/docs/.island/dist/assets/test.0da1f99f.js +0 -67
  131. package/docs/.island/dist/assets/test.0e81f002.js +0 -66
  132. package/docs/.island/dist/assets/translator.b1077c44.svg +0 -1
  133. package/docs/.island/dist/assets/use-micro-generator.7d9e4016.js +0 -60
  134. package/docs/.island/dist/assets/use-micro-generator.db5520c1.js +0 -60
  135. package/docs/.island/dist/assets/using-storybook.57ea6b77.js +0 -260
  136. package/docs/.island/dist/assets/using-storybook.a2212f2e.js +0 -260
  137. package/docs/.island/dist/assets/welcome.0449a9c8.js +0 -13
  138. package/docs/.island/dist/assets/welcome.a8448931.js +0 -13
  139. package/docs/.island/dist/assets/why-module-engineering-solution.6ae8c0e3.js +0 -26
  140. package/docs/.island/dist/assets/why-module-engineering-solution.c9a45cbd.js +0 -26
  141. package/docs/.island/dist/chunk-COLCRJ2V.js +0 -1
  142. package/docs/.island/dist/chunk-K5FMOYDC.js +0 -10
  143. package/docs/.island/dist/chunk-WE42KMYS.js +0 -26
  144. package/docs/.island/dist/client-entry.js +0 -3
  145. package/docs/.island/dist/en/api/build-config.html +0 -344
  146. package/docs/.island/dist/en/api/build-preset.html +0 -82
  147. package/docs/.island/dist/en/api/design-system.html +0 -155
  148. package/docs/.island/dist/en/api/dev.html +0 -45
  149. package/docs/.island/dist/en/api/index.html +0 -41
  150. package/docs/.island/dist/en/api/plugin.html +0 -48
  151. package/docs/.island/dist/en/api/test.html +0 -58
  152. package/docs/.island/dist/en/guide/before-getting-started.html +0 -127
  153. package/docs/.island/dist/en/guide/build-your-ui.html +0 -41
  154. package/docs/.island/dist/en/guide/command-preview.html +0 -100
  155. package/docs/.island/dist/en/guide/extension.html +0 -41
  156. package/docs/.island/dist/en/guide/getting-started.html +0 -76
  157. package/docs/.island/dist/en/guide/modify-output-product.html +0 -140
  158. package/docs/.island/dist/en/guide/publish-your-project.html +0 -91
  159. package/docs/.island/dist/en/guide/test-your-project.html +0 -72
  160. package/docs/.island/dist/en/guide/use-micro-generator.html +0 -65
  161. package/docs/.island/dist/en/guide/using-storybook.html +0 -113
  162. package/docs/.island/dist/en/guide/welcome.html +0 -53
  163. package/docs/.island/dist/en/guide/why-module-engineering-solution.html +0 -49
  164. package/docs/.island/dist/en/index.html +0 -42
  165. package/docs/.island/dist/react-dom.js +0 -1
  166. package/docs/.island/dist/react-dom_client.js +0 -1
  167. package/docs/.island/dist/react.js +0 -1
  168. package/docs/.island/dist/react_jsx-runtime.js +0 -10
  169. package/docs/.island/dist/ssr-manifest.json +0 -57
  170. package/docs/.island/dist/test-result.png +0 -0
  171. package/docs/.island/dist/why-module-solution.png +0 -0
  172. package/docs/.island/dist/zh/api/build-config.html +0 -347
  173. package/docs/.island/dist/zh/api/build-preset.html +0 -82
  174. package/docs/.island/dist/zh/api/design-system.html +0 -149
  175. package/docs/.island/dist/zh/api/dev.html +0 -46
  176. package/docs/.island/dist/zh/api/index.html +0 -41
  177. package/docs/.island/dist/zh/api/plugin.html +0 -48
  178. package/docs/.island/dist/zh/api/test.html +0 -59
  179. package/docs/.island/dist/zh/guide/before-getting-started.html +0 -127
  180. package/docs/.island/dist/zh/guide/build-your-ui.html +0 -41
  181. package/docs/.island/dist/zh/guide/command-preview.html +0 -100
  182. package/docs/.island/dist/zh/guide/extension.html +0 -41
  183. package/docs/.island/dist/zh/guide/getting-started.html +0 -79
  184. package/docs/.island/dist/zh/guide/modify-output-product.html +0 -140
  185. package/docs/.island/dist/zh/guide/publish-your-project.html +0 -92
  186. package/docs/.island/dist/zh/guide/test-your-project.html +0 -72
  187. package/docs/.island/dist/zh/guide/use-micro-generator.html +0 -65
  188. package/docs/.island/dist/zh/guide/using-storybook.html +0 -114
  189. package/docs/.island/dist/zh/guide/welcome.html +0 -53
  190. package/docs/.island/dist/zh/guide/why-module-engineering-solution.html +0 -49
  191. package/docs/.island/dist/zh/index.html +0 -42
  192. package/docs/.island/index.html +0 -39
  193. package/docs/en/api/design-system.md +0 -524
  194. package/docs/en/api/dev.md +0 -32
  195. package/docs/en/api/plugin.md +0 -34
  196. package/docs/zh/api/build-config.md +0 -570
  197. package/docs/zh/api/dev.md +0 -33
  198. package/docs/zh/api/plugins.md +0 -108
@@ -0,0 +1,658 @@
1
+ ---
2
+ sidebar_position: 1
3
+ ---
4
+
5
+ # BuildConfig
6
+
7
+ 本章节描述了 Module tools 关于构建的所有配置
8
+
9
+ ## alias
10
+
11
+ - 类型:`Record<string, string | string[]> | Function`
12
+ - 默认值:`{'@': 'src',}`
13
+
14
+ :::tip
15
+ 对于 TypeScript 项目,只需要在 `tsconfig.json` 中配置 [compilerOptions.paths](https://www.typescriptlang.org/tsconfig#paths), Module tools 会自动识别 `tsconfig.json` 里的别名,因此不需要额外配置 `alias` 字段。
16
+ :::
17
+
18
+ ```js modern.config.ts
19
+ import { defineConfig } from '@modern-js/module-tools';
20
+
21
+ export default defineConfig({
22
+ buildConfig: {
23
+ alias: {
24
+ '@common': './src/common',
25
+ },
26
+ },
27
+ });
28
+ ```
29
+
30
+ 以上配置完成后,如果在代码中引用 `@common/Foo.tsx`, 则会映射到 `<root>/src/common/Foo.tsx` 路径上。
31
+
32
+ `alias` 的值定义为函数时,可以接受预设的 alias 对象,并对其进行修改。
33
+
34
+ ```js modern.config.ts
35
+ import { defineConfig } from '@modern-js/module-tools';
36
+
37
+ export default defineConfig({
38
+ buildConfig: {
39
+ alias: alias => {
40
+ alias['@common'] = './src/common';
41
+ },
42
+ },
43
+ });
44
+ ```
45
+
46
+ 也可以在函数中返回一个新对象作为最终结果,新对象会覆盖预设的 alias 对象。
47
+
48
+ ```js modern.config.ts
49
+ import { defineConfig } from '@modern-js/module-tools';
50
+
51
+ export default defineConfig({
52
+ buildConfig: {
53
+ alias: alias => {
54
+ return {
55
+ '@common': './src/common',
56
+ };
57
+ },
58
+ },
59
+ });
60
+ ```
61
+
62
+ ## asset
63
+
64
+ ### path
65
+
66
+ 静态资源输出路径,会基于 [outDir](/zh/api/build-config/#outDir) 进行输出。
67
+
68
+ - 类型: `string`
69
+ - 默认值: `assets`
70
+
71
+ ### limit
72
+
73
+ 打包时自动内联静态资源的阈值,小于 10KB 的资源会被自动内联进 bundle 产物中。
74
+
75
+ - 类型: `number`
76
+ - 默认值: `10 * 1024`
77
+
78
+ ### publicPath
79
+
80
+ 打包时给未内联资源的 CDN 前缀。
81
+
82
+ - 类型: `string`
83
+ - 默认值: `undefined`
84
+
85
+ ```js modern.config.ts
86
+ import { defineConfig } from '@modern-js/module-tools';
87
+
88
+ export default defineConfig({
89
+ buildConfig: {
90
+ asset: {
91
+ publicPath: 'https://xxx/',
92
+ },
93
+ },
94
+ });
95
+ ```
96
+
97
+ 此时,所有静态资源都会添加 `https://xxx/` 前缀。
98
+
99
+ ### svgr
100
+
101
+ 打包时将 svg 作为一个 React 组件处理,options 参考 [svgr](https://react-svgr.com/docs/options/),另外还支持了 `include` 和 `exclude` 两个配置项,用于匹配需要处理的 svg 文件。
102
+
103
+ - 类型: `boolean | Object`
104
+ - 默认值: `false`
105
+
106
+ #### include
107
+
108
+ 设定匹配的 svg 文件
109
+
110
+ - 类型: `string | RegExp | (string | RegExp)[]`
111
+ - 默认值: `/\.svg$/`
112
+
113
+ #### exclude
114
+
115
+ 设定不匹配的 svg 文件
116
+
117
+ - 类型: `string | RegExp | (string | RegExp)[]`
118
+ - 默认值: `undefined`
119
+
120
+ ## autoExternal
121
+
122
+ 自动外置项目的 `"dependencies"` 和 `"peerDependencies"`,不会将其打包到最终的 bundle 产物中。
123
+
124
+ - 类型: `boolean | Object`
125
+ - 默认值: `true`
126
+
127
+ ### dependencies
128
+
129
+ 是否需要外置项目的 `"dependencies"` 依赖。
130
+
131
+ - 类型: `boolean`
132
+ - 默认值: `true`
133
+
134
+ ### peerDependencies
135
+
136
+ 是否需要外置项目的 `"peerDependencies"` 依赖。
137
+
138
+ - 类型: `boolean`
139
+ - 默认值: `true`
140
+
141
+ ## buildType
142
+
143
+ 构建类型,`bundle` 会打包你的代码,`bundleless` 只做代码的转换。
144
+
145
+ - 类型: `'bundle' | 'bundleless'`
146
+ - 默认值: `bundle`
147
+
148
+ ## copy
149
+
150
+ 将文件或目录拷贝到指定位置。
151
+
152
+ - 类型: `Object`
153
+
154
+ ```js modern.config.ts
155
+ import { defineConfig } from '@modern-js/module-tools';
156
+
157
+ export default defineConfig({
158
+ buildConfig: {
159
+ copy: {
160
+ patterns: [{ from: './src/assets', to: '' }],
161
+ },
162
+ },
163
+ });
164
+ ```
165
+
166
+ ### `copy.patterns`
167
+
168
+ - 类型: `CopyPattern[]`
169
+ - 默认值: `[]`
170
+
171
+ ```ts
172
+ export interface CopyPattern {
173
+ from: string;
174
+ to?: string;
175
+ context?: string;
176
+ globOptions?: globby.GlobbyOptions;
177
+ }
178
+ ```
179
+
180
+ ### copy.options
181
+
182
+ - 类型: `Object`
183
+ - 默认值: `{ concurrency: 100, enableCopySync: false }`
184
+
185
+ ```ts
186
+ type Options = {
187
+ concurrency?: number;
188
+ enableCopySync?: boolean;
189
+ };
190
+ ```
191
+
192
+ - `concurrency`: 指定并行执行多少个复制任务。
193
+ - `enableCopySync`: 使用 [`fs.copySync`](https://github.com/jprichardson/node-fs-extra/blob/master/lib/copy/copy-sync.js),默认情况下 [`fs.copy`](https://github.com/jprichardson/node-fs-extra/blob/master/lib/copy/copy.js)。
194
+
195
+ ## define
196
+
197
+ 定义全局变量,会被注入到代码中
198
+
199
+ - 类型: `Record<string, string>`
200
+ - 默认值: `{}`
201
+
202
+ 由于 `define` 功能是由全局文本替换实现的,所以需要保证全局变量值为字符串,更为安全的做法是将每个全局变量的值转化为字符串,使用 `JSON.stringify` 进行转换,如下所示:
203
+
204
+ ```js modern.config.ts
205
+ import { defineConfig } from '@modern-js/module-tools';
206
+
207
+ export default defineConfig({
208
+ buildConfig: {
209
+ define: {
210
+ VERSION: JSON.stringify('1.0'),
211
+ },
212
+ },
213
+ });
214
+ ```
215
+
216
+ :::tip
217
+ 为了防止全局替换替换过度,建议使用时遵循以下两个原则:
218
+
219
+ - 全局常量使用大写
220
+ - 自定义全局常量前缀后缀,确保独一无二
221
+ :::
222
+
223
+ ## dts
224
+
225
+ 类型文件生成的相关配置,默认会生成。
226
+
227
+ - 类型: `false | Object`
228
+ - 默认值: `{}`
229
+
230
+ ### tsconfigPath
231
+
232
+ TypeScript 配置文件的路径。
233
+
234
+ - 类型: `string`
235
+ - 默认值: `./tsconfig.json`
236
+
237
+ ### distPath
238
+
239
+ 类型文件的输出路径,基于 [outDir](/zh/api/build-config/#outDir) 进行输出。
240
+
241
+ - 类型: `string`
242
+ - 默认值: `./types`
243
+
244
+ ### only
245
+
246
+ 只生成类型文件,不生成 js 文件。
247
+
248
+ - 类型: `boolean`
249
+ - 默认值: `false`
250
+
251
+ ## externals
252
+
253
+ 配置外部依赖,不会被打包到最终的 bundle 中。
254
+
255
+ - 类型: `(string | RegExp)[]`
256
+ - 默认值: `[]`
257
+
258
+ ## format
259
+
260
+ js 产物输出的格式,其中 `iife` 和 `umd` 只能在 `buildType` 为 `bundle` 时生效。
261
+
262
+ - 类型: `'esm' | 'cjs' | 'iife' | 'umd'`
263
+ - 默认值: `cjs`
264
+
265
+ ## input
266
+
267
+ 指定构建的入口文件,数组形式可以指定目录。
268
+
269
+ - 类型: `string[] | Record<string, string>`
270
+ - 默认值: `bundle` 模式下默认为 `['src/index.ts']`,`bundleless` 模式下默认为 `['src']`
271
+
272
+ ```js modern.config.ts
273
+ import { defineConfig } from '@modern-js/module-tools';
274
+
275
+ export default defineConfig({
276
+ buildConfig: {
277
+ input: ['src/index.ts', 'src/index2.ts'],
278
+ },
279
+ });
280
+ ```
281
+
282
+ ## jsx
283
+
284
+ 指定 jsx 的编译方式, 默认支持 React17 以上,自动注入 jsx 运行时代码。
285
+
286
+ - 类型: `automatic | classic`
287
+ - 默认值: `automatic`
288
+
289
+ ## minify
290
+
291
+ 使用 esbuild 或者 terser 压缩代码,也可以传入 [terserOptions](https://github.com/terser/terser#minify-options)。
292
+
293
+ - 类型: `'terser' | 'esbuild' | false | Object`
294
+ - 默认值: `false`
295
+
296
+ ```js modern.config.ts
297
+ import { defineConfig } from '@modern-js/module-tools';
298
+
299
+ export default defineConfig({
300
+ buildConfig: {
301
+ minify: {
302
+ compress: {
303
+ drop_console: true,
304
+ },
305
+ },
306
+ },
307
+ });
308
+ ```
309
+
310
+ ## outDir
311
+
312
+ 指定构建的输出目录
313
+
314
+ - 类型: `string`
315
+ - 默认值: `dist`
316
+
317
+ ## platform
318
+
319
+ 默认生成用于 Node.js 环境下的代码,你也可以指定为 `browser`,会生成用于浏览器环境的代码。
320
+
321
+ - 类型: `'browser' | 'node'`
322
+ - 默认值: `node`
323
+
324
+ ## sourceDir
325
+
326
+ 指定构建的源码目录,默认为 `src`,用于在 `bundleless` 构建时基于源码目录结构生成对应的产物目录。
327
+
328
+ - 类型: `string`
329
+ - 默认值: `src`
330
+
331
+ ## sourceMap
332
+
333
+ 控制 sourceMap 如何生成。
334
+
335
+ - 类型: `boolean | 'inline' | 'external'`
336
+ - 默认值: `false`
337
+
338
+ ## splitting
339
+
340
+ 是否开启代码分割。
341
+
342
+ - 类型: `boolean`
343
+ - 默认值: `false`
344
+
345
+ ## style
346
+
347
+ 配置样式相关的配置。
348
+
349
+ ### less
350
+
351
+ less 相关配置。
352
+
353
+ #### lessOptions
354
+
355
+ 详细配置参考 [less](https://less.bootcss.com/usage/#less-options)。
356
+
357
+ - 类型: `Object`
358
+ - 默认值: `{ javascriptEnabled: true }`
359
+
360
+ #### additionalData
361
+
362
+ 在入口文件起始添加 `Less` 代码。
363
+
364
+ - 类型: `string`
365
+ - 默认值: `undefined`
366
+
367
+ ```js modern.config.ts
368
+ import { defineConfig } from '@modern-js/module-tools';
369
+
370
+ export default defineConfig({
371
+ buildConfig: {
372
+ style: {
373
+ less: {
374
+ additionalData: `@base-color: #c6538c;`,
375
+ },
376
+ },
377
+ },
378
+ });
379
+ ```
380
+
381
+ #### implementation
382
+
383
+ 配置 `Less` 使用的实现库,在不指定的情况下,使用的内置版本是 `4.1.3`。
384
+
385
+ - 类型: `string | Object`
386
+ - 默认值: `undefined`
387
+
388
+ `Object` 类型时,指定 `Less` 的实现库
389
+
390
+ ```js modern.config.ts
391
+ import { defineConfig } from '@modern-js/module-tools';
392
+
393
+ export default defineConfig({
394
+ buildConfig: {
395
+ style: {
396
+ less: {
397
+ implementation: require('less'),
398
+ },
399
+ },
400
+ },
401
+ });
402
+ ```
403
+
404
+ `string` 类型时,指定 `Less` 的实现库的路径
405
+
406
+ ```js modern.config.ts
407
+ import { defineConfig } from '@modern-js/module-tools';
408
+
409
+ export default defineConfig({
410
+ buildConfig: {
411
+ style: {
412
+ less: {
413
+ implementation: require.resolve('less'),
414
+ },
415
+ },
416
+ },
417
+ });
418
+ ```
419
+
420
+ ### sass
421
+
422
+ Sass 相关配置。
423
+
424
+ #### sassOptions
425
+
426
+ 详细配置参考 [node-sass](https://github.com/sass/node-sass#options)
427
+
428
+ - 类型: `Object`
429
+ - 默认值: `{}`
430
+
431
+ #### additionalData
432
+
433
+ 在入口文件起始添加 `Sass` 代码。
434
+
435
+ - 类型: `string | Function`
436
+ - 默认值: `undefined`
437
+
438
+ ```js modern.config.ts
439
+ import { defineConfig } from '@modern-js/module-tools';
440
+
441
+ export default defineConfig({
442
+ buildConfig: {
443
+ style: {
444
+ sass: {
445
+ additionalData: `$base-color: #c6538c;
446
+ $border-dark: rgba($base-color, 0.88);`,
447
+ },
448
+ },
449
+ },
450
+ });
451
+ ```
452
+
453
+ #### implementation
454
+
455
+ 配置 `Sass` 使用的实现库,在不指定的情况下,使用的内置版本是 `1.5.4`。
456
+
457
+ - 类型: `string | Object`
458
+ - 默认值: `undefined`
459
+
460
+ `Object` 类型时,指定 `Sass` 的实现库
461
+
462
+ ```js modern.config.ts
463
+ import { defineConfig } from '@modern-js/module-tools';
464
+
465
+ export default defineConfig({
466
+ buildConfig: {
467
+ style: {
468
+ sass: {
469
+ implementation: require('sass'),
470
+ },
471
+ },
472
+ },
473
+ });
474
+ ```
475
+
476
+ `string` 类型时,指定 `Sass` 的实现库的路径
477
+
478
+ ```js modern.config.ts
479
+ import { defineConfig } from '@modern-js/module-tools';
480
+
481
+ export default defineConfig({
482
+ buildConfig: {
483
+ style: {
484
+ sass: {
485
+ implementation: require.resolve('sass'),
486
+ },
487
+ },
488
+ },
489
+ });
490
+ ```
491
+
492
+ ### postcss
493
+
494
+ - plugins
495
+ - processOptions
496
+
497
+ 详细配置查看 [postcss](https://github.com/postcss/postcss#options)。
498
+
499
+ ### inject
500
+
501
+ 配置打包模式下是否将 style 插入到 js 中
502
+
503
+ - 类型: `boolean`
504
+ - 默认值: `false`
505
+
506
+ ### autoModules
507
+
508
+ 根据文件名自动启用 CSS Modules。
509
+
510
+ - 类型: `boolean | RegExp`
511
+ - 默认值: `true `
512
+
513
+ `true` : 为以 `.module.css` `.module.less` `.module.scss` `.module.sass` 文件名结尾的样式文件启用 CSS Modules。
514
+
515
+ `false` : 禁用 CSS Modules.
516
+
517
+ `RegExp` : 为匹配正则条件的所有文件启用 CSS Modules.
518
+
519
+ ### modules
520
+
521
+ CSS Modules 配置
522
+
523
+ - 类型: `Object`
524
+ - 默认值: `{}`
525
+
526
+ 一个常用的配置是 `localsConvention`,它可以改变 CSS Modules 的类名生成规则。
527
+
528
+ ```js modern.config.ts
529
+ import { defineConfig } from '@modern-js/module-tools';
530
+
531
+ export default defineConfig({
532
+ buildConfig: {
533
+ style: {
534
+ modules: {
535
+ localsConvention: 'camelCaseOnly',
536
+ },
537
+ },
538
+ },
539
+ });
540
+ ```
541
+
542
+ 对于以下样式:
543
+
544
+ ```css
545
+ .box-title {
546
+ color: red;
547
+ }
548
+ ```
549
+
550
+ 你可以使用 `styles.boxTitle` 来访问
551
+
552
+ 详细配置查看 [postcss-modules](https://github.com/madyankin/postcss-modules#usage)
553
+
554
+ ### tailwindcss
555
+
556
+ Tailwind CSS 相关配置。
557
+
558
+ - 类型: `Object | Function`
559
+ - 默认值: `见下方配置详情`
560
+
561
+ <details>
562
+ <summary>Tailwind CSS 配置详情</summary>
563
+
564
+ ```js modern.config.ts
565
+ const tailwind = {
566
+ content: [
567
+ './config/html/**/*.html',
568
+ './config/html/**/*.ejs',
569
+ './config/html/**/*.hbs',
570
+ './src/**/*.js',
571
+ './src/**/*.jsx',
572
+ './src/**/*.ts',
573
+ './src/**/*.tsx',
574
+ './storybook/**/*',
575
+ ],
576
+ };
577
+ ```
578
+
579
+ 值为 `Object` 类型时,与默认配置通过 `Object.assign` 合并。
580
+
581
+ 值为 `Function` 类型时,函数返回的对象与默认配置通过 `Object.assign` 合并。
582
+
583
+ 不允许出现 `theme` 属性,否则会构建失败, 使用 [`designSystem`](/zh/api/design-system) 作为 `Tailwind CSS Theme` 配置。
584
+
585
+ 其他的使用方式和 Tailwind CSS 一致: [快速传送门](https://tailwindcss.com/docs/configuration)。
586
+
587
+ ## target
588
+
589
+ 指定构建的目标环境
590
+
591
+ - 类型: `'es5' | 'es6' | 'es2015' | 'es2016' | 'es2017' | 'es2018' | 'es2019' | 'es2020' | 'es2021' | 'es2022' | 'esnext'`
592
+ - 默认值: `'es2015'`
593
+
594
+ ## umdGlobals
595
+
596
+ 指定 UMD 产物外部导入的全局变量。
597
+
598
+ - 类型: `Record<string, string>`
599
+ - 默认值: `{}`
600
+
601
+ ```js modern.config.ts
602
+ import { defineConfig } from '@modern-js/module-tools';
603
+
604
+ export default defineConfig({
605
+ buildConfig: {
606
+ umdGlobals: {
607
+ react: 'React',
608
+ 'react-dom': 'ReactDOM',
609
+ },
610
+ },
611
+ });
612
+ ```
613
+
614
+ 此时,`react` 和 `react-dom` 会被看做是外部导入的全局变量,不会被打包进 UMD 产物中,而是通过 `global.React` 和 `global.ReactDOM` 的方式进行访问。
615
+
616
+ ## umdModuleName
617
+
618
+ 指定 UMD 产物的模块名。
619
+
620
+ - 类型: `string` | `Function`
621
+ - 默认值: `name => name`
622
+
623
+ ```js modern.config.ts
624
+ import { defineConfig } from '@modern-js/module-tools';
625
+
626
+ export default defineConfig({
627
+ buildConfig: {
628
+ format: 'umd',
629
+ umdModuleName: 'myLib',
630
+ },
631
+ });
632
+ ```
633
+
634
+ 此时 UMD 产物会去挂载到 `global.myLib` 上。
635
+ :::tip
636
+
637
+ - 需要遵守 UMD 规范,UMD 产物的模块名不能和全局变量名冲突
638
+ - 模块名不能含有 `-`,`@`,`/` 等特殊字符
639
+ :::
640
+
641
+ 同时函数形式可以接收一个参数,为当前打包文件的输出路径
642
+
643
+ ```js modern.config.ts
644
+ import { defineConfig } from '@modern-js/module-tools';
645
+
646
+ export default defineConfig({
647
+ buildConfig: {
648
+ format: 'umd',
649
+ umdModuleName: path => {
650
+ if (path.includes('index')) {
651
+ return 'myLib';
652
+ } else {
653
+ return 'myLib2';
654
+ }
655
+ },
656
+ },
657
+ });
658
+ ```