@modern-js/module-tools-docs 2.2.0 → 2.3.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 (156) hide show
  1. package/LICENSE +144 -0
  2. package/docs/en/api/plugin-api/plugin-hooks.md +2 -10
  3. package/docs/en/guide/advance/in-depth-about-dev-command.md +56 -12
  4. package/docs/en/guide/basic/before-getting-started.md +4 -14
  5. package/docs/en/guide/basic/command-preview.md +1 -1
  6. package/docs/en/guide/basic/modify-output-product.md +6 -2
  7. package/docs/en/guide/basic/use-micro-generator.md +62 -1
  8. package/docs/en/guide/basic/using-storybook.mdx +31 -9
  9. package/docs/en/guide/intro/getting-started.md +17 -8
  10. package/docs/en/index.md +14 -8
  11. package/docs/en/plugins/guide/getting-started.mdx +1 -1
  12. package/docs/zh/api/plugin-api/plugin-hooks.md +2 -10
  13. package/docs/zh/guide/advance/in-depth-about-dev-command.md +52 -13
  14. package/docs/zh/guide/basic/before-getting-started.md +4 -14
  15. package/docs/zh/guide/basic/command-preview.md +2 -2
  16. package/docs/zh/guide/basic/modify-output-product.md +5 -3
  17. package/docs/zh/guide/basic/publish-your-project.md +4 -4
  18. package/docs/zh/guide/basic/test-your-project.mdx +18 -5
  19. package/docs/zh/guide/basic/use-micro-generator.md +61 -1
  20. package/docs/zh/guide/basic/using-storybook.mdx +39 -13
  21. package/docs/zh/guide/intro/getting-started.md +17 -11
  22. package/docs/zh/index.md +16 -10
  23. package/docs/zh/plugins/guide/getting-started.mdx +1 -1
  24. package/modern.config.ts +4 -6
  25. package/package.json +4 -4
  26. package/doc_build/api/config/build-config.html +0 -332
  27. package/doc_build/api/config/build-preset.html +0 -43
  28. package/doc_build/api/config/design-system.html +0 -103
  29. package/doc_build/api/config/plugins.html +0 -7
  30. package/doc_build/api/config/testing.html +0 -21
  31. package/doc_build/api/index.html +0 -1
  32. package/doc_build/api/plugin-api/plugin-hooks.html +0 -113
  33. package/doc_build/en/api/config/build-config.html +0 -316
  34. package/doc_build/en/api/config/build-preset.html +0 -43
  35. package/doc_build/en/api/config/design-system.html +0 -117
  36. package/doc_build/en/api/config/plugins.html +0 -7
  37. package/doc_build/en/api/config/testing.html +0 -21
  38. package/doc_build/en/api/index.html +0 -1
  39. package/doc_build/en/api/plugin-api/plugin-hooks.html +0 -113
  40. package/doc_build/en/guide/advance/asset.html +0 -25
  41. package/doc_build/en/guide/advance/build-umd.html +0 -32
  42. package/doc_build/en/guide/advance/copy.html +0 -42
  43. package/doc_build/en/guide/advance/external-dependency.html +0 -31
  44. package/doc_build/en/guide/advance/in-depth-about-build.html +0 -112
  45. package/doc_build/en/guide/advance/in-depth-about-dev-command.html +0 -12
  46. package/doc_build/en/guide/advance/theme-config.html +0 -29
  47. package/doc_build/en/guide/basic/before-getting-started.html +0 -89
  48. package/doc_build/en/guide/basic/command-preview.html +0 -63
  49. package/doc_build/en/guide/basic/modify-output-product.html +0 -98
  50. package/doc_build/en/guide/basic/publish-your-project.html +0 -50
  51. package/doc_build/en/guide/basic/test-your-project.html +0 -31
  52. package/doc_build/en/guide/basic/use-micro-generator.html +0 -29
  53. package/doc_build/en/guide/basic/using-storybook.html +0 -66
  54. package/doc_build/en/guide/best-practices/components.html +0 -111
  55. package/doc_build/en/guide/intro/getting-started.html +0 -36
  56. package/doc_build/en/guide/intro/welcome.html +0 -13
  57. package/doc_build/en/guide/intro/why-module-engineering-solution.html +0 -9
  58. package/doc_build/en/index.html +0 -1
  59. package/doc_build/en/plugins/guide/getting-started.html +0 -15
  60. package/doc_build/en/plugins/guide/plugin-object.html +0 -14
  61. package/doc_build/en/plugins/guide/setup-function.html +0 -30
  62. package/doc_build/en/plugins/official-list/overview.html +0 -3
  63. package/doc_build/guide/advance/asset.html +0 -25
  64. package/doc_build/guide/advance/build-umd.html +0 -32
  65. package/doc_build/guide/advance/copy.html +0 -42
  66. package/doc_build/guide/advance/external-dependency.html +0 -31
  67. package/doc_build/guide/advance/in-depth-about-build.html +0 -112
  68. package/doc_build/guide/advance/in-depth-about-dev-command.html +0 -14
  69. package/doc_build/guide/advance/theme-config.html +0 -28
  70. package/doc_build/guide/basic/before-getting-started.html +0 -89
  71. package/doc_build/guide/basic/command-preview.html +0 -63
  72. package/doc_build/guide/basic/modify-output-product.html +0 -97
  73. package/doc_build/guide/basic/publish-your-project.html +0 -52
  74. package/doc_build/guide/basic/test-your-project.html +0 -32
  75. package/doc_build/guide/basic/use-micro-generator.html +0 -27
  76. package/doc_build/guide/basic/using-storybook.html +0 -67
  77. package/doc_build/guide/best-practices/components.html +0 -111
  78. package/doc_build/guide/intro/getting-started.html +0 -39
  79. package/doc_build/guide/intro/welcome.html +0 -13
  80. package/doc_build/guide/intro/why-module-engineering-solution.html +0 -9
  81. package/doc_build/index.html +0 -1
  82. package/doc_build/plugins/guide/getting-started.html +0 -15
  83. package/doc_build/plugins/guide/plugin-object.html +0 -14
  84. package/doc_build/plugins/guide/setup-function.html +0 -30
  85. package/doc_build/plugins/official-list/overview.html +0 -3
  86. package/doc_build/static/css/main.edaad072.css +0 -1
  87. package/doc_build/static/js/1607.70af642a.js +0 -2
  88. package/doc_build/static/js/1607.70af642a.js.LICENSE.txt +0 -23
  89. package/doc_build/static/js/async/3799.e31e8293.js +0 -1
  90. package/doc_build/static/js/async/8652.6fbf1cb7.js +0 -1
  91. package/doc_build/static/js/async/en_api_config_build-config.367a5701.js +0 -1
  92. package/doc_build/static/js/async/en_api_config_build-preset.0d78b268.js +0 -1
  93. package/doc_build/static/js/async/en_api_config_design-system.b28d6723.js +0 -1
  94. package/doc_build/static/js/async/en_api_config_plugins.fc95fb77.js +0 -1
  95. package/doc_build/static/js/async/en_api_config_testing.8bc7f316.js +0 -1
  96. package/doc_build/static/js/async/en_api_index.669f0a56.js +0 -1
  97. package/doc_build/static/js/async/en_api_plugin-api_plugin-hooks.60d0260c.js +0 -1
  98. package/doc_build/static/js/async/en_guide_advance_asset.5ff1d623.js +0 -1
  99. package/doc_build/static/js/async/en_guide_advance_build-umd.c254ed46.js +0 -1
  100. package/doc_build/static/js/async/en_guide_advance_copy.45c0a51d.js +0 -1
  101. package/doc_build/static/js/async/en_guide_advance_external-dependency.a52d3247.js +0 -1
  102. package/doc_build/static/js/async/en_guide_advance_in-depth-about-build.51bf3569.js +0 -1
  103. package/doc_build/static/js/async/en_guide_advance_in-depth-about-dev-command.aec0b4e1.js +0 -1
  104. package/doc_build/static/js/async/en_guide_advance_theme-config.db0ad9fc.js +0 -1
  105. package/doc_build/static/js/async/en_guide_basic_before-getting-started.a22fc49a.js +0 -1
  106. package/doc_build/static/js/async/en_guide_basic_command-preview.1707ed29.js +0 -1
  107. package/doc_build/static/js/async/en_guide_basic_modify-output-product.ad453d13.js +0 -1
  108. package/doc_build/static/js/async/en_guide_basic_publish-your-project.08c5112f.js +0 -1
  109. package/doc_build/static/js/async/en_guide_basic_test-your-project.f5f6b204.js +0 -1
  110. package/doc_build/static/js/async/en_guide_basic_use-micro-generator.56325139.js +0 -1
  111. package/doc_build/static/js/async/en_guide_basic_using-storybook.9d721554.js +0 -1
  112. package/doc_build/static/js/async/en_guide_best-practices_components.45155af9.js +0 -1
  113. package/doc_build/static/js/async/en_guide_intro_getting-started.f8682be3.js +0 -1
  114. package/doc_build/static/js/async/en_guide_intro_welcome.9cc45924.js +0 -1
  115. package/doc_build/static/js/async/en_guide_intro_why-module-engineering-solution.7f2dae5c.js +0 -1
  116. package/doc_build/static/js/async/en_index.7bd869c4.js +0 -1
  117. package/doc_build/static/js/async/en_plugins_guide_getting-started.b850249c.js +0 -1
  118. package/doc_build/static/js/async/en_plugins_guide_plugin-object.bf6c6221.js +0 -1
  119. package/doc_build/static/js/async/en_plugins_guide_setup-function.80a2bd97.js +0 -1
  120. package/doc_build/static/js/async/en_plugins_official-list_overview.84e5cea0.js +0 -1
  121. package/doc_build/static/js/async/zh_api_config_build-config.048fd5ec.js +0 -1
  122. package/doc_build/static/js/async/zh_api_config_build-preset.7c13584d.js +0 -1
  123. package/doc_build/static/js/async/zh_api_config_design-system.1eecd474.js +0 -1
  124. package/doc_build/static/js/async/zh_api_config_plugins.c22dc4be.js +0 -1
  125. package/doc_build/static/js/async/zh_api_config_testing.a9888eed.js +0 -1
  126. package/doc_build/static/js/async/zh_api_index.22957707.js +0 -1
  127. package/doc_build/static/js/async/zh_api_plugin-api_plugin-hooks.a4d81bf6.js +0 -1
  128. package/doc_build/static/js/async/zh_guide_advance_asset.5b936003.js +0 -1
  129. package/doc_build/static/js/async/zh_guide_advance_build-umd.b6d541ff.js +0 -1
  130. package/doc_build/static/js/async/zh_guide_advance_copy.21a1aea4.js +0 -1
  131. package/doc_build/static/js/async/zh_guide_advance_external-dependency.c7cf5d4b.js +0 -1
  132. package/doc_build/static/js/async/zh_guide_advance_in-depth-about-build.64e795f3.js +0 -1
  133. package/doc_build/static/js/async/zh_guide_advance_in-depth-about-dev-command.168ce7dd.js +0 -1
  134. package/doc_build/static/js/async/zh_guide_advance_theme-config.b9570109.js +0 -1
  135. package/doc_build/static/js/async/zh_guide_basic_before-getting-started.6b06b54a.js +0 -1
  136. package/doc_build/static/js/async/zh_guide_basic_command-preview.1199124a.js +0 -1
  137. package/doc_build/static/js/async/zh_guide_basic_modify-output-product.8ccbc8d1.js +0 -1
  138. package/doc_build/static/js/async/zh_guide_basic_publish-your-project.bf11b1c4.js +0 -1
  139. package/doc_build/static/js/async/zh_guide_basic_test-your-project.ae52c47a.js +0 -1
  140. package/doc_build/static/js/async/zh_guide_basic_use-micro-generator.a091d57d.js +0 -1
  141. package/doc_build/static/js/async/zh_guide_basic_using-storybook.27829e44.js +0 -1
  142. package/doc_build/static/js/async/zh_guide_best-practices_components.7454d916.js +0 -1
  143. package/doc_build/static/js/async/zh_guide_intro_getting-started.a4c00d9a.js +0 -1
  144. package/doc_build/static/js/async/zh_guide_intro_welcome.71c3fe16.js +0 -1
  145. package/doc_build/static/js/async/zh_guide_intro_why-module-engineering-solution.6f8b5ff6.js +0 -1
  146. package/doc_build/static/js/async/zh_index.c19f9dcf.js +0 -1
  147. package/doc_build/static/js/async/zh_plugins_guide_getting-started.099dfaea.js +0 -1
  148. package/doc_build/static/js/async/zh_plugins_guide_plugin-object.963289d5.js +0 -1
  149. package/doc_build/static/js/async/zh_plugins_guide_setup-function.67d07b91.js +0 -1
  150. package/doc_build/static/js/async/zh_plugins_official-list_overview.a7635714.js +0 -1
  151. package/doc_build/static/js/lib-lodash.c5845536.js +0 -1
  152. package/doc_build/static/js/lib-polyfill.b3038509.js +0 -1
  153. package/doc_build/static/js/lib-react.d41ace5e.js +0 -2
  154. package/doc_build/static/js/lib-react.d41ace5e.js.LICENSE.txt +0 -29
  155. package/doc_build/static/js/main.2d3257a4.js +0 -1
  156. package/doc_build/static/search_index.json +0 -1
@@ -330,8 +330,6 @@ export interface DevToolData {
330
330
  name: string;
331
331
  value: string;
332
332
  };
333
- // 在 dev 命令执行之前,是否关闭源码构建
334
- disableRunBuild?: boolean;
335
333
  action: (
336
334
  options: { port?: string },
337
335
  context: { isTsProject?: boolean },
@@ -339,11 +337,11 @@ export interface DevToolData {
339
337
  }
340
338
  ```
341
339
 
342
- :::tip{title='关于 disableRunBuild 配置'}
340
+ <!-- :::tip{title='关于 disableRunBuild 配置'}
343
341
  在调试项目的时候,如果仅需要对代码功能进行调试的话,也许可以设置 `disableRunBuild: true` 来关闭对于源码执行(监听模式下的)构建任务。
344
342
 
345
343
  目前支持的 Storybook 调试支持将源码产物作为调试对象,因此在 Storybook 插件中 `disableRunBuild: false`。
346
- :::
344
+ ::: -->
347
345
 
348
346
  ### `beforeDev`
349
347
 
@@ -373,8 +371,6 @@ export interface DevToolData {
373
371
  name: string;
374
372
  value: string;
375
373
  };
376
- // 在 dev 命令执行之前,是否关闭源码构建
377
- disableRunBuild?: boolean;
378
374
  action: (
379
375
  options: { port?: string },
380
376
  context: { isTsProject?: boolean },
@@ -436,8 +432,6 @@ export interface DevToolData {
436
432
  name: string;
437
433
  value: string;
438
434
  };
439
- // 在 dev 命令执行之前,是否关闭源码构建
440
- disableRunBuild?: boolean;
441
435
  action: (
442
436
  options: { port?: string },
443
437
  context: { isTsProject?: boolean },
@@ -473,8 +467,6 @@ export interface DevToolData {
473
467
  name: string;
474
468
  value: string;
475
469
  };
476
- // 在 dev 命令执行之前,是否关闭源码构建
477
- disableRunBuild?: boolean;
478
470
  action: (
479
471
  options: { port?: string },
480
472
  context: { isTsProject?: boolean },
@@ -4,27 +4,66 @@ sidebar_position: 2
4
4
 
5
5
  # 深入理解 dev 命令
6
6
 
7
- 在【基础使用】的部分,我们已经知道可以通过 `buildConfig` 配置对项目的输出产物进行修改。`buildConfig` 不仅描述了产物的一些特性,同时还为构建产物提供了一些功能。
7
+ 模块工程提供的 `dev` 命令主要用于代码的调试。
8
8
 
9
- :::tip{title=注意}
10
- 如果你还不清楚 `buildConfig` 是什么,建议花一些时间通过下面的链接了解一下:
9
+ ## 命令运行的整体流程
11
10
 
12
- - 【[修改输出产物](/guide/basic/modify-output-product)】
11
+ 1. 当执行 `dev` 命令的时候,Module Tools 开始寻找是否存在可以执行的调试工具或者任务。调试工具或者任务就是类似 Storybook 这样的 Module Tools 调试工具插件。
12
+ 2. 当发现存在一个调试工具的时候,则会立即执行它。
13
+ 3. 当发现多个调试工具的时候,则显示调试工具列表菜单。可以通过选择某个调试工具对应的名称选项启动它。
14
+ 4. 当没有发现调试工具的时候,则告诉用户没有可用的调试工具。
13
15
 
14
- :::
16
+ 我们除了可以执行 `dev` 命令以外,也可以通过 `dev [调试工具名称]` 的方式来直接启动调试工具或者任务。
15
17
 
16
- 而在本章里我们将要深入理解某些构建配置的使用以及了解执行 `modern build` 命令的时候发生了什么。
18
+ ## 扩展 dev 命令
17
19
 
18
- ## 深入理解 `buildConfig`
20
+ 如果需要扩展 dev 命令或者说提供自己的 Module Tools 调试工具插件,那么你需要先了解以下内容:
19
21
 
20
- ### Bundle 和 Bundleless
22
+ * [开发插件](plugins/guide/getting-started)
23
+ * [调试工具插件 API](/api/plugin-api/plugin-hooks#调试钩子)
21
24
 
22
- 那么首先我们来理解一下 Bundle 和 Bundleless。
25
+ 一般来说,实现一个什么都不做的调试工具,其实现代码以及相关配置如下:
23
26
 
24
- 所谓 Bundle 是指对构建产物进行打包,构建产物可能是一个文件,也有可能是基于一定的[代码拆分策略](https://esbuild.github.io/api/#splitting)得到的多个文件。
27
+ ``` ts do-nothing.ts
28
+ export default (): CliPlugin<ModuleTools> => ({
29
+ name: 'do-nothing',
30
+ setup() {
31
+ return {
32
+ registerDev() {
33
+ return {
34
+ // 调试工具名称
35
+ name: 'do-nothing',
36
+ // 菜单显示内容
37
+ menuItem: {
38
+ name: 'DoNothing',
39
+ value: 'do-nothing',
40
+ },
41
+ // 定义的 dev 子命令
42
+ subCommands: ['donothing', 'dn'],
43
+ async action() {
44
+ // dev logic
45
+ console.info('Run build --watch, and do nothing.');
46
+ },
47
+ };
48
+ },
49
+ };
50
+ },
51
+ });
52
+ ```
25
53
 
26
- 而 Bundleless 则是指对每个源文件进行编译构建,但是并不将它们打包在一起。每一个产物文件都可以找到与之相对应的源码文件。
54
+ 如果需要使用该调试工具插件,则需要在配置文件中增加它:
27
55
 
28
- ### input 与 sourceDir 的关系
56
+ ``` ts
57
+ import doNothingPlugin from './plugins/do-nothing';
29
58
 
30
- ## 构建过程
59
+ export default defineConfig({
60
+ plugins: [
61
+ //..
62
+ doNothingPlugin()
63
+ ],
64
+ });
65
+ ```
66
+
67
+ 此时我们执行 `dev` 或者 `dev do-nothing` 命令的时候,就可以执行它了。在执行后,它会先执行监听模式的源码构建任务,并紧接着打印日志信息。
68
+
69
+ 对于目前官方支持的调试工具和第三方支持的调试工具,可以在[插件列表](plugins/official-list/overview)中查看。
@@ -176,8 +176,10 @@ export default defineConfig({
176
176
  });
177
177
  ```
178
178
 
179
- ```js
180
- // modern.config.js
179
+ **我们推荐使用 `defineConfig` 函数**,不过并不强制使用它。因此你也可以在配置文件中直接返回一个对象:
180
+
181
+ ```ts
182
+ // modern.config.ts
181
183
  import moduleTools from '@modern-js/module-tools';
182
184
 
183
185
  export default {
@@ -185,15 +187,3 @@ export default {
185
187
  buildPreset: 'npm-library',
186
188
  };
187
189
  ```
188
-
189
- **我们推荐使用 `defineConfig` 函数**,不过并不强制使用它。因此你也可以在配置文件中直接返回一个对象:
190
-
191
- ```typescript
192
- // modern.config.ts
193
- export default {};
194
- ```
195
-
196
- ```js
197
- // modern.config.js
198
- export default {};
199
- ```
@@ -33,7 +33,7 @@ Options:
33
33
  除了以上,模块工程还支持 `platform` 构建模式,可以用于执行其他工具的构建任务。例如,目前官方支持在安装了 `@modern-js/plugin-storybook` 插件后,可以通过执行 `modern build --platform` 或者 `modern build --platform storybook` 命令启动 Storybook 构建任务生成 Storybook 产物。
34
34
 
35
35
  :::tip{title=注意}
36
- 在执行 Storybook 构建的时候,它需要读取项目的构建产物。因此**在执行 `modern build --platform` 命令启动 Storybook 构建的时候,要先执行一次 `modern build` 确保源码构建产物的存在**。
36
+ 在执行 Storybook 构建的时候,如果需要读取项目的构建产物。那么**在执行 `modern build --platform` 命令启动 Storybook 构建之前,不要忘记先执行 `modern build` 命令确保项目构建产物的存在**。
37
37
  :::
38
38
 
39
39
  ## `modern new`
@@ -90,7 +90,7 @@ Options:
90
90
  ```
91
91
 
92
92
  需要先执行 `modern new` 开启测试功能,然后才可以执行 `modern test` 命令。
93
- `modern test` 命令会自动将 `src/tests/*.test.(js|ts|jsx|tsx)` 文件当做测试用例运行。
93
+ `modern test` 命令会自动将 `tests/*.test.(js|ts|jsx|tsx)` 文件当做测试用例运行。
94
94
 
95
95
  ## `modern lint`
96
96
 
@@ -58,9 +58,10 @@ export default defineConfig({
58
58
  例如,如果使用预设函数的形式达到预设字符串 `"npm-library-es5"` 同样的效果,可以按照如下的方式:
59
59
 
60
60
  ```typescript
61
- import { defineConfig } from '@modern-js/module-tools';
61
+ import moduleTools, { defineConfig } from '@modern-js/module-tools';
62
62
 
63
63
  export default defineConfig({
64
+ plugins: [moduleTools()],
64
65
  buildPreset({ preset }) {
65
66
  return preset.NPM_LIBRARY.map(config => {
66
67
  return { ...config, target: 'es5' };
@@ -69,9 +70,10 @@ export default defineConfig({
69
70
  });
70
71
  ```
71
72
 
72
- 在上面的代码实现中,`preset.NPM_LIBRARY` 与预设字符串 `"npm-library"` 是相对应的,它代表着 `"npm-library"` 等价的多组构建相关的配置。我们通过 `map` 方法遍历了 `NPM_LIBRARY` 这个数组,在这个数组中包含了多个 `buildConfig` 对象。我们将原本的 `buildConfig` 对象进行了浅拷贝并修改了浅拷贝后得到 `buildConfig.target`,将它指定为 `es5`。
73
+ 在上面的代码实现中,`preset.NPM_LIBRARY` 与预设字符串 `"npm-library"` 是相对应的,它代表着 `"npm-library"` 等价的多组构建相关的配置。我们通过 `map` 方法遍历了 `NPM_LIBRARY` 这个数组,在这个数组中包含了多个 `buildConfig` 对象。我们将原本的 `buildConfig` 对象进行了浅拷贝,并修改了浅拷贝后 `target` 的值,将它指定为 `es5`。
73
74
 
74
75
  > 关于 `preset.NPM_LIBRARY` 具体对应的值,可以通过 [BuildPreset API](/api/config/build-preset) 查看。在 `preset` 对象下不仅包含了 `NPM_LIBRARY`,还包含了其他类似的常量。
76
+ > 我们不仅可以使用 `preset.NPM_LIBRARY` 来获取 `"npm-library"` 对应的构建配置,也可以使用 `preset['npm-library']` 这样的方式。
75
77
 
76
78
  那么这里的 `buildConfig` 对象是什么呢?之前提到的构建产物特点又是根据什么呢?
77
79
 
@@ -112,7 +114,7 @@ export default defineConfig({
112
114
  - 指定 umd 产物外部导入的全局变量:对应的 API 是 [`buildConfig.umdGlobals`](/api/config/build-config#umdglobals)。
113
115
  - 指定 umd 产物的模块名:对应的 API 是 [`buildConfig.umdModuleName`](/api/config/build-config#umdmodulename)。
114
116
 
115
- 除了以上分类以外,关于这些 API 的常见问题和最佳实践可以通过下面的链接来了解
117
+ 除了以上分类以外,关于这些 API 的常见问题和最佳实践可以通过下面的链接来了解:
116
118
 
117
119
  - [什么是 `bundle` 和 `bundleless`?](/guide/advance/in-depth-about-build#bundle-和-bundleless)
118
120
  - [`input` 与 `sourceDir` 的关系](/guide/advance/in-depth-about-build#input-与-sourcedir-的关系)。
@@ -6,8 +6,8 @@ sidebar_position: 7
6
6
 
7
7
  一个 npm 类型的模块项目发布流程包含了两个阶段:
8
8
 
9
- - 第一阶段是在开发期间,开发者需要提供一个变更文件来记录需要发布的变动;
10
- - 第二阶段是在发布期间,Module Tools 可以收集所有的变更文件来更新版本、更新发布日志,并发布新的包到 [npm Registry](https://www.npmjs.com/) 上。
9
+ - 第一阶段是在开发期间,开发者需要提供变更文件,该文件记录了在发布期间需要的变更内容;
10
+ - 第二阶段是在发布期间,Module Tools 会收集所有的变更文件来更新版本、更新发布日志,并发布新的包到 [npm Registry](https://www.npmjs.com/) 上。
11
11
 
12
12
  ## 跟踪变更
13
13
 
@@ -18,7 +18,7 @@ sidebar_position: 7
18
18
  - 配置文件修改
19
19
  - ...
20
20
 
21
- 当这些变化一旦完成后,需要通过以下命令来对当前的变化进行记录:
21
+ 当这些任务一旦开发完成后,需要通过以下命令来对当前的变化进行记录:
22
22
 
23
23
  - [`modern change`](/guide/basic/command-preview#modern-change)
24
24
 
@@ -71,7 +71,7 @@ publish test
71
71
 
72
72
  发布项目可以执行以下命令:
73
73
 
74
- - [`modern publish`](/guide/basic/command-preview#modern-release)
74
+ - [`modern release`](/guide/basic/command-preview#modern-release)
75
75
 
76
76
  `modern release` 命令可以将项目发布到 npm Registry。
77
77
 
@@ -8,7 +8,21 @@ sidebar_position: 6
8
8
 
9
9
  ## 先决条件和约定
10
10
 
11
- 想要使用项目的测试功能,需要确保项目中包含依赖:`"@modern-js/plugin-testing"` ,可以通过[modern new](/guide/basic/command-preview#modern-new)来完成。
11
+ 想要使用项目的测试功能,需要确保项目中包含依赖:`"@modern-js/plugin-testing"`,以及按照类似下面的内容进行配置:
12
+
13
+ ``` ts
14
+ import moduleTools, { defineConfig } from '@modern-js/module-tools';
15
+ import testPlugin from '@modern-js/plugin-testing';
16
+
17
+ export default defineConfig({
18
+ plugins: [
19
+ moduleTools(),
20
+ testPlugin(),
21
+ ],
22
+ });
23
+ ```
24
+
25
+ 可以通过执行 [`modern new`](/guide/basic/command-preview#modern-new) 命令来开启测试功能。
12
26
 
13
27
  在模块工程方案中,对于测试用例或者说编写测试的文件有如下约定:
14
28
 
@@ -18,7 +32,7 @@ sidebar_position: 6
18
32
 
19
33
  ## 运行测试
20
34
 
21
- 当准备好了依赖以及了解了测试用例在哪里编写后,我们可以通过以下命令来执行测试:
35
+ 当准备好了依赖、增加了相关配置以及了解了测试用例在哪里编写后,我们可以通过以下命令来执行测试:
22
36
 
23
37
  ```bash
24
38
  modern test
@@ -33,7 +47,6 @@ modern test --updateSnapshot
33
47
 
34
48
  ## 使用配置
35
49
 
36
- /obj/eden-cn/uhbfnupenuhf/test-result.png
37
50
  模块工程方案对测试提供了以下配置:
38
51
 
39
52
  - [`testing`](/api/config/testing)
@@ -68,7 +81,7 @@ export default function () {
68
81
 
69
82
  然后在测试文件中,我们可以这样。
70
83
 
71
- 其中 `@` 指向了源码目录,在初始化项目的 `tests/tsconfig.json` 中定义了。
84
+ 其中 `@` 指向了源码目录,在初始化项目的 `tests/tsconfig.json` 的 `paths` 中定义了。
72
85
 
73
86
  ```typescript ./tests/index.test.ts
74
87
  import main from '@/index';
@@ -132,7 +145,7 @@ export const default () {
132
145
 
133
146
  然后在测试文件中,我们可以这样。
134
147
 
135
- 其中 `@` 指向了源码目录,在初始化项目的 `tests/tsconfig.json` 中定义了。
148
+ 其中 `@` 指向了源码目录,在初始化项目的 `tests/tsconfig.json` 的 `paths` 中定义了。
136
149
 
137
150
  ```tsx ./tests/index.test.tsx
138
151
  import { render, screen } from '@modern-js/runtime/testing';
@@ -16,12 +16,42 @@ sidebar_position: 4
16
16
 
17
17
  ## Test 测试
18
18
 
19
- 当我们想要对一些模块进行测试的时候,可以启用 test 测试功能。启动该功能后,**会在项目目录下创建 `tests` 目录以及相关文件,在 package.json 中新增 `"@modern-js/plugin-testing"` 依赖**。
19
+ 当我们想要对一些模块进行测试的时候,可以启用测试功能。启动该功能后,**会在项目目录下创建 `tests` 目录以及相关文件,在 package.json 中新增 `"@modern-js/plugin-testing"` 依赖**。
20
+
21
+ :::tip
22
+ 在成功开启后,会提示需要手动在配置中增加如下类似的代码。
23
+ ``` ts
24
+ import moduleTools, { defineConfig } from '@modern-js/module-tools';
25
+ import testPlugin from '@modern-js/plugin-testing';
26
+
27
+ export default defineConfig({
28
+ plugins: [
29
+ moduleTools(),
30
+ testPlugin(),
31
+ ],
32
+ });
33
+ ```
34
+ :::
20
35
 
21
36
  ## Storybook 调试
22
37
 
23
38
  当我们想要对组件或者普通模块进行调试的时候,可以启用 Storybook 调试功能。启动该功能后,**会在项目目录下创建 `stories` 目录以及相关文件,在 package.json 中新增 `"@modern-js/plugin-storybook"` 依赖**。
24
39
 
40
+ :::tip
41
+ 在成功开启后,会提示需要手动在配置中增加如下类似的代码。
42
+ ``` ts
43
+ import moduleTools, { defineConfig } from '@modern-js/module-tools';
44
+ import storybookPlugin from '@modern-js/plugin-storybook';
45
+
46
+ export default defineConfig({
47
+ plugins: [
48
+ moduleTools(),
49
+ storybookPlugin(),
50
+ ],
51
+ });
52
+ ```
53
+ :::
54
+
25
55
  关于如何启动 Storybook 以及如何使用 Storybook,可以查看下面的链接:
26
56
 
27
57
  - [`modern dev`](/guide/basic/command-preview#modern-dev)
@@ -35,8 +65,38 @@ sidebar_position: 4
35
65
 
36
66
  - [使用 Tailwind CSS](https://modernjs.dev/docs/apis/module/config/tools/tailwindcss)
37
67
 
68
+ :::tip
69
+ 在成功开启后,会提示需要手动在配置中增加如下类似的代码。
70
+ ``` ts
71
+ import moduleTools, { defineConfig } from '@modern-js/module-tools';
72
+ import tailwindPlugin from '@modern-js/plugin-tailwindcss';
73
+
74
+ export default defineConfig({
75
+ plugins: [
76
+ moduleTools(),
77
+ tailwindPlugin(),
78
+ ],
79
+ });
80
+ ```
81
+ :::
82
+
38
83
  ## 启动 Modern.js Runtime API
39
84
 
40
85
  **Modern.js 提供了 [Runtime API](https://modernjs.dev/docs/apis/module/runtime/) 能力,这些 API 只能在 Modern.js 的应用项目环境中使用**。如果你需要开发一个 Modern.js 应用环境中使用的组件,那么你可以开启该特性,微生成器会增加 `"@modern-js/runtime"`依赖。
41
86
 
42
87
  另外,Storybook 调试工具也会通过检测项目的依赖确定项目是否需要使用 Runtime API,并且提供与 Modern.js 应用项目一样的 Runtime API 运行环境。
88
+
89
+ :::tip
90
+ 在成功开启后,会提示需要手动在配置中增加如下类似的代码。
91
+ ``` ts
92
+ import moduleTools, { defineConfig } from '@modern-js/module-tools';
93
+ import runtime from '@modern-js/runtime/cli';
94
+
95
+ export default defineConfig({
96
+ plugins: [
97
+ moduleTools(),
98
+ runtime(),
99
+ ],
100
+ });
101
+ ```
102
+ :::
@@ -19,16 +19,16 @@ sidebar_position: 5
19
19
 
20
20
  因此它是一个复杂且功能强大的工具。
21
21
 
22
- 模块工程解决方案集成了 Storybook ,因此你几乎可以按照 Storybook 官方文档的内容进行使用。不过依然有一些地方需要注意,接下来讲解一下:
22
+ 模块工程解决方案集成了 Storybook,因此你几乎可以按照 Storybook 官方文档的内容进行使用。不过依然有一些地方需要注意,接下来讲解一下。
23
23
 
24
24
  ## 调试代码
25
25
 
26
- 在调试代码过程中需要引入组件代码,目前可以通过两种方式引入组件代码:
26
+ 在调试代码过程中需要引入项目代码,目前可以通过两种方式引入项目代码:
27
27
 
28
- - 引用组件产物
29
- - 引用组件源码
28
+ - 引用项目产物
29
+ - 引用项目源码
30
30
 
31
- 我们更推荐使用第一种“**引用组件产物**”的方式。因为它几乎接近真实的使用场景,不仅可以对组件功能进行调试,同时也对构建产物的正确性进行了验证。
31
+ 我们推荐使用第一种“**引用项目产物**”的方式。因为它更接近真实的使用场景,不仅可以对组件功能进行调试,同时也对构建产物的正确性进行了验证。不过我们也可以在测试项目功能的时候引用源码,在验证项目产物的时候引用项目的包名。
32
32
 
33
33
  接下来我们分别讲一下这两种方式具体如何使用。
34
34
 
@@ -49,7 +49,7 @@ sidebar_position: 5
49
49
  ---
50
50
 
51
51
  确保 `package.json` 的 `main` 和 `types`
52
- 的值为真实的路径。
52
+ 的值为正确的产物路径。
53
53
 
54
54
  ```json package.json
55
55
  {
@@ -70,7 +70,7 @@ export const content = 'hello world';
70
70
  ---
71
71
 
72
72
  确保在 `stories/tsconfig.json` 中设置了指向项目根目录的 `paths` 配置。
73
- `paths` 的 `key` 与项目名称相同。
73
+ `paths` 的 `key` 与项目名称相同,这样在编译过程中以及在代码中不会出现问题。
74
74
 
75
75
  ```json stories/tsconfig.json focus=5:7
76
76
  {
@@ -78,7 +78,8 @@ export const content = 'hello world';
78
78
  "compilerOptions": {
79
79
  "baseUrl": "../",
80
80
  "paths": {
81
- "foo": ["."]
81
+ "foo": ["."],
82
+ "foo/*": ["./*"]
82
83
  }
83
84
  },
84
85
  "include": [
@@ -89,7 +90,7 @@ export const content = 'hello world';
89
90
 
90
91
  ---
91
92
 
92
- 最后在 Story 代码中直接以项目名称的方式引用。
93
+ Story 代码中直接以项目名称的方式引用。
93
94
 
94
95
  ```tsx stories/index.stories.tsx focus=1:1
95
96
  import { content } from 'foo';
@@ -103,9 +104,30 @@ export default {
103
104
  };
104
105
  ```
105
106
 
107
+ ---
108
+
109
+ 最后在执行命令的时候,先启动监听模式的源码构建,然后启动 Storybook 调试。
110
+
111
+ <CH.Code>
112
+
113
+ ``` bash terminal-1
114
+ ## 源码构建
115
+ modern build --watch
116
+ ```
117
+
118
+ ---
119
+
120
+ ``` bash terminal-2
121
+ ## Storybook 调试
122
+ modern dev storybook
123
+ ```
124
+
125
+ </CH.Code>
126
+
106
127
  </CH.Spotlight>
107
128
 
108
- 如果在开发过程中,遇到无法实时获得类型定义的情况,此时:
129
+ :::info
130
+ 在开发过程中,可能会遇到无法实时获得类型定义的情况。因为只有当保存代码后,产物目录下的类型文件才会更新。此时:
109
131
 
110
132
  对于 `pnpm` 的项目,可以按照下面的内容对 `package.json` 进行修改:
111
133
 
@@ -123,11 +145,12 @@ export default {
123
145
  > 关于 pnpm 的 `publishConfig` 的使用,可以阅读下面这个[链接](https://pnpm.io/package_json#publishconfig)。
124
146
 
125
147
  而对于 npm 和 Yarn 的项目,则只能通过手动的方式在**开发阶段**和**发布阶段**对 `package.json` 的 `types` 的值进行修改。
148
+ :::
126
149
 
127
150
  那么为什么可以直接引用产物呢?
128
151
 
129
- 1. 在执行 `modern dev storybook` 命令之前,会自动执行 `modern build` 命令,保证项目构建产物的存在。
130
- 2. 在 Storybook 内部增加了以项目名称作为别名的处理,保证能够**根据 `package.json` 解析出项目的产物路径**。
152
+ 1. 在执行 `modern dev storybook` 命令之前,执行 `modern build --watch` 命令,保证项目构建产物的存在。
153
+ 2. 在 Storybook 内部增加了根据 `tsconfig.json` 文件的 `compilerOptions.paths` 配置或者(在 JS 项目中)直接以项目名称作为别名的处理逻辑,保证能够**根据 `package.json` 解析出项目的产物路径**。
131
154
 
132
155
  ### 引用组件源码
133
156
 
@@ -145,11 +168,14 @@ export default {
145
168
  };
146
169
  ```
147
170
 
148
- 那么为什么不推荐使用源码的方式呢?
149
171
 
172
+ :::tip{title='为什么不推荐使用源码的方式?'}
150
173
  不仅仅是因为使用组件源码无法验证组件产物是否正确,**同时模块工程对于构建产物支持的一些配置无法完全转换为 Storybook
151
174
  内部的配置**。如果某些配置无法进行相互转换的话,就会在 Storybook 调试过程中出现不符合预期的结果。
152
175
 
176
+ Module Tools 是基于 Esbuild 实现的,而 Storybook 是基于 Webpack 实现的。Esbuild 的配置无法与 Webpack 完全兼容。
177
+ :::
178
+
153
179
  ## 配置 Storybook
154
180
 
155
181
  Storybook 官方通过一个名为 `.storybook` 的文件夹来进行项目配置,其中包含各种配置文件。**在模块工程方案中,可以在项目的 `config/storybook` 目录下增加 Storybook 配置文件。**
@@ -6,22 +6,30 @@ sidebar_position: 3
6
6
 
7
7
  ## 三分钟快速上手
8
8
 
9
- 想要实际体验 Module Tools?首先需要安装 [Node.js LTS](https://github.com/nodejs/Release),并确保 Node 版本大于等于 **14.18.0**。
9
+ 想要实际体验 Module Tools?首先需要安装 [Node.js LTS](https://github.com/nodejs/Release),并确保 Node 版本大于等于 **14.18.0**。我们推荐使用 Node.js 16 的 LTS 版本。
10
10
 
11
11
  然后在你的项目里安装以下依赖:
12
12
 
13
- - `@modern-js/module-tools`
14
- - `@modern-js/plugin-testing`
15
-
16
- > 如果是一个 TypeScript 项目,则需要增加 `"typescript"` 依赖。
13
+ - `"@modern-js/module-tools"`
14
+ - `"typescript"`(如果不是 TypeScript 项目,则省略)
17
15
 
18
16
  ```bash
19
- npm install -D @modern-js/module-tools @modern-js/plugin-testing
17
+ npm install -D @modern-js/module-tools typescript
20
18
  ```
21
19
 
22
20
  > 对于使用 pnpm 或者 Yarn 包管理器的项目,只需要替换 npm 就可以了。**推荐使用 pnpm**。
23
21
 
24
- 接着在项目的 `package.json` 文件里增加命令 `"build": "modern build"`:
22
+ 接着在项目的根目录下创建 `modern.config.(t|j)s` 文件:
23
+
24
+ ``` ts
25
+ import moduleTools, { defineConfig } from '@modern-js/module-tools';
26
+
27
+ export default defineConfig({
28
+ plugins: [moduleTools()],
29
+ })
30
+ ```
31
+
32
+ 最后在项目的 `package.json` 文件里增加命令 `"build": "modern build"`:
25
33
 
26
34
  ```json
27
35
  {
@@ -33,11 +41,11 @@ npm install -D @modern-js/module-tools @modern-js/plugin-testing
33
41
 
34
42
  如果你的项目存在 `src/index.(js|jsx)` 文件或者同时存在 `src/index.(ts|tsx)` 和 `tsconfig.json` 文件,那么恭喜你可以运行直接运行 `npm run build` 来使用 Module Tools 构建你的项目了。
35
43
 
36
- **如果你想要看看使用了模块工程方案的真实项目,可以执行以下命令**:
44
+ **如果你想要看看使用了模块工程方案的完整项目,可以执行以下命令**:
37
45
 
38
46
  ```bash
39
47
  git clone https://github.com/modern-js-dev/module-tools-examples
40
- cd module-tools-example
48
+ cd module-tools-example/base
41
49
 
42
50
  ## 执行构建:
43
51
  pnpm build
@@ -52,8 +60,6 @@ pnpm dev storybook
52
60
  pnpm test
53
61
  ```
54
62
 
55
- > 上面的链接对应的内容待补充
56
-
57
63
  **如果你想要创建一个完整的模块工程项目,可以执行以下命令:**
58
64
 
59
65
  ```bash
package/docs/zh/index.md CHANGED
@@ -4,27 +4,33 @@ pageType: home
4
4
  hero:
5
5
  name: Module Tools
6
6
  text: 模块工程解决方案
7
- tagline: 简单、强大、高性能的现代化npm包开发方案
7
+ tagline: 简单、强大、高性能的现代化 npm 包开发方案
8
8
  actions:
9
9
  - theme: brand
10
10
  text: 欢迎使用
11
11
  link: /guide/intro/welcome
12
+ - theme: alt
13
+ text: 快速上手
14
+ link: /guide/intro/getting-started
12
15
 
13
16
  features:
14
- - title: 'Esbuild: 高性能的JS Bundler'
17
+ - title: 'Esbuild: 高性能的 JS Bundler'
15
18
  details: 基于 Esbuild 构建,构建速度极快,带给你极致的开发体验。
16
19
  icon: 🚀
17
- - title: 'Storybook: 社区流行的UI开发工具'
18
- details: 集成了Storybook,你可以使用它调试UI。
19
- icon: 📦
20
- - title: 'transform + bundle'
21
- details: 支持bundle和bundleless两种构建模式。
20
+ - title: '双构建模式'
21
+ details: 支持 Bundle 和 Bundleless 两种构建模式。
22
22
  icon: ✨
23
- - title: '零配置'
24
- details: 无需任何配置即可开发你的npm包,内置预设覆盖多种场景。
23
+ - title: '开箱即用'
24
+ details: 无需过多配置即可开发你的 npm 包,内置预设覆盖多种场景。
25
25
  icon: 🛠️
26
26
  - title: '扩展性强: 提供强大的插件机制'
27
- details: 通过其插件扩展机制,你可以轻松的扩展Module tools的各项能力。
27
+ details: 通过其插件扩展机制,你可以轻松的扩展 Module tools 的各项能力。
28
28
  icon: 🎨
29
+ - title: 'Storybook: 社区流行的 UI 开发工具'
30
+ details: 集成了 Storybook,你可以使用它调试 UI。
31
+ icon: 📦
32
+ - title: 'Jest: 令人愉快的测试框架'
33
+ details: 集成了 Jest,使得代码测试更加容易。
34
+ icon: 📐
29
35
  ---
30
36
  # index
@@ -44,7 +44,7 @@ export const ExamplePlugin = (): CliPlugin<ModuleTools> => {
44
44
  console.info('build over');
45
45
  }
46
46
  };
47
- };
47
+ },
48
48
  };
49
49
  };
50
50
  ```
package/modern.config.ts CHANGED
@@ -6,8 +6,6 @@ import { pluginAutoSidebar } from '@modern-js/doc-plugin-auto-sidebar';
6
6
  const theme = require('shiki/themes/nord.json');
7
7
  const { version } = require('./package.json');
8
8
 
9
- const isDevCommand = process.env.NODE_ENV !== 'production';
10
-
11
9
  function getI18nHelper(lang: 'zh' | 'en') {
12
10
  const cn = lang === 'zh';
13
11
  const prefix = cn ? '' : '/en';
@@ -116,10 +114,10 @@ export default defineConfig({
116
114
  },
117
115
  ],
118
116
  },
119
- },
120
- builderConfig: {
121
- dev: {
122
- startUrl: 'http://localhost:<port>/module-tools/',
117
+ builderConfig: {
118
+ dev: {
119
+ startUrl: 'http://localhost:<port>/module-tools/',
120
+ },
123
121
  },
124
122
  },
125
123
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modern-js/module-tools-docs",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "docs",
5
5
  "main": "index.js",
6
6
  "keywords": [],
@@ -11,11 +11,11 @@
11
11
  "react": "^18.2.0",
12
12
  "react-dom": "^18.2.0",
13
13
  "shiki": "^0.11.1",
14
- "@modern-js/doc-plugin-auto-sidebar": "2.2.0",
15
- "@modern-js/doc-tools": "2.2.0"
14
+ "@modern-js/doc-tools": "2.3.0",
15
+ "@modern-js/doc-plugin-auto-sidebar": "2.3.0"
16
16
  },
17
17
  "scripts": {
18
18
  "dev": "modern dev",
19
- "build": "modern build"
19
+ "build:doc": "modern build"
20
20
  }
21
21
  }