@modern-js/main-doc 2.5.0 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/en/apis/app/commands.mdx +297 -0
  3. package/en/apis/app/hooks/_category_.json +1 -1
  4. package/en/apis/app/hooks/config/upload.mdx +10 -0
  5. package/en/apis/app/hooks/src/routes.mdx +2 -2
  6. package/en/components/init-app.mdx +5 -5
  7. package/en/configure/app/bff/prefix.mdx +2 -3
  8. package/en/configure/app/bff/proxy.mdx +1 -1
  9. package/en/configure/app/dev/before-start-url.mdx +13 -0
  10. package/en/configure/app/dev/host.mdx +13 -0
  11. package/en/configure/app/output/ssg.mdx +3 -3
  12. package/en/configure/app/runtime/master-app.mdx +1 -1
  13. package/en/configure/app/server/ssr.mdx +18 -0
  14. package/en/configure/app/source/entries-dir.mdx +1 -1
  15. package/en/configure/app/testing/transformer.mdx +1 -1
  16. package/en/configure/app/tools/jest.mdx +1 -1
  17. package/en/guides/advanced-features/rspack-start.mdx +69 -0
  18. package/en/guides/advanced-features/ssg.mdx +8 -8
  19. package/en/guides/advanced-features/ssr.mdx +210 -5
  20. package/en/guides/basic-features/alias.mdx +4 -4
  21. package/en/guides/{css/tailwindcss.mdx → basic-features/css.mdx} +60 -3
  22. package/en/guides/basic-features/data-fetch.mdx +4 -4
  23. package/en/guides/basic-features/env-vars.mdx +4 -0
  24. package/en/guides/basic-features/routes.mdx +23 -7
  25. package/en/guides/concept/builder.mdx +1 -1
  26. package/en/guides/get-started/quick-start.mdx +2 -2
  27. package/en/guides/topic-detail/micro-frontend/c03-main-app.mdx +1 -1
  28. package/en/tutorials/first-app/c03-css.mdx +1 -1
  29. package/en/tutorials/first-app/c07-container.mdx +17 -17
  30. package/en/tutorials/first-app/c08-entries.mdx +23 -23
  31. package/package.json +3 -3
  32. package/scripts/summary.en.json +1 -1
  33. package/scripts/summary.zh.json +1 -1
  34. package/zh/apis/app/commands.mdx +299 -0
  35. package/zh/apis/app/hooks/_category_.json +1 -1
  36. package/zh/apis/app/hooks/config/upload.mdx +12 -2
  37. package/zh/apis/app/hooks/src/routes.mdx +2 -2
  38. package/zh/components/init-app.mdx +5 -5
  39. package/zh/configure/app/bff/prefix.mdx +1 -1
  40. package/zh/configure/app/bff/proxy.mdx +1 -1
  41. package/zh/configure/app/dev/before-start-url.mdx +13 -0
  42. package/zh/configure/app/dev/host.mdx +13 -0
  43. package/zh/configure/app/output/ssg.mdx +3 -3
  44. package/zh/configure/app/server/ssr.mdx +19 -1
  45. package/zh/configure/app/source/entries-dir.mdx +1 -1
  46. package/zh/guides/advanced-features/rspack-start.mdx +69 -0
  47. package/zh/guides/advanced-features/ssg.mdx +8 -8
  48. package/zh/guides/advanced-features/ssr.mdx +213 -6
  49. package/zh/guides/basic-features/alias.mdx +4 -4
  50. package/zh/guides/{css/tailwindcss.mdx → basic-features/css.mdx} +60 -3
  51. package/zh/guides/basic-features/data-fetch.mdx +4 -4
  52. package/zh/guides/basic-features/env-vars.mdx +4 -0
  53. package/zh/guides/basic-features/routes.mdx +23 -7
  54. package/zh/guides/concept/builder.mdx +2 -2
  55. package/zh/guides/get-started/quick-start.mdx +2 -2
  56. package/zh/guides/topic-detail/micro-frontend/c03-main-app.mdx +1 -1
  57. package/zh/tutorials/first-app/c03-css.mdx +1 -1
  58. package/zh/tutorials/first-app/c07-container.mdx +17 -17
  59. package/zh/tutorials/first-app/c08-entries.mdx +23 -23
  60. package/en/apis/app/commands/_category_.json +0 -5
  61. package/en/apis/app/commands/build.mdx +0 -39
  62. package/en/apis/app/commands/dev.mdx +0 -61
  63. package/en/apis/app/commands/inspect.mdx +0 -61
  64. package/en/apis/app/commands/lint.mdx +0 -19
  65. package/en/apis/app/commands/new.mdx +0 -55
  66. package/en/apis/app/commands/serve.mdx +0 -27
  67. package/en/apis/app/commands/test.mdx +0 -35
  68. package/en/apis/app/commands/upgrade.mdx +0 -18
  69. package/en/guides/css/_category_.json +0 -5
  70. package/en/guides/css/css-in-js.mdx +0 -40
  71. package/en/guides/css/css-modules.mdx +0 -87
  72. package/en/guides/css/less-sass.mdx +0 -17
  73. package/en/guides/css/postcss.mdx +0 -79
  74. package/zh/apis/app/commands/_category_.json +0 -5
  75. package/zh/apis/app/commands/build.mdx +0 -39
  76. package/zh/apis/app/commands/dev.mdx +0 -61
  77. package/zh/apis/app/commands/inspect.mdx +0 -61
  78. package/zh/apis/app/commands/lint.mdx +0 -19
  79. package/zh/apis/app/commands/new.mdx +0 -54
  80. package/zh/apis/app/commands/serve.mdx +0 -27
  81. package/zh/apis/app/commands/test.mdx +0 -35
  82. package/zh/apis/app/commands/upgrade.mdx +0 -18
  83. package/zh/guides/css/_category_.json +0 -5
  84. package/zh/guides/css/css-in-js.mdx +0 -40
  85. package/zh/guides/css/css-modules.mdx +0 -87
  86. package/zh/guides/css/less-sass.mdx +0 -17
  87. package/zh/guides/css/postcss.mdx +0 -80
