@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.
- package/.eslintrc.js +13 -0
- package/docs/en/api/config/_category_.json +4 -0
- package/docs/en/api/{build-config.md → config/build-config.md} +198 -105
- package/docs/en/api/{build-preset.md → config/build-preset.md} +65 -46
- package/docs/{zh/api → en/api/config}/design-system.md +130 -127
- package/docs/en/api/config/plugins.md +18 -0
- package/docs/en/api/{test.md → config/testing.md} +21 -12
- package/docs/en/api/index.md +3 -1
- package/docs/en/api/plugin-api/_category_.json +4 -0
- package/docs/en/api/plugin-api/plugin-hooks.md +501 -0
- package/docs/en/guide/advance/_category_.json +4 -0
- package/docs/en/guide/advance/asset.mdx +47 -30
- package/docs/en/guide/advance/build-umd.mdx +88 -80
- package/docs/en/guide/advance/copy.md +31 -28
- package/docs/en/guide/advance/external-dependency.mdx +27 -23
- package/docs/en/guide/advance/in-depth-about-build.md +56 -50
- package/docs/en/guide/advance/in-depth-about-dev-command.md +7 -4
- package/docs/en/guide/advance/theme-config.mdx +80 -0
- package/docs/en/guide/basic/_category_.json +4 -0
- package/docs/en/guide/basic/before-getting-started.md +28 -23
- package/docs/en/guide/basic/command-preview.md +18 -14
- package/docs/en/guide/basic/modify-output-product.md +27 -20
- package/docs/en/guide/basic/publish-your-project.md +21 -19
- package/docs/en/guide/basic/test-your-project.mdx +19 -16
- package/docs/en/guide/basic/use-micro-generator.md +10 -7
- package/docs/en/guide/basic/using-storybook.mdx +27 -26
- package/docs/en/guide/best-practices/_category_.json +4 -0
- package/docs/en/guide/best-practices/components.mdx +783 -0
- package/docs/en/guide/intro/_category_.json +4 -0
- package/docs/en/guide/intro/getting-started.md +9 -4
- package/docs/en/guide/intro/welcome.md +4 -0
- package/docs/en/guide/intro/why-module-engineering-solution.md +5 -1
- package/docs/en/index.md +3 -5
- package/docs/en/plugins/guide/_category_.json +4 -0
- package/docs/en/plugins/guide/getting-started.mdx +84 -0
- package/docs/en/plugins/guide/plugin-object.mdx +85 -0
- package/docs/en/plugins/guide/setup-function.mdx +117 -0
- package/docs/en/plugins/official-list/_category_.json +4 -0
- package/docs/en/plugins/official-list/overview.md +6 -0
- package/docs/zh/api/config/_category_.json +4 -0
- package/docs/zh/api/config/build-config.md +658 -0
- package/docs/zh/api/{build-preset.md → config/build-preset.md} +49 -36
- package/docs/zh/api/config/design-system.md +1166 -0
- package/docs/zh/api/config/plugins.md +18 -0
- package/docs/zh/api/{testing.md → config/testing.md} +18 -13
- package/docs/zh/api/index.md +4 -1
- package/docs/zh/api/plugin-api/_category_.json +4 -0
- package/docs/zh/api/plugin-api/plugin-hooks.md +500 -0
- package/docs/zh/guide/advance/_category_.json +4 -0
- package/docs/zh/guide/advance/asset.mdx +47 -30
- package/docs/zh/guide/advance/build-umd.mdx +88 -71
- package/docs/zh/guide/advance/copy.md +31 -28
- package/docs/zh/guide/advance/external-dependency.mdx +27 -23
- package/docs/zh/guide/advance/in-depth-about-build.md +55 -50
- package/docs/zh/guide/advance/in-depth-about-dev-command.md +7 -4
- package/docs/zh/guide/advance/theme-config.mdx +78 -0
- package/docs/zh/guide/basic/_category_.json +4 -0
- package/docs/zh/guide/basic/before-getting-started.md +27 -22
- package/docs/zh/guide/basic/command-preview.md +17 -13
- package/docs/zh/guide/basic/modify-output-product.md +28 -21
- package/docs/zh/guide/basic/publish-your-project.md +22 -17
- package/docs/zh/guide/basic/test-your-project.mdx +20 -16
- package/docs/zh/guide/basic/use-micro-generator.md +10 -7
- package/docs/zh/guide/basic/using-storybook.mdx +27 -24
- package/docs/zh/guide/best-practices/_category_.json +4 -0
- package/docs/zh/guide/best-practices/components.mdx +793 -0
- package/docs/zh/guide/intro/_category_.json +4 -0
- package/docs/zh/guide/intro/getting-started.md +10 -4
- package/docs/zh/guide/intro/welcome.md +4 -0
- package/docs/zh/guide/intro/why-module-engineering-solution.md +5 -1
- package/docs/zh/index.md +3 -2
- package/docs/zh/plugins/guide/_category_.json +4 -0
- package/docs/zh/plugins/guide/getting-started.mdx +84 -0
- package/docs/zh/plugins/guide/plugin-object.mdx +85 -0
- package/docs/zh/plugins/guide/setup-function.mdx +117 -0
- package/docs/zh/plugins/official-list/_category_.json +4 -0
- package/docs/zh/plugins/official-list/overview.md +5 -0
- package/modern.config.ts +118 -0
- package/package.json +8 -6
- package/{docs/.island/styles → theme}/index.css +0 -1
- package/theme/index.ts +4 -0
- package/tsconfig.json +7 -0
- package/docs/.island/config.ts +0 -245
- package/docs/.island/dist/404.html +0 -41
- package/docs/.island/dist/assets/before-getting-started.1b82b538.js +0 -87
- package/docs/.island/dist/assets/before-getting-started.582a31cc.js +0 -87
- package/docs/.island/dist/assets/build-config.72eb0918.js +0 -804
- package/docs/.island/dist/assets/build-config.d8bb1658.js +0 -809
- package/docs/.island/dist/assets/build-preset.96805d7d.js +0 -256
- package/docs/.island/dist/assets/build-preset.c20dcd40.js +0 -256
- package/docs/.island/dist/assets/build-your-ui.7f349247.js +0 -2
- package/docs/.island/dist/assets/build-your-ui.a8361604.js +0 -2
- package/docs/.island/dist/assets/command-preview.2d45fc82.js +0 -264
- package/docs/.island/dist/assets/command-preview.dc51b953.js +0 -264
- package/docs/.island/dist/assets/components.esm.03560353.js +0 -9
- package/docs/.island/dist/assets/design-system.86694ff5.js +0 -1254
- package/docs/.island/dist/assets/design-system.c4745cce.js +0 -639
- package/docs/.island/dist/assets/dev.1d326a37.js +0 -37
- package/docs/.island/dist/assets/dev.1fd06000.js +0 -37
- package/docs/.island/dist/assets/down.f35427d3.svg +0 -1
- package/docs/.island/dist/assets/extension.12299fd6.js +0 -2
- package/docs/.island/dist/assets/extension.96dc63a4.js +0 -2
- package/docs/.island/dist/assets/getting-started.40e9218d.js +0 -117
- package/docs/.island/dist/assets/getting-started.b1ed3f10.js +0 -114
- package/docs/.island/dist/assets/github.3bf8ccee.svg +0 -1
- package/docs/.island/dist/assets/index.2b2347ea.js +0 -33
- package/docs/.island/dist/assets/index.6cef6f5f.js +0 -4
- package/docs/.island/dist/assets/index.cb118238.js +0 -36
- package/docs/.island/dist/assets/index.ccb6ce27.js +0 -4
- package/docs/.island/dist/assets/island_inject.11a12ecc.js +0 -1
- package/docs/.island/dist/assets/island_inject.b13deaee.js +0 -1
- package/docs/.island/dist/assets/loading.8c9bb911.svg +0 -1
- package/docs/.island/dist/assets/modify-output-product.7f6bff35.js +0 -100
- package/docs/.island/dist/assets/modify-output-product.b91eff1f.js +0 -100
- package/docs/.island/dist/assets/moon.6b705924.svg +0 -3
- package/docs/.island/dist/assets/plugin.895932d8.js +0 -42
- package/docs/.island/dist/assets/plugin.d2fbc531.js +0 -42
- package/docs/.island/dist/assets/publish-your-project.21b8309f.js +0 -164
- package/docs/.island/dist/assets/publish-your-project.8d398b17.js +0 -166
- package/docs/.island/dist/assets/right.89674cd7.svg +0 -1
- package/docs/.island/dist/assets/search.0aea6901.svg +0 -1
- package/docs/.island/dist/assets/search.1c85d17c.js +0 -3
- package/docs/.island/dist/assets/search.484eca11.js +0 -222
- package/docs/.island/dist/assets/search.54fca8d0.js +0 -3
- package/docs/.island/dist/assets/style.09015a4b.css +0 -1
- package/docs/.island/dist/assets/style.2e5f7bc2.css +0 -1970
- package/docs/.island/dist/assets/sun.841dac10.svg +0 -11
- package/docs/.island/dist/assets/test-your-project.18bd4582.js +0 -190
- package/docs/.island/dist/assets/test-your-project.f53bebf7.js +0 -190
- package/docs/.island/dist/assets/test.0da1f99f.js +0 -67
- package/docs/.island/dist/assets/test.0e81f002.js +0 -66
- package/docs/.island/dist/assets/translator.b1077c44.svg +0 -1
- package/docs/.island/dist/assets/use-micro-generator.7d9e4016.js +0 -60
- package/docs/.island/dist/assets/use-micro-generator.db5520c1.js +0 -60
- package/docs/.island/dist/assets/using-storybook.57ea6b77.js +0 -260
- package/docs/.island/dist/assets/using-storybook.a2212f2e.js +0 -260
- package/docs/.island/dist/assets/welcome.0449a9c8.js +0 -13
- package/docs/.island/dist/assets/welcome.a8448931.js +0 -13
- package/docs/.island/dist/assets/why-module-engineering-solution.6ae8c0e3.js +0 -26
- package/docs/.island/dist/assets/why-module-engineering-solution.c9a45cbd.js +0 -26
- package/docs/.island/dist/chunk-COLCRJ2V.js +0 -1
- package/docs/.island/dist/chunk-K5FMOYDC.js +0 -10
- package/docs/.island/dist/chunk-WE42KMYS.js +0 -26
- package/docs/.island/dist/client-entry.js +0 -3
- package/docs/.island/dist/en/api/build-config.html +0 -344
- package/docs/.island/dist/en/api/build-preset.html +0 -82
- package/docs/.island/dist/en/api/design-system.html +0 -155
- package/docs/.island/dist/en/api/dev.html +0 -45
- package/docs/.island/dist/en/api/index.html +0 -41
- package/docs/.island/dist/en/api/plugin.html +0 -48
- package/docs/.island/dist/en/api/test.html +0 -58
- package/docs/.island/dist/en/guide/before-getting-started.html +0 -127
- package/docs/.island/dist/en/guide/build-your-ui.html +0 -41
- package/docs/.island/dist/en/guide/command-preview.html +0 -100
- package/docs/.island/dist/en/guide/extension.html +0 -41
- package/docs/.island/dist/en/guide/getting-started.html +0 -76
- package/docs/.island/dist/en/guide/modify-output-product.html +0 -140
- package/docs/.island/dist/en/guide/publish-your-project.html +0 -91
- package/docs/.island/dist/en/guide/test-your-project.html +0 -72
- package/docs/.island/dist/en/guide/use-micro-generator.html +0 -65
- package/docs/.island/dist/en/guide/using-storybook.html +0 -113
- package/docs/.island/dist/en/guide/welcome.html +0 -53
- package/docs/.island/dist/en/guide/why-module-engineering-solution.html +0 -49
- package/docs/.island/dist/en/index.html +0 -42
- package/docs/.island/dist/react-dom.js +0 -1
- package/docs/.island/dist/react-dom_client.js +0 -1
- package/docs/.island/dist/react.js +0 -1
- package/docs/.island/dist/react_jsx-runtime.js +0 -10
- package/docs/.island/dist/ssr-manifest.json +0 -57
- package/docs/.island/dist/test-result.png +0 -0
- package/docs/.island/dist/why-module-solution.png +0 -0
- package/docs/.island/dist/zh/api/build-config.html +0 -347
- package/docs/.island/dist/zh/api/build-preset.html +0 -82
- package/docs/.island/dist/zh/api/design-system.html +0 -149
- package/docs/.island/dist/zh/api/dev.html +0 -46
- package/docs/.island/dist/zh/api/index.html +0 -41
- package/docs/.island/dist/zh/api/plugin.html +0 -48
- package/docs/.island/dist/zh/api/test.html +0 -59
- package/docs/.island/dist/zh/guide/before-getting-started.html +0 -127
- package/docs/.island/dist/zh/guide/build-your-ui.html +0 -41
- package/docs/.island/dist/zh/guide/command-preview.html +0 -100
- package/docs/.island/dist/zh/guide/extension.html +0 -41
- package/docs/.island/dist/zh/guide/getting-started.html +0 -79
- package/docs/.island/dist/zh/guide/modify-output-product.html +0 -140
- package/docs/.island/dist/zh/guide/publish-your-project.html +0 -92
- package/docs/.island/dist/zh/guide/test-your-project.html +0 -72
- package/docs/.island/dist/zh/guide/use-micro-generator.html +0 -65
- package/docs/.island/dist/zh/guide/using-storybook.html +0 -114
- package/docs/.island/dist/zh/guide/welcome.html +0 -53
- package/docs/.island/dist/zh/guide/why-module-engineering-solution.html +0 -49
- package/docs/.island/dist/zh/index.html +0 -42
- package/docs/.island/index.html +0 -39
- package/docs/en/api/design-system.md +0 -524
- package/docs/en/api/dev.md +0 -32
- package/docs/en/api/plugin.md +0 -34
- package/docs/zh/api/build-config.md +0 -570
- package/docs/zh/api/dev.md +0 -33
- package/docs/zh/api/plugins.md +0 -108
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 4
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# 如何处理第三方依赖
|
|
2
6
|
|
|
3
7
|
一般来说,项目所需要的第三方依赖可以通过包管理器的 `install` 命令安装,在安装第三方依赖成功后,这些第三方依赖一般会出现在项目 `package.json` 的 `dependencies` 和 `devDependencies` 下。
|
|
4
8
|
|
|
5
|
-
```
|
|
9
|
+
```json pacakge.json
|
|
6
10
|
{
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
"dependencies": {},
|
|
12
|
+
"devDependencies": {}
|
|
9
13
|
}
|
|
10
14
|
```
|
|
11
15
|
|
|
@@ -21,13 +25,13 @@
|
|
|
21
25
|
|
|
22
26
|
```json ./v1/package.json
|
|
23
27
|
{
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"react": "^17"
|
|
30
|
+
},
|
|
31
|
+
// or
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"react": "^17"
|
|
34
|
+
}
|
|
31
35
|
}
|
|
32
36
|
```
|
|
33
37
|
|
|
@@ -42,7 +46,7 @@
|
|
|
42
46
|
},
|
|
43
47
|
// or
|
|
44
48
|
"peerDependencies": {
|
|
45
|
-
|
|
49
|
+
"react": "^17"
|
|
46
50
|
}
|
|
47
51
|
}
|
|
48
52
|
```
|
|
@@ -51,8 +55,8 @@
|
|
|
51
55
|
|
|
52
56
|
当源码中使用了 `react` 依赖。
|
|
53
57
|
|
|
54
|
-
```
|
|
55
|
-
import React from
|
|
58
|
+
```tsx src/index.ts
|
|
59
|
+
import React from 'react';
|
|
56
60
|
console.info(React);
|
|
57
61
|
```
|
|
58
62
|
|
|
@@ -60,8 +64,8 @@ console.info(React);
|
|
|
60
64
|
|
|
61
65
|
此时产物中不会将 `react` 代码打包到产物中。
|
|
62
66
|
|
|
63
|
-
```
|
|
64
|
-
import React from
|
|
67
|
+
```js dist/index.js
|
|
68
|
+
import React from 'react';
|
|
65
69
|
console.info(React);
|
|
66
70
|
```
|
|
67
71
|
|
|
@@ -77,45 +81,45 @@ console.info(React);
|
|
|
77
81
|
|
|
78
82
|
在构建配置中提供了以下 API 来处理第三方依赖:
|
|
79
83
|
|
|
80
|
-
|
|
81
|
-
|
|
84
|
+
- [`buildConfig.autoExternal`](/zh/api/build-config#autoexternal)
|
|
85
|
+
- [`buildConfig.externals`](/zh/api/build-config#externals)
|
|
82
86
|
|
|
83
87
|
### 关闭默认行为
|
|
84
88
|
|
|
85
89
|
当我们希望关闭对于第三方依赖的默认处理行为时候,可以通过以下方式来实现:
|
|
86
90
|
|
|
87
|
-
```
|
|
91
|
+
```ts
|
|
88
92
|
export default defineConfig({
|
|
89
93
|
buildConfig: {
|
|
90
94
|
autoExternal: false,
|
|
91
|
-
}
|
|
95
|
+
},
|
|
92
96
|
});
|
|
93
97
|
```
|
|
94
98
|
|
|
95
99
|
这样对于 `"dependencies"` 和 `"peerDependencies"` 下面的依赖都会进行打包处理。如果只想要关闭其中某个下面的依赖处理,则可以使用
|
|
96
100
|
`buildConfig.autoExternal` 的对象形式:
|
|
97
101
|
|
|
98
|
-
```
|
|
102
|
+
```ts
|
|
99
103
|
export default defineConfig({
|
|
100
104
|
buildConfig: {
|
|
101
105
|
autoExternal: {
|
|
102
106
|
dependencies: false,
|
|
103
107
|
peerDependencies: false,
|
|
104
108
|
},
|
|
105
|
-
}
|
|
109
|
+
},
|
|
106
110
|
});
|
|
107
111
|
```
|
|
108
112
|
|
|
109
113
|
### 排除指定第三方依赖
|
|
110
114
|
|
|
111
|
-
而除了 `buildConfig.autoExternal` API以外,`buildConfig.externals` 也可以控制哪些第三方依赖要进行处理。我们可以组合这两个
|
|
115
|
+
而除了 `buildConfig.autoExternal` API 以外,`buildConfig.externals` 也可以控制哪些第三方依赖要进行处理。我们可以组合这两个
|
|
112
116
|
API 对项目的依赖进行更细微的处理。
|
|
113
117
|
|
|
114
118
|
例如当我们需要仅对某些依赖不进行打包处理的时候,可以按照如下方式进行配置:
|
|
115
119
|
|
|
116
120
|
> 一般这种情况,可能是某些依赖不适合进行打包处理。如果遇到这种情况,则可以按照下面的方式进行处理。
|
|
117
121
|
|
|
118
|
-
```
|
|
122
|
+
```ts
|
|
119
123
|
epxort default defineConfig({
|
|
120
124
|
buildConfig: {
|
|
121
125
|
autoExternal: false,
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 1
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# 深入理解构建
|
|
2
6
|
|
|
3
7
|
在【基础使用】的部分,我们已经知道可以通过 `buildConfig` 配置对项目的输出产物进行修改。`buildConfig` 不仅描述了产物的一些特性,同时还为构建产物提供了一些功能。
|
|
@@ -5,8 +9,8 @@
|
|
|
5
9
|
:::tip{title=注意}
|
|
6
10
|
如果你还不清楚 `buildConfig` 是什么,建议花一些时间通过下面的链接了解一下:
|
|
7
11
|
|
|
8
|
-
|
|
9
|
-
:::
|
|
12
|
+
- 【[修改输出产物](/zh/guide/modify-output-product)】
|
|
13
|
+
:::
|
|
10
14
|
|
|
11
15
|
而在本章里我们将要深入理解某些构建配置的使用以及了解执行 `modern build` 命令的时候发生了什么。
|
|
12
16
|
|
|
@@ -26,9 +30,9 @@
|
|
|
26
30
|
|
|
27
31
|
[`buildConfig.input`](/zh/api/build-config#input) 用于指定读取源码的文件路径或者目录路径,其默认值在 Bundle 和 Bundleless 构建过程中有所不同:
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
> 实际上,在 `buildType: 'bundle'` 的时候,构建工具会检测是否存在符合 `src/index.(j|t)sx?` 这个名称规则的文件,并将其作为入口文件。
|
|
33
|
+
- 当 `buildType: 'bundle'` 的时候,`input` 默认值为 `['src/index.ts']`
|
|
34
|
+
- 当 `buildType: 'bundleless'` 的时候,`input` 默认值为 `['src']`
|
|
35
|
+
> 实际上,在 `buildType: 'bundle'` 的时候,构建工具会检测是否存在符合 `src/index.(j|t)sx?` 这个名称规则的文件,并将其作为入口文件。
|
|
32
36
|
|
|
33
37
|
:::warn{title=注意}
|
|
34
38
|
建议不要在 Bundleless 构建过程中指定多个源码文件目录,可能出现不符合预期的结果。目前多个源码目录的 Bundleless 构建还处于不稳定阶段。
|
|
@@ -40,16 +44,16 @@
|
|
|
40
44
|
|
|
41
45
|
在 Bundle 构建过程中,除了将 `input` 设置为一个数组,也可以将它设置为一个对象。**通过使用对象的形式,我们可以修改构建产物输出的文件名称**。那么对于下面的例子,`./src/index.ts` 对应的构建产物文件路径为 `./dist/main.js`。
|
|
42
46
|
|
|
43
|
-
```
|
|
47
|
+
```tsx modern.config.ts
|
|
44
48
|
import { defineConfig } from '@modern-js/module-tools';
|
|
45
49
|
|
|
46
50
|
export default defineConfig({
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
},
|
|
51
|
-
outdir: './dist',
|
|
51
|
+
buildConfig: {
|
|
52
|
+
input: {
|
|
53
|
+
main: ['./src/index.ts'],
|
|
52
54
|
},
|
|
55
|
+
outDir: './dist',
|
|
56
|
+
},
|
|
53
57
|
});
|
|
54
58
|
```
|
|
55
59
|
|
|
@@ -59,13 +63,13 @@ export default defineConfig({
|
|
|
59
63
|
|
|
60
64
|
[`sourceDir`](/zh/api/build-config#sourcedir) 用于指定源码目录,它主要与以下两个内容有关系:
|
|
61
65
|
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
- 类型文件生成
|
|
67
|
+
- 指定构建过程中的 [`outbase`](https://esbuild.github.io/api/#outbase)
|
|
64
68
|
|
|
65
69
|
一般来说:
|
|
66
70
|
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
- **在 Bundleless 构建过程中,`sourceDir` 与 `input` 的值要保持一致,它们的默认值都是 `src`**。
|
|
72
|
+
- 在 Bundle 构建过程中,很少需要使用 `sourceDir`。
|
|
69
73
|
|
|
70
74
|
### 类型文件
|
|
71
75
|
|
|
@@ -80,8 +84,8 @@ import { defineConfig } from '@modern-js/module-tools';
|
|
|
80
84
|
|
|
81
85
|
export default defineConfig({
|
|
82
86
|
buildConfig: {
|
|
83
|
-
dts: false
|
|
84
|
-
}
|
|
87
|
+
dts: false,
|
|
88
|
+
},
|
|
85
89
|
});
|
|
86
90
|
```
|
|
87
91
|
|
|
@@ -95,8 +99,8 @@ export default defineConfig({
|
|
|
95
99
|
|
|
96
100
|
**模块工程解决方案同时还支持对类型文件进行打包**,不过使用该功能的时候需要注意:
|
|
97
101
|
|
|
98
|
-
|
|
99
|
-
|
|
102
|
+
- 一些第三方依赖存在错误的语法会导致打包过程失败。因此对于这种情况,需要手动通过 [`buildConfig.externals`](/zh/api/build-config#externals) 将这类第三方包排除。
|
|
103
|
+
- 对于第三方依赖的类型文件指向的是一个 `.ts` 文件的情况,目前无法处理。比如第三方依赖的 `package.json` 中存在这样的内容: `{"types": "./src/index.ts"}`。
|
|
100
104
|
|
|
101
105
|
#### 别名转换
|
|
102
106
|
|
|
@@ -108,18 +112,18 @@ import utils from '@common/utils';
|
|
|
108
112
|
|
|
109
113
|
正常来说,使用 `tsc` 生成的产物类型文件也会包含这些别名。不过 Module Tools 会对 `tsc` 生成的类型文件里的别名进行转换处理:
|
|
110
114
|
|
|
111
|
-
|
|
112
|
-
|
|
115
|
+
- 对于类似 `import '@common/utils'` 或者 `import utils from '@common/utils'` 这样形式的代码可以进行别名转换。
|
|
116
|
+
- 对于类似 `export { utils } from '@common/utils'` 这样形式的代码可以进行别名转换。
|
|
113
117
|
|
|
114
118
|
然而也存在一些情况,目前还无法处理:
|
|
115
119
|
|
|
116
|
-
|
|
120
|
+
- 对于类似 `Promise<import('@common/utils')>` 这样形式的输出类型目前无法进行转换。
|
|
117
121
|
|
|
118
122
|
#### 一些 `dts` 的使用示例
|
|
119
123
|
|
|
120
124
|
一般使用方式:
|
|
121
125
|
|
|
122
|
-
```
|
|
126
|
+
```ts
|
|
123
127
|
import { defineConfig } from '@modern-js/module-tools';
|
|
124
128
|
|
|
125
129
|
export default defineConfig({
|
|
@@ -130,14 +134,14 @@ export default defineConfig({
|
|
|
130
134
|
tsconfigPath: './other-tsconfig.json',
|
|
131
135
|
distPath: './types',
|
|
132
136
|
},
|
|
133
|
-
|
|
134
|
-
}
|
|
137
|
+
outDir: './dist',
|
|
138
|
+
},
|
|
135
139
|
});
|
|
136
140
|
```
|
|
137
141
|
|
|
138
142
|
使用 `dts.only` 的情况:
|
|
139
143
|
|
|
140
|
-
```
|
|
144
|
+
```ts
|
|
141
145
|
import { defineConfig } from '@modern-js/module-tools';
|
|
142
146
|
|
|
143
147
|
export default defineConfig({
|
|
@@ -146,16 +150,16 @@ export default defineConfig({
|
|
|
146
150
|
{
|
|
147
151
|
buildType: 'bundle',
|
|
148
152
|
dts: false,
|
|
149
|
-
|
|
153
|
+
outDir: './dist',
|
|
150
154
|
},
|
|
151
155
|
{
|
|
152
156
|
buildType: 'bundleless',
|
|
153
157
|
dts: {
|
|
154
158
|
only: true,
|
|
155
159
|
},
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
]
|
|
160
|
+
outDir: './dist/types',
|
|
161
|
+
},
|
|
162
|
+
],
|
|
159
163
|
});
|
|
160
164
|
```
|
|
161
165
|
|
|
@@ -165,14 +169,14 @@ export default defineConfig({
|
|
|
165
169
|
|
|
166
170
|
#### 环境变量替换
|
|
167
171
|
|
|
168
|
-
```
|
|
172
|
+
```ts
|
|
169
173
|
import { defineConfig } from '@modern-js/module-tools';
|
|
170
174
|
export default defineConfig({
|
|
171
175
|
buildConfig: {
|
|
172
176
|
define: {
|
|
173
|
-
'process.env.VERSION': JSON.stringify(process.env.VERSION || '0.0.0')
|
|
174
|
-
}
|
|
175
|
-
}
|
|
177
|
+
'process.env.VERSION': JSON.stringify(process.env.VERSION || '0.0.0'),
|
|
178
|
+
},
|
|
179
|
+
},
|
|
176
180
|
});
|
|
177
181
|
```
|
|
178
182
|
|
|
@@ -192,14 +196,14 @@ console.log('1.0.0');
|
|
|
192
196
|
|
|
193
197
|
#### 全局变量替换
|
|
194
198
|
|
|
195
|
-
```
|
|
199
|
+
```ts
|
|
196
200
|
import { defineConfig } from '@modern-js/module-tools';
|
|
197
201
|
export default defineConfig({
|
|
198
202
|
buildConfig: {
|
|
199
203
|
define: {
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
}
|
|
204
|
+
VERSION: JSON.stringify(require('./package.json').version || '0.0.0'),
|
|
205
|
+
},
|
|
206
|
+
},
|
|
203
207
|
});
|
|
204
208
|
```
|
|
205
209
|
|
|
@@ -218,28 +222,29 @@ console.log('1.0.0');
|
|
|
218
222
|
```
|
|
219
223
|
|
|
220
224
|
不过要注意:如果项目是一个 TypeScript 项目,那么你可能需要在项目源代码目录下的 `.d.ts` 文件里增加以下内容:
|
|
225
|
+
|
|
221
226
|
> 如果不存在 `d.ts` 文件,则可以手动创建。
|
|
222
227
|
|
|
223
|
-
```
|
|
228
|
+
```ts env.d.ts
|
|
224
229
|
declare const YOUR_ADD_GLOBAL_VAR;
|
|
225
230
|
```
|
|
226
231
|
|
|
227
|
-
|
|
228
232
|
## 构建过程
|
|
229
233
|
|
|
230
234
|
当执行 `modern build` 命令的时候,会发生
|
|
231
235
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
+
- 根据 `buildConfig.outDir` 清理产物目录。
|
|
237
|
+
- 编译 `js/ts` 源代码生成 Bundle/Bundleless 的 JS 构建产物。
|
|
238
|
+
- 使用 `tsc` 生成 Bundle/Bundleless 的类型文件。
|
|
239
|
+
- 处理 Copy 任务。
|
|
236
240
|
|
|
237
241
|
## 构建报错
|
|
238
242
|
|
|
239
243
|
当发生构建报错的时候,基于以上了解到的信息,可以很容易的明白在终端出现的报错内容:
|
|
240
244
|
|
|
241
245
|
**js 或者 ts 构建的报错:**
|
|
242
|
-
|
|
246
|
+
|
|
247
|
+
```bash
|
|
243
248
|
error ModuleBuildError:
|
|
244
249
|
|
|
245
250
|
╭───────────────────────╮
|
|
@@ -253,7 +258,7 @@ Detailed Information:
|
|
|
253
258
|
|
|
254
259
|
**类型文件生成过程的报错:**
|
|
255
260
|
|
|
256
|
-
```
|
|
261
|
+
```bash
|
|
257
262
|
error ModuleBuildError:
|
|
258
263
|
|
|
259
264
|
bundle DTS failed:
|
|
@@ -261,7 +266,7 @@ bundle DTS failed:
|
|
|
261
266
|
|
|
262
267
|
对于 `js/ts` 构建错误,我们可以从报错信息中知道:
|
|
263
268
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
269
|
+
- 通过 `'bundle failed:'` 来判断报错的是 Bundle 构建还是 Bundleless 构建?
|
|
270
|
+
- 构建过程的 `format` 是什么?
|
|
271
|
+
- 构建过程的 `target` 是什么?
|
|
272
|
+
- 具体的报错信息。
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 2
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 深入理解 dev 命令
|
|
2
6
|
|
|
3
7
|
在【基础使用】的部分,我们已经知道可以通过 `buildConfig` 配置对项目的输出产物进行修改。`buildConfig` 不仅描述了产物的一些特性,同时还为构建产物提供了一些功能。
|
|
4
8
|
|
|
5
9
|
:::tip{title=注意}
|
|
6
10
|
如果你还不清楚 `buildConfig` 是什么,建议花一些时间通过下面的链接了解一下:
|
|
7
11
|
|
|
8
|
-
|
|
9
|
-
:::
|
|
12
|
+
- 【[修改输出产物](/zh/guide/modify-output-product)】
|
|
13
|
+
:::
|
|
10
14
|
|
|
11
15
|
而在本章里我们将要深入理解某些构建配置的使用以及了解执行 `modern build` 命令的时候发生了什么。
|
|
12
16
|
|
|
@@ -23,4 +27,3 @@
|
|
|
23
27
|
### input 与 sourceDir 的关系
|
|
24
28
|
|
|
25
29
|
## 构建过程
|
|
26
|
-
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 6
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# 主题配置
|
|
6
|
+
|
|
7
|
+
模块工程通过 [`designSystem`](/zh/api/design-system) API,提供了配置主题的能力。
|
|
8
|
+
|
|
9
|
+
## 动机和原理
|
|
10
|
+
|
|
11
|
+
主题配置有些类似组件库中的定制主题功能,主要用于样式开发中使用。我们可以通过 `designSystem` 配置在不同的样式开发环境下使用由它生成的 `designToken`。
|
|
12
|
+
|
|
13
|
+
所谓 `designToken` 在不同的样式开发环境下对应不同的东西:
|
|
14
|
+
|
|
15
|
+
- tailwindcss: 以 `designSystem` 作为 tailwindcss 的 `theme` 配置。因此可以使用:
|
|
16
|
+
- tailwindcss 支持的 HTML 类名。
|
|
17
|
+
- 在 css/less/sass 下通过 `@apply` 自定义指令使用与 tailwindcss 支持的 HTML 类名同名的字符串。
|
|
18
|
+
- css/less/scss: 通过 `designSystem` 生成全局的样式变量。
|
|
19
|
+
|
|
20
|
+
`designSystem` API 的数据结构借鉴了 `tailwindcss` 配置对象中的 [theme API](https://tailwindcss.com/docs/theme),因此存在默认的一套 `designToken`。关于默认值,可以查看 [`designSystem` API](/zh/api/design-system)。
|
|
21
|
+
|
|
22
|
+
:::info
|
|
23
|
+
目前暂时还未支持 css/less/sass 全局变量。
|
|
24
|
+
:::
|
|
25
|
+
|
|
26
|
+
## 使用示例
|
|
27
|
+
|
|
28
|
+
### tailwindcss
|
|
29
|
+
|
|
30
|
+
在使用 tailwindcss 的时候,可以通过 `designSystem` 来设置它的 [`theme`](https://v2.tailwindcss.com/docs/theme#extending-the-default-theme) 配置。
|
|
31
|
+
|
|
32
|
+
例如在下面的配置中扩展了原有的颜色配置:
|
|
33
|
+
|
|
34
|
+
```ts ./modern.config.ts
|
|
35
|
+
export default {
|
|
36
|
+
designSystem: {
|
|
37
|
+
extend: {
|
|
38
|
+
colors: {
|
|
39
|
+
primary: '#1677ff',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
我们可以在代码中有两种使用 tailwindcss 的方式。
|
|
47
|
+
|
|
48
|
+
#### HTML 类名。
|
|
49
|
+
|
|
50
|
+
```tsx ./src/index.tsx
|
|
51
|
+
import 'tailwindcss/utilities.css';
|
|
52
|
+
|
|
53
|
+
export default () => {
|
|
54
|
+
return <div className="bg-primary"></div>;
|
|
55
|
+
};
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
#### `@apply` 指令
|
|
59
|
+
|
|
60
|
+
关于 [`@apply`](https://tailwindcss.com/docs/functions-and-directives#apply)。
|
|
61
|
+
|
|
62
|
+
<CH.Code>
|
|
63
|
+
|
|
64
|
+
```tsx ./src/index.tsx
|
|
65
|
+
import './index.css';
|
|
66
|
+
|
|
67
|
+
export default () => {
|
|
68
|
+
return <div className="btn-primary"></div>;
|
|
69
|
+
};
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
```css ./src/index.css
|
|
73
|
+
.btn-primary {
|
|
74
|
+
@apply bg-primary;
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
</CH.Code>
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 1
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# 开始之前
|
|
2
6
|
|
|
3
7
|
## 环境准备
|
|
4
8
|
|
|
5
9
|
为了使用 Modern.js 模块工程解决方案,首先需要 [NodeJS](https://nodejs.org/zh/),我们推荐最新的[长期维护版本](https://github.com/nodejs/Release),并确保 Node 版本大于等于 **14.17.6**。因为非稳定的 NodeJS 时常有一些 Bug,你可以使用 [nvm-windows](https://github.com/coreybutler/nvm-windows) 和 [nvm](https://github.com/nvm-sh/nvm)(Mac/linux)安装,这样你就可以方便地切换到不同的 NodeJS 版本,这些版本可能会用于不同的项目。
|
|
10
|
+
|
|
6
11
|
## 初识 npm
|
|
7
12
|
|
|
8
13
|
当 NodeJS 被安装后,你不仅可以在命令行中访问 `node` 可执行程序,同时你也可以执行 `npm` 命令。
|
|
@@ -15,7 +20,7 @@ npm 是 NodeJS 的标准软件包管理器。它一开始的用途是用于下
|
|
|
15
20
|
|
|
16
21
|
那么什么是 npm 包类型的项目呢?当我们在一个空的项目目录下执行 `npm init` 命令的时候,它会在当前目录下面创建一个文件名为 `package.json` 的 JSON 文件。在创建过程中,我们需要填写包括但不限于 npm 包的名称、版本号、描述等等内容,这些填写的内容都会在生成的 `package.json` 文件中找到:
|
|
17
22
|
|
|
18
|
-
```
|
|
23
|
+
```json
|
|
19
24
|
{
|
|
20
25
|
"name": "npm-demo",
|
|
21
26
|
"version": "1.0.0",
|
|
@@ -41,27 +46,27 @@ npm Registry 是一个 [npm 包存储的地方](https://docs.npmjs.com/about-the
|
|
|
41
46
|
|
|
42
47
|
- `"dependencies"`:一种是你的应用程序在生产环境中需要的软件包。
|
|
43
48
|
- `"devDependencies"`:另一种是仅在本地开发和测试中需要的软件包。
|
|
44
|
-
> 软件包可以理解为是第三方的 npm 包。
|
|
49
|
+
> 软件包可以理解为是第三方的 npm 包。
|
|
45
50
|
|
|
46
51
|
你可以通过执行 `npm install npm-package-name` 或者 `npm add npm-package-name` 的方式来安装在**生产环境中需要的软件包**,或者也可以在 `package.json` 文件中手动的将需要安装的包和对应的[语义化版本](https://docs.npmjs.com/about-semantic-versioning)写在 `"dependencies"` 里,并执行 `npm install` 命令:
|
|
47
52
|
|
|
48
|
-
```
|
|
53
|
+
```json
|
|
49
54
|
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
"name": "your-npm-project",
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"npm-package-name": "0.1.0"
|
|
58
|
+
}
|
|
54
59
|
}
|
|
55
60
|
```
|
|
56
61
|
|
|
57
62
|
同理,你也可以执行 `npm install npm-package-name --save-dev` 或 `npm add npm-package-name --save-dev` 的方式来安装**仅在本地开发和测试中需要的软件包**,或者也可以在 `package.json` 文件中手动的将需要安装的包和对应的[语义化版本](https://docs.npmjs.com/about-semantic-versioning)写在 `"devDependencies"` 里,并执行 `npm install` 命令:
|
|
58
63
|
|
|
59
|
-
```
|
|
64
|
+
```json
|
|
60
65
|
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
"name": "your-npm-project",
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"npm-package-name": "0.1.0"
|
|
69
|
+
}
|
|
65
70
|
}
|
|
66
71
|
```
|
|
67
72
|
|
|
@@ -92,13 +97,13 @@ npm Registry 是一个 [npm 包存储的地方](https://docs.npmjs.com/about-the
|
|
|
92
97
|
|
|
93
98
|
名称匹配的[前置命令和后置命令](https://docs.npmjs.com/cli/v9/using-npm/scripts#pre--post-scripts)也会被运行(例如 `premyscript`、`myscript`、`postmyscript`)。
|
|
94
99
|
|
|
95
|
-
```
|
|
100
|
+
```json
|
|
96
101
|
{
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
"scripts": {
|
|
103
|
+
"premyscript": "",
|
|
104
|
+
"myscript": "",
|
|
105
|
+
"postmyscript": ""
|
|
106
|
+
}
|
|
102
107
|
}
|
|
103
108
|
```
|
|
104
109
|
|
|
@@ -160,14 +165,14 @@ npm install -g pnpm
|
|
|
160
165
|
|
|
161
166
|
初始化的配置文件的内容如下:
|
|
162
167
|
|
|
163
|
-
```
|
|
168
|
+
```typescript
|
|
164
169
|
// modern.config.ts
|
|
165
170
|
import { defineConfig } from '@modern-js/module-tools';
|
|
166
171
|
|
|
167
172
|
export default defineConfig({});
|
|
168
173
|
```
|
|
169
174
|
|
|
170
|
-
```
|
|
175
|
+
```js
|
|
171
176
|
// modern.config.js
|
|
172
177
|
const { defineConfig } = require('@modern-js/module-tools');
|
|
173
178
|
|
|
@@ -176,12 +181,12 @@ module.exports = defineConfig({});
|
|
|
176
181
|
|
|
177
182
|
**我们推荐使用 `defineConfig` 函数**,不过并不强制使用它。因此你也可以在配置文件中直接返回一个对象:
|
|
178
183
|
|
|
179
|
-
```
|
|
184
|
+
```typescript
|
|
180
185
|
// modern.config.ts
|
|
181
186
|
export default {};
|
|
182
187
|
```
|
|
183
188
|
|
|
184
|
-
```
|
|
189
|
+
```js
|
|
185
190
|
// modern.config.js
|
|
186
191
|
module.exports = {};
|
|
187
192
|
```
|