@@ -1 +1 @@
1
- [{"name":"assetPrefix","dirname":"dev"},{"name":"hmr","dirname":"dev"},{"name":"https","dirname":"dev"},{"name":"port","dirname":"dev"},{"name":"progressBar","dirname":"dev"},{"name":"startUrl","dirname":"dev"},{"name":"lazyCompilation","dirname":"experiments"},{"name":"appIcon","dirname":"html"},{"name":"crossorigin","dirname":"html"},{"name":"disableHtmlFolder","dirname":"html"},{"name":"favicon","dirname":"html"},{"name":"faviconByEntries","dirname":"html"},{"name":"inject","dirname":"html"},{"name":"injectByEntries","dirname":"html"},{"name":"meta","dirname":"html"},{"name":"metaByEntries","dirname":"html"},{"name":"mountId","dirname":"html"},{"name":"tags","dirname":"html"},{"name":"tagsByEntries","dirname":"html"},{"name":"template","dirname":"html"},{"name":"templateByEntries","dirname":"html"},{"name":"templateParameters","dirname":"html"},{"name":"templateParametersByEntries","dirname":"html"},{"name":"title","dirname":"html"},{"name":"titleByEntries","dirname":"html"},{"name":"assetPrefix","dirname":"output"},{"name":"assetsRetry","dirname":"output"},{"name":"charset","dirname":"output"},{"name":"cleanDistPath","dirname":"output"},{"name":"convertToRem","dirname":"output"},{"name":"copy","dirname":"output"},{"name":"cssModuleLocalIdentName","dirname":"output"},{"name":"dataUriLimit","dirname":"output"},{"name":"disableCssExtract","dirname":"output"},{"name":"disableCssModuleExtension","dirname":"output"},{"name":"disableFilenameHash","dirname":"output"},{"name":"disableInlineRuntimeChunk","dirname":"output"},{"name":"disableMinimize","dirname":"output"},{"name":"disableSourceMap","dirname":"output"},{"name":"disableTsChecker","dirname":"output"},{"name":"distPath","dirname":"output"},{"name":"enableAssetFallback","dirname":"output"},{"name":"enableAssetManifest","dirname":"output"},{"name":"enableCssModuleTSDeclaration","dirname":"output"},{"name":"enableInlineScripts","dirname":"output"},{"name":"enableInlineStyles","dirname":"output"},{"name":"enableLatestDecorators","dirname":"output"},{"name":"externals","dirname":"output"},{"name":"filename","dirname":"output"},{"name":"legalComments","dirname":"output"},{"name":"overrideBrowserslist","dirname":"output"},{"name":"polyfill","dirname":"output"},{"name":"svgDefaultExport","dirname":"output"},{"name":"buildCache","dirname":"performance"},{"name":"bundleAnalyze","dirname":"performance"},{"name":"chunkSplit","dirname":"performance"},{"name":"printFileSize","dirname":"performance"},{"name":"profile","dirname":"performance"},{"name":"removeConsole","dirname":"performance"},{"name":"removeMomentLocale","dirname":"performance"},{"name":"checkSyntax","dirname":"security"},{"name":"sri","dirname":"security"},{"name":"alias","dirname":"source"},{"name":"compileJsDataURI","dirname":"source"},{"name":"define","dirname":"source"},{"name":"exclude","dirname":"source"},{"name":"globalVars","dirname":"source"},{"name":"include","dirname":"source"},{"name":"moduleScopes","dirname":"source"},{"name":"preEntry","dirname":"source"},{"name":"resolveExtensionPrefix","dirname":"source"},{"name":"resolveMainFields","dirname":"source"},{"name":"autoprefixer","dirname":"tools"},{"name":"babel","dirname":"tools"},{"name":"cssExtract","dirname":"tools"},{"name":"cssLoader","dirname":"tools"},{"name":"devServer","dirname":"tools"},{"name":"htmlPlugin","dirname":"tools"},{"name":"inspector","dirname":"tools"},{"name":"less","dirname":"tools"},{"name":"minifyCss","dirname":"tools"},{"name":"postcss","dirname":"tools"},{"name":"pug","dirname":"tools"},{"name":"rspack","dirname":"tools"},{"name":"sass","dirname":"tools"},{"name":"styleLoader","dirname":"tools"},{"name":"styledComponents","dirname":"tools"},{"name":"terser","dirname":"tools"},{"name":"tsChecker","dirname":"tools"},{"name":"tsLoader","dirname":"tools"},{"name":"webpack","dirname":"tools"},{"name":"webpackChain","dirname":"tools"}]
1
+ [{"name":"assetPrefix","dirname":"dev"},{"name":"beforeStartUrl","dirname":"dev"},{"name":"hmr","dirname":"dev"},{"name":"host","dirname":"dev"},{"name":"https","dirname":"dev"},{"name":"port","dirname":"dev"},{"name":"progressBar","dirname":"dev"},{"name":"startUrl","dirname":"dev"},{"name":"lazyCompilation","dirname":"experiments"},{"name":"appIcon","dirname":"html"},{"name":"crossorigin","dirname":"html"},{"name":"disableHtmlFolder","dirname":"html"},{"name":"favicon","dirname":"html"},{"name":"faviconByEntries","dirname":"html"},{"name":"inject","dirname":"html"},{"name":"injectByEntries","dirname":"html"},{"name":"meta","dirname":"html"},{"name":"metaByEntries","dirname":"html"},{"name":"mountId","dirname":"html"},{"name":"tags","dirname":"html"},{"name":"tagsByEntries","dirname":"html"},{"name":"template","dirname":"html"},{"name":"templateByEntries","dirname":"html"},{"name":"templateParameters","dirname":"html"},{"name":"templateParametersByEntries","dirname":"html"},{"name":"title","dirname":"html"},{"name":"titleByEntries","dirname":"html"},{"name":"assetPrefix","dirname":"output"},{"name":"assetsRetry","dirname":"output"},{"name":"charset","dirname":"output"},{"name":"cleanDistPath","dirname":"output"},{"name":"convertToRem","dirname":"output"},{"name":"copy","dirname":"output"},{"name":"cssModuleLocalIdentName","dirname":"output"},{"name":"dataUriLimit","dirname":"output"},{"name":"disableCssExtract","dirname":"output"},{"name":"disableCssModuleExtension","dirname":"output"},{"name":"disableFilenameHash","dirname":"output"},{"name":"disableInlineRuntimeChunk","dirname":"output"},{"name":"disableMinimize","dirname":"output"},{"name":"disableSourceMap","dirname":"output"},{"name":"disableTsChecker","dirname":"output"},{"name":"distPath","dirname":"output"},{"name":"enableAssetFallback","dirname":"output"},{"name":"enableAssetManifest","dirname":"output"},{"name":"enableCssModuleTSDeclaration","dirname":"output"},{"name":"enableInlineScripts","dirname":"output"},{"name":"enableInlineStyles","dirname":"output"},{"name":"enableLatestDecorators","dirname":"output"},{"name":"externals","dirname":"output"},{"name":"filename","dirname":"output"},{"name":"legalComments","dirname":"output"},{"name":"overrideBrowserslist","dirname":"output"},{"name":"polyfill","dirname":"output"},{"name":"svgDefaultExport","dirname":"output"},{"name":"buildCache","dirname":"performance"},{"name":"bundleAnalyze","dirname":"performance"},{"name":"chunkSplit","dirname":"performance"},{"name":"printFileSize","dirname":"performance"},{"name":"profile","dirname":"performance"},{"name":"removeConsole","dirname":"performance"},{"name":"removeMomentLocale","dirname":"performance"},{"name":"checkSyntax","dirname":"security"},{"name":"sri","dirname":"security"},{"name":"alias","dirname":"source"},{"name":"compileJsDataURI","dirname":"source"},{"name":"define","dirname":"source"},{"name":"exclude","dirname":"source"},{"name":"globalVars","dirname":"source"},{"name":"include","dirname":"source"},{"name":"moduleScopes","dirname":"source"},{"name":"preEntry","dirname":"source"},{"name":"resolveExtensionPrefix","dirname":"source"},{"name":"resolveMainFields","dirname":"source"},{"name":"autoprefixer","dirname":"tools"},{"name":"babel","dirname":"tools"},{"name":"cssExtract","dirname":"tools"},{"name":"cssLoader","dirname":"tools"},{"name":"devServer","dirname":"tools"},{"name":"htmlPlugin","dirname":"tools"},{"name":"inspector","dirname":"tools"},{"name":"less","dirname":"tools"},{"name":"minifyCss","dirname":"tools"},{"name":"postcss","dirname":"tools"},{"name":"pug","dirname":"tools"},{"name":"rspack","dirname":"tools"},{"name":"sass","dirname":"tools"},{"name":"styleLoader","dirname":"tools"},{"name":"styledComponents","dirname":"tools"},{"name":"terser","dirname":"tools"},{"name":"tsChecker","dirname":"tools"},{"name":"tsLoader","dirname":"tools"},{"name":"webpack","dirname":"tools"},{"name":"webpackChain","dirname":"tools"}]
@@ -0,0 +1,299 @@
1
+ ---
2
+ sidebar_position: 1
3
+ ---
4
+
5
+ # 命令
6
+
7
+ Modern.js 内置了一些命令,可以帮助你快速启动开发服务器、构建生产环境代码等。
8
+
9
+ 通过本章节,你可以了解到 Modern.js 内置的命令有哪些,以及如何使用这些命令。
10
+
11
+ ## modern dev
12
+
13
+ `modern dev` 命令用于启动一个本地开发服务器,对源代码进行开发环境编译。
14
+
15
+ ```bash
16
+ Usage: modern dev [options]
17
+
18
+ Options:
19
+ -e --entry <entry> 指定入口,只编译特定的页面
20
+ -c --config <config> 指定配置文件路径,可以为相对路径或绝对路径
21
+ -h, --help 显示命令帮助
22
+ --analyze 分析构建产物体积,查看各个模块打包后的大小
23
+ --api-only 仅启动 API 接口服务
24
+ ```
25
+
26
+ 运行 `modern dev` 后,Modern.js 会监听源文件变化并进行模块热更新。
27
+
28
+ ```bash
29
+ $ modern dev
30
+
31
+ info Starting dev server...
32
+ info App running at:
33
+
34
+ > Local: http://localhost:8080/
35
+ > Network: http://192.168.0.1:8080/
36
+ ```
37
+
38
+ ### 编译部分页面
39
+
40
+ 在多页面(MPA)项目中,可以添加 `--entry` 参数来指定编译其中的一个或多个页面。这样可以只编译项目中的部分代码,从而提升 dev 启动速度。
41
+
42
+ 比如执行 `modern dev --entry`,在命令行界面中会展示入口选择框:
43
+
44
+ ```bash
45
+ $ modern dev --entry
46
+
47
+ ? 请选择需要构建的入口
48
+ ❯ ◯ foo
49
+ ◯ bar
50
+ ◯ baz
51
+ ```
52
+
53
+ 比如选择 `foo` 入口,那么只有 `foo` 入口相关的代码会进行编译,其他页面的代码将不会参与构建。
54
+
55
+ ### 通过参数指定页面
56
+
57
+ 你也可以在 `--entry` 后面通过参数来指定页面名称,多个页面的名称使用逗号分隔。
58
+
59
+ ```bash
60
+ # 编译 foo 页面
61
+ modern dev --entry foo
62
+
63
+ # 编译 foo 和 bar 页面
64
+ modern dev --entry foo,bar
65
+ ```
66
+
67
+ ## modern start
68
+
69
+ `modern start` 是 `modern dev` 命令的别名,两者的功能和用法完全一致。
70
+
71
+ ## modern build
72
+
73
+ `modern build` 命令默认会在 `dist/` 目录下构建出可用于生产环境的产物。你可以通过修改配置 [`output.distPath`](/configure/app/output/dist-path) 指定产物的输出目录。
74
+
75
+ ```bash
76
+ Usage: modern build [options]
77
+
78
+ Options:
79
+ -c --config <config> 指定配置文件路径,可以为相对路径或绝对路径
80
+ -h, --help 显示命令帮助
81
+ --analyze 分析构建产物体积,查看各个模块打包后的大小
82
+ ```
83
+
84
+ ### 分析构建产物体积
85
+
86
+ 执行 `npx modern build --analyze` 命令,可以在打包生产环境代码的同时,产出一个分析构建产物体积的 HTML 文件:
87
+
88
+ ```
89
+ Bundle Analyzer saved report to /example/dist/report.html
90
+ File sizes after production build:
91
+
92
+ 122.35 KB dist/static/js/885.1d4fbe5a.js
93
+ 2.3 KB dist/static/js/main.4b8e8d64.js
94
+ 761 B dist/static/js/runtime-main.edb7cf35.js
95
+ 645 B dist/static/css/main.0dd3ecc1.css
96
+ ```
97
+
98
+ 手动在浏览器中打开上述 HTML 文件,可以看到打包产物的瓦片图,并进行包体积分析和优化:
99
+
100
+ <img src="https://lf3-static.bytednsdoc.com/obj/eden-cn/aphqeh7uhohpquloj/modern-js/mwa-build-analyze-8784f762c1ab0cb20935829d5f912c4c.png" />
101
+
102
+ > 该功能基于 [webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) 实现。
103
+
104
+ ## modern new
105
+
106
+ `modern new` 命令用于在已有项目中添加项目元素。
107
+
108
+ 比如添加应用入口、启用启用一些可选功能如 Tailwind CSS、微前端开发模式等。
109
+
110
+ ```bash
111
+ Usage: modern new [options]
112
+
113
+ Options:
114
+ -d, --debug 开启 Debug 模式,打印调试日志信息 (default: false)
115
+ -c, --config <config> 生成器运行默认配置(JSON 字符串)
116
+ --dist-tag <tag> 生成器使用特殊的 npm Tag 版本
117
+ --registry 生成器运行过程中定制 npm Registry
118
+ -h, --help 显示命令帮助
119
+ ```
120
+
121
+ ### 添加入口
122
+
123
+ 在应用工程中,执行 `new` 命令添加入口如下:
124
+
125
+ ```bash
126
+ $ npx modern new
127
+ ? 请选择你想要的操作 创建工程元素
128
+ ? 创建工程元素 新建「应用入口」
129
+ ? 请填写入口名称 entry
130
+ ```
131
+
132
+ ### 启用可选功能
133
+
134
+ 在应用工程中,执行 `new` 命令启用可选能力如下:
135
+
136
+ ```bash
137
+ $ npx modern new
138
+ ? 请选择你想要的操作 启用可选功能
139
+ ? 启用可选功能 (Use arrow keys)
140
+ ❯ 启用 Tailwind CSS 支持
141
+ 启用「BFF」功能
142
+ 启用「微前端」模式
143
+ 启用「单元测试 / 集成测试」功能
144
+ 启用「Visual Testing (Storybook)」模式
145
+ ```
146
+
147
+ :::tip
148
+ `--config` 参数对应参数值需要使用 JSON 字符串。
149
+
150
+ pnpm 暂不支持使用 JSON 字符串作为参数值,可使用 `npm new` 开启相关功能。【[相关 Issue](https://github.com/pnpm/pnpm/issues/3876)】
151
+
152
+ :::
153
+
154
+ ## modern serve
155
+
156
+ `modern serve` 命令用于在生产环境下启用应用工程, 注意需要提前执行 [`build`](/apis/app/commands#modern-build) 命令构建出对应产物。
157
+
158
+ ```bash
159
+ Usage: modern serve [options]
160
+
161
+ Options:
162
+ -c --config <config> 指定配置文件路径,可以为相对路径或绝对路径
163
+ -h, --help 显示命令帮助
164
+ --api-only 仅启动 API 接口服务
165
+ ```
166
+
167
+ 默认情况下,应用将会在 `localhost:8080` 启动,可以通过 `server.port` 修改 Server 端口号:
168
+
169
+ ```js
170
+ export default defineConfig({
171
+ server: {
172
+ port: 8081,
173
+ },
174
+ });
175
+ ```
176
+
177
+ ## modern upgrade
178
+
179
+ 在项目根目录下执行命令 `npx modern upgrade`,会默认将当前执行命令项目的 `package.json` 中的 Modern.js 相关依赖更新至最新版本。
180
+
181
+ ```
182
+ Usage: modern upgrade [options]
183
+
184
+ Options:
185
+ --registry <registry> 定制 npm registry (default: "")
186
+ -d,--debug 开启 Debug 模式,打印调试日志信息 (default: false)
187
+ --cwd <cwd> 项目路径 (default: "")
188
+ -h, --help display help for command
189
+ ```
190
+
191
+ ## modern inspect
192
+
193
+ `modern inspect` 命令用于查看项目的 [Modern.js Builder 配置](https://modernjs.dev/builder/guide/basic/builder-config.html) 以及 webpack 配置。
194
+
195
+ ```
196
+ Usage: modern inspect [options]
197
+
198
+ Options:
199
+ --env <env> 查看指定环境下的配置 (default: "development")
200
+ --output <output> 指定在 dist 目录下输出的路径 (default: "/")
201
+ --verbose 在结果中展示函数的完整内容
202
+ -c --config <config> 指定配置文件路径,可以为相对路径或绝对路径
203
+ -h, --help 显示命令帮助
204
+ ```
205
+
206
+ 在项目根目录下执行命令 `npx modern inspect` 后,会在项目的 `dist` 目录生成以下文件:
207
+
208
+ - `builder.config.js`: 表示在构建时使用的 Modern.js Builder 配置。
209
+ - `webpack.config.web.js`: 表示在构建时使用的 webpack 配置。
210
+
211
+ ```bash
212
+ ➜ npx modern inspect
213
+
214
+ Inspect config succeed, open following files to view the content:
215
+
216
+ - Builder Config: /root/my-project/dist/builder.config.js
217
+ - Webpack Config (web): /root/my-project/dist/webpack.config.web.js
218
+ ```
219
+
220
+ ### 指定环境
221
+
222
+ 默认情况下,inspect 命令会输出开发环境的配置,你可以添加 `--env production` 选项来输出生产环境的配置:
223
+
224
+ ```bash
225
+ modern inspect --env production
226
+ ```
227
+
228
+ ### 完整内容
229
+
230
+ 默认情况下,inspect 命令会省略配置对象中的函数内容,你可以添加 `--verbose` 选项来输出函数的完整内容:
231
+
232
+ ```bash
233
+ modern inspect --verbose
234
+ ```
235
+
236
+ ### SSR 构建配置
237
+
238
+ 如果项目开启了 SSR 能力,则在 `dist` 目录会另外生成一份 `webpack.config.node.js` 文件,对应 SSR 构建时的 webpack 配置。
239
+
240
+ ```bash
241
+ ➜ npx modern inspect
242
+
243
+ Inspect config succeed, open following files to view the content:
244
+
245
+ - Builder Config: /root/my-project/dist/builder.config.js
246
+ - Webpack Config (web): /root/my-project/dist/webpack.config.web.js
247
+ - Webpack Config (node): /root/my-project/dist/webpack.config.node.js
248
+ ```
249
+
250
+ ## modern lint
251
+
252
+ 运行 `ESLint` 进行代码语法检查。
253
+
254
+ ```bash
255
+ Usage: modern lint [options] [...files]
256
+
257
+ lint and fix source files
258
+
259
+ Options:
260
+ --no-fix disable auto fix source file
261
+ -h, --help display help for command
262
+ ```
263
+
264
+ 通常情况下,我们只需要在 `git commit` 阶段通过 `lint-staged` 检查本次提交修改的部分代码。
265
+
266
+ - 设置 `--no-fix` 参数后可以关闭自动修复 lint 错误代码的能力。
267
+
268
+ ## modern test
269
+
270
+ `modern test` 命令会自动运行项目下的测试用例。
271
+
272
+ ```bash
273
+ Usage: modern test [options]
274
+
275
+ Options:
276
+ -h, --help 显示命令帮助
277
+ ```
278
+
279
+ :::tip
280
+ 在使用 `modern test` 命令前,需要先通过 [`new`](/apis/app/commands#modern-new) 命令启用「单元测试 / 集成测试」功能。
281
+ :::
282
+
283
+ 效果如下:
284
+
285
+ ```bash
286
+ $ npx modern test
287
+ PASS src/tests/index.test.ts
288
+ The add method
289
+ ✓ should work fine. (2ms)
290
+
291
+ Test Suites: 1 passed, 1 total
292
+ Tests: 1 passed, 1 total
293
+ Snapshots: 0 total
294
+ Time: 0.994 s, estimated 1 s
295
+ ```
296
+
297
+ :::info
298
+ `src` 和 `api` 目录下面的 `*.test.(js|ts)` 文件都会被识别为测试用例。
299
+ :::
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "label": "文件约定",
3
- "position": 1,
3
+ "position": 2,
4
4
  "collapsed": false
5
5
  }
@@ -26,13 +26,23 @@ sidebar_position: 4
26
26
 
27
27
  ## 更多用法
28
28
 
29
- 不论是在[自定义 HTML](/guides/basic-features/html) 中,或是在 [`config/public/`](/apis/app/hooks/config/public) 下的任意 HTML 文件中,都可以直接使用 HTML 标签引用 `config/upload/` 目录下的资源:
29
+ 在 React 组件中,可以通过[内置环境变量](/guides/basic-features/env-vars.html#asset_prefix)来添加该前缀:
30
+
31
+ ```tsx
32
+ export default () => {
33
+ return (
34
+ <img src={`${process.env.ASSET_PREFIX}/upload/banner.png`}></img>
35
+ );
36
+ };
37
+ ```
38
+
39
+ 另外,不论是在[自定义 HTML](/guides/basic-features/html) 中,或是在 [`config/public/`](/apis/app/hooks/config/public) 下的任意 HTML 文件中,都可以直接使用 HTML 标签引用 `config/upload/` 目录下的资源:
30
40
 
31
41
  ```html
32
42
  <script src="/upload/index.js"></script>
33
43
  ```
34
44
 
35
- 如果设置了 [`output.assetPrefix`](/configure/app/output/asset-prefix) 前缀,也可以直接使用模板语法添加该前缀:
45
+ 如果设置了 [`dev.assetPrefix`](/configure/app/dev/asset-prefix) 或 [`output.assetPrefix`](/configure/app/output/asset-prefix) 前缀,也可以直接使用模板语法添加该前缀:
36
46
 
37
47
  ```html
38
48
  <script src="<%=assetPrefix %>/upload/index.js"></script>
@@ -44,9 +44,9 @@ sidebar_position: 2
44
44
  ```
45
45
  └── routes
46
46
  ├── [id]
47
-    └── page.tsx
47
+ └── page.tsx
48
48
  ├── blog
49
-    └── page.tsx
49
+ └── page.tsx
50
50
  └── page.tsx
51
51
  ```
52
52
 
@@ -31,11 +31,11 @@ Modern.js 生成器除了在项目初始化时工作外,也能在后续研发
31
31
  .
32
32
  ├── node_modules
33
33
  ├── src
34
-    ├── modern-app-env.d.ts
35
-    └── routes
36
-    ├── index.css
37
-    ├── layout.tsx
38
-    └── page.tsx
34
+ ├── modern-app-env.d.ts
35
+ └── routes
36
+ ├── index.css
37
+ ├── layout.tsx
38
+ └── page.tsx
39
39
  ├── modern.config.ts
40
40
  ├── package.json
41
41
  ├── pnpm-lock.yaml
@@ -8,7 +8,7 @@ sidebar_label: prefix
8
8
  - **默认值:** `/api`
9
9
 
10
10
  :::caution 注意
11
- 请先在当前应用项目根目录使用【[new](/apis/app/commands/new)】 启用 BFF 功能。
11
+ 请先在当前应用项目根目录使用【[new](/apis/app/commands#modern-new)】 启用 BFF 功能。
12
12
 
13
13
  :::
14
14
 
@@ -8,7 +8,7 @@ sidebar_label: proxy
8
8
  - **默认值:** `{}`
9
9
 
10
10
  :::info 补充信息
11
- 请先在当前应用项目根目录使用【[new](/apis/app/commands/new)】 启用 BFF 功能。
11
+ 请先在当前应用项目根目录使用【[new](/apis/app/commands#modern-new)】 启用 BFF 功能。
12
12
 
13
13
  :::
14
14
 
@@ -0,0 +1,13 @@
1
+ ---
2
+ sidebar_label: beforeStartUrl
3
+ ---
4
+
5
+ # dev.beforeStartUrl
6
+
7
+ :::tip
8
+ 该配置由 Modern.js Builder 提供,更多信息可参考 [dev.beforeStartUrl](https://modernjs.dev/builder/api/config-dev.html#devbeforestarturl)。
9
+ :::
10
+
11
+ import Main from '@modern-js/builder-doc/docs/zh/config/dev/beforeStartUrl.md'
12
+
13
+ <Main />
@@ -0,0 +1,13 @@
1
+ ---
2
+ sidebar_label: host
3
+ ---
4
+
5
+ # dev.host
6
+
7
+ :::tip
8
+ 该配置由 Modern.js Builder 提供,更多信息可参考 [dev.host](https://modernjs.dev/builder/api/config-dev.html#devhost)。
9
+ :::
10
+
11
+ import Main from '@modern-js/builder-doc/docs/zh/config/dev/host.md'
12
+
13
+ <Main />
@@ -66,7 +66,7 @@ import SelfRouteExample from "@site-docs/components/self-route-example";
66
66
  ```bash
67
67
 
68
68
  ├── src
69
-    ├── entryA
69
+ ├── entryA
70
70
  │ │ └── routes
71
71
  │ │ ├── layout.tsx
72
72
  │ │ ├── page.tsx
@@ -75,8 +75,8 @@ import SelfRouteExample from "@site-docs/components/self-route-example";
75
75
  │ │ ├── page.tsx
76
76
  │ │ └── profile
77
77
  │ │ └── page.tsx
78
-    └── entryB
79
-    └── App.tsx
78
+ └── entryB
79
+ └── App.tsx
80
80
  ```
81
81
 
82
82
  默认情况下,所有约定式路由的入口,在设置 `output.ssg` 配置为 `true` 后都会在构建阶段渲染。可以配置 `false` 来取消指定入口的的默认行为,例如取消上述 entryA 入口在构建时的渲染:
@@ -4,11 +4,13 @@ sidebar_label: ssr
4
4
 
5
5
  # server.ssr
6
6
 
7
- - **类型:** `boolean`
7
+ - **类型:** `boolean` | `Object`
8
8
  - **默认值:** `false`
9
9
 
10
10
  SSR 开关以及相关设置。
11
11
 
12
+ ### Boolean 类型
13
+
12
14
  当值类型为 `boolean` 时,表示是否开启 SSR 部署模式,默认 `false` 不开启。
13
15
 
14
16
  ```ts title="modern.config.ts"
@@ -18,3 +20,19 @@ export default defineConfig({
18
20
  },
19
21
  });
20
22
  ```
23
+
24
+ ### Object 类型
25
+
26
+ 当值类型为 `Object` 时,可以配置如下属性:
27
+
28
+ - `mode`:`string = 'string'`,默认为使用 `renderToString` 渲染。配置为 'stream' 开启流式渲染。
29
+ - `forceCSR`:`boolean = false`,默认关闭强制 CSR 渲染。配置为 `true` 后,在页面访问时添加 `?csr=true` 即可强制 CSR。
30
+
31
+ ```ts title="modern.config.ts"
32
+ export default defineConfig({
33
+ server: {
34
+ forceCSR: true,
35
+ mode: 'stream',
36
+ },
37
+ });
38
+ ```
@@ -25,7 +25,7 @@ export default defineConfig({
25
25
  └── src
26
26
  └── pages
27
27
  ├── a
28
-    └── App.jsx
28
+ └── App.jsx
29
29
  └── b
30
30
  └── App.jsx
31
31
  ```
@@ -0,0 +1,69 @@
1
+ ---
2
+ title: 使用 Rspack
3
+ sidebar_position: 12
4
+ ---
5
+
6
+ # 使用 Rspack
7
+
8
+ [Rspack](https://www.rspack.org/) 是字节跳动 Web Infra 团队自研的 Rust Bundler,核心架构对齐 webpack 实现,并对社区常用的构建能力做了开箱即用的支持。
9
+
10
+ Rspack 通过以下方式来提升编译性能:
11
+
12
+ - 高度 LTO 优化的 Native code。
13
+ - 充分利用多核优势,整个编译过程充分进行多线程优化。
14
+ - 基于请求的按需编译(Lazy Compilation),减小每次编译的模块数目,以提升冷启动的速度。
15
+
16
+ ## 初始化 rspack 项目
17
+
18
+ Modern.js 生成器会提供一个可交互的问答界面,只需将构建工具选择为**rspack**,即可创建一个 rspack 项目:
19
+
20
+ ```bash
21
+ $ npx @modern-js/create myapp
22
+ ? 请选择你想创建的工程类型 应用
23
+ ? 请选择开发语言 TS
24
+ ? 请选择包管理工具 pnpm
25
+ ? 请选择构建工具 rspack
26
+ ```
27
+
28
+ 项目创建完成后,在项目中执行 `pnpm run dev` 即可体验项目。更多项目信息可参考[快速上手](/guides/get-started/quick-start.html)。
29
+
30
+ :::tip
31
+ 使用 rspack 作为打包工具时,以下功能暂不支持使用:
32
+
33
+ - 服务端渲染(SSR)
34
+ - 静态站点生成(SSG)
35
+ - 微前端(Micro Frontend)
36
+ - Storybook 调试
37
+
38
+ :::
39
+
40
+ ## 从 webpack 迁移至 rspack
41
+
42
+ 通过执行 `pnpm run new` 可启用 rspack 构建:
43
+
44
+ ```bash
45
+ $ pnpm run new
46
+ ? 请选择你想要的操作 启用可选功能
47
+ ? 启用可选功能 启用「rspack 构建」
48
+ ```
49
+
50
+ 执行命令后,在 modern.config.ts 中开启 rspack 构建:
51
+
52
+ ```ts title=modern.config.ts
53
+ import appTools, { defineConfig } from '@modern-js/app-tools';
54
+
55
+ export default defineConfig<'rspack'>({
56
+ runtime: {
57
+ router: true,
58
+ },
59
+ plugins: [
60
+ appTools({
61
+ bundler: 'experimental-rspack',
62
+ }),
63
+ ],
64
+ });
65
+ ```
66
+
67
+ :::tip
68
+ 从 webpack 迁移至 rspack,会有一些构建和配置能力上的差异,详情可参考:[配置差异](https://modernjs.dev/builder/guide/advanced/rspack-start.html#从-webpack-迁移到-rspack)
69
+ :::
@@ -37,14 +37,14 @@ SSG 在**约定式路由**和**自控式路由**下的使用方式不同。
37
37
  ```
38
38
  .
39
39
  ├── src
40
-    └── routes
41
-    ├── layout.tsx
42
-    ├── page.tsx
43
-    └── user
44
-    ├── layout.tsx
45
-    ├── page.tsx
46
-    └── profile
47
-    └── page.tsx
40
+ └── routes
41
+ ├── layout.tsx
42
+ ├── page.tsx
43
+ └── user
44
+ ├── layout.tsx
45
+ ├── page.tsx
46
+ └── profile
47
+ └── page.tsx
48
48
  ```
49
49
 
50
50
  上述文件目录将会生成以下三条路由: