@modern-js/app-tools 1.21.5 → 2.0.0-beta.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 (170) hide show
  1. package/CHANGELOG.md +319 -51
  2. package/dist/js/modern/analyze/constants.js +1 -0
  3. package/dist/js/modern/analyze/generateCode.js +126 -32
  4. package/dist/js/modern/analyze/getBundleEntry.js +7 -14
  5. package/dist/js/modern/analyze/getClientRoutes/getRoutes.js +173 -0
  6. package/dist/js/modern/analyze/{getClientRoutes.js → getClientRoutes/getRoutesLegacy.js} +13 -58
  7. package/dist/js/modern/analyze/getClientRoutes/index.js +2 -0
  8. package/dist/js/modern/analyze/getClientRoutes/utils.js +18 -0
  9. package/dist/js/modern/analyze/getFileSystemEntry.js +27 -21
  10. package/dist/js/modern/analyze/getHtmlTemplate.js +2 -9
  11. package/dist/js/modern/analyze/getServerRoutes.js +15 -32
  12. package/dist/js/modern/analyze/index.js +81 -23
  13. package/dist/js/modern/analyze/isDefaultExportFunction.js +0 -4
  14. package/dist/js/modern/analyze/makeLegalIdentifier.js +0 -2
  15. package/dist/js/modern/analyze/nestedRoutes.js +102 -0
  16. package/dist/js/modern/analyze/templates.js +151 -12
  17. package/dist/js/modern/analyze/utils.js +2 -8
  18. package/dist/js/modern/builder/builderPlugins/compatModern.js +208 -0
  19. package/dist/js/modern/builder/createHtmlConfig.js +58 -0
  20. package/dist/js/modern/builder/createOutputConfig.js +70 -0
  21. package/dist/js/modern/builder/createSourceConfig.js +74 -0
  22. package/dist/js/modern/builder/createToolsConfig.js +87 -0
  23. package/dist/js/modern/builder/index.js +108 -0
  24. package/dist/js/modern/builder/share.js +44 -0
  25. package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +29 -0
  26. package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +33 -0
  27. package/dist/js/modern/builder/webpackPlugins/routerPlugin.js +97 -0
  28. package/dist/js/modern/commands/build.js +16 -110
  29. package/dist/js/modern/commands/dev.js +12 -28
  30. package/dist/js/modern/commands/inspect.js +8 -66
  31. package/dist/js/modern/commands/start.js +2 -3
  32. package/dist/js/modern/index.js +17 -16
  33. package/dist/js/modern/locale/en.js +0 -1
  34. package/dist/js/modern/locale/zh.js +0 -1
  35. package/dist/js/modern/utils/commands.js +5 -0
  36. package/dist/js/modern/utils/config.js +1 -12
  37. package/dist/js/modern/utils/createServer.js +12 -1
  38. package/dist/js/modern/utils/getSpecifiedEntries.js +0 -6
  39. package/dist/js/modern/utils/printInstructions.js +3 -2
  40. package/dist/js/modern/utils/routes.js +0 -2
  41. package/dist/js/node/analyze/constants.js +3 -1
  42. package/dist/js/node/analyze/generateCode.js +123 -47
  43. package/dist/js/node/analyze/getBundleEntry.js +7 -20
  44. package/dist/js/node/analyze/getClientRoutes/getRoutes.js +181 -0
  45. package/dist/js/node/analyze/{getClientRoutes.js → getClientRoutes/getRoutesLegacy.js} +19 -78
  46. package/dist/js/node/analyze/getClientRoutes/index.js +19 -0
  47. package/dist/js/node/analyze/getClientRoutes/utils.js +28 -0
  48. package/dist/js/node/analyze/getFileSystemEntry.js +26 -28
  49. package/dist/js/node/analyze/getHtmlTemplate.js +2 -23
  50. package/dist/js/node/analyze/getServerRoutes.js +14 -40
  51. package/dist/js/node/analyze/index.js +81 -33
  52. package/dist/js/node/analyze/isDefaultExportFunction.js +0 -12
  53. package/dist/js/node/analyze/makeLegalIdentifier.js +0 -4
  54. package/dist/js/node/analyze/nestedRoutes.js +111 -0
  55. package/dist/js/node/analyze/templates.js +153 -21
  56. package/dist/js/node/analyze/utils.js +4 -20
  57. package/dist/js/node/builder/builderPlugins/compatModern.js +216 -0
  58. package/dist/js/node/builder/createHtmlConfig.js +68 -0
  59. package/dist/js/node/builder/createOutputConfig.js +76 -0
  60. package/dist/js/node/builder/createSourceConfig.js +82 -0
  61. package/dist/js/node/builder/createToolsConfig.js +94 -0
  62. package/dist/js/node/builder/index.js +117 -0
  63. package/dist/js/node/builder/share.js +51 -0
  64. package/dist/js/node/builder/webpackPlugins/htmlAsyncChunkPlugin.js +36 -0
  65. package/dist/js/node/builder/webpackPlugins/htmlBottomTemplate.js +40 -0
  66. package/dist/js/node/builder/webpackPlugins/routerPlugin.js +105 -0
  67. package/dist/js/node/commands/build.js +14 -121
  68. package/dist/js/node/commands/deploy.js +0 -2
  69. package/dist/js/node/commands/dev.js +10 -44
  70. package/dist/js/node/commands/index.js +0 -6
  71. package/dist/js/node/commands/inspect.js +10 -90
  72. package/dist/js/node/commands/start.js +2 -11
  73. package/dist/js/node/exports/server.js +0 -1
  74. package/dist/js/node/hooks.js +0 -2
  75. package/dist/js/node/index.js +22 -32
  76. package/dist/js/node/locale/en.js +0 -1
  77. package/dist/js/node/locale/index.js +0 -4
  78. package/dist/js/node/locale/zh.js +0 -1
  79. package/dist/js/node/utils/commands.js +12 -0
  80. package/dist/js/node/utils/config.js +1 -25
  81. package/dist/js/node/utils/createServer.js +15 -11
  82. package/dist/js/node/utils/getSpecifiedEntries.js +0 -9
  83. package/dist/js/node/utils/language.js +0 -2
  84. package/dist/js/node/utils/printInstructions.js +3 -6
  85. package/dist/js/node/utils/routes.js +0 -5
  86. package/dist/js/treeshaking/analyze/constants.js +16 -0
  87. package/dist/js/treeshaking/analyze/generateCode.js +369 -0
  88. package/dist/js/treeshaking/analyze/getBundleEntry.js +69 -0
  89. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +184 -0
  90. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +185 -0
  91. package/dist/js/treeshaking/analyze/getClientRoutes/index.js +2 -0
  92. package/dist/js/treeshaking/analyze/getClientRoutes/utils.js +24 -0
  93. package/dist/js/treeshaking/analyze/getFileSystemEntry.js +96 -0
  94. package/dist/js/treeshaking/analyze/getHtmlTemplate.js +129 -0
  95. package/dist/js/treeshaking/analyze/getServerRoutes.js +157 -0
  96. package/dist/js/treeshaking/analyze/index.js +334 -0
  97. package/dist/js/treeshaking/analyze/isDefaultExportFunction.js +28 -0
  98. package/dist/js/treeshaking/analyze/makeLegalIdentifier.js +16 -0
  99. package/dist/js/treeshaking/analyze/nestedRoutes.js +165 -0
  100. package/dist/js/treeshaking/analyze/templates.js +170 -0
  101. package/dist/js/treeshaking/analyze/utils.js +88 -0
  102. package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +212 -0
  103. package/dist/js/treeshaking/builder/createHtmlConfig.js +59 -0
  104. package/dist/js/treeshaking/builder/createOutputConfig.js +70 -0
  105. package/dist/js/treeshaking/builder/createSourceConfig.js +88 -0
  106. package/dist/js/treeshaking/builder/createToolsConfig.js +85 -0
  107. package/dist/js/treeshaking/builder/index.js +161 -0
  108. package/dist/js/treeshaking/builder/share.js +46 -0
  109. package/dist/js/treeshaking/builder/webpackPlugins/htmlAsyncChunkPlugin.js +46 -0
  110. package/dist/js/treeshaking/builder/webpackPlugins/htmlBottomTemplate.js +41 -0
  111. package/dist/js/treeshaking/builder/webpackPlugins/routerPlugin.js +121 -0
  112. package/dist/js/treeshaking/commands/build.js +83 -0
  113. package/dist/js/treeshaking/commands/deploy.js +26 -0
  114. package/dist/js/treeshaking/commands/dev.js +124 -0
  115. package/dist/js/treeshaking/commands/index.js +3 -0
  116. package/dist/js/treeshaking/commands/inspect.js +29 -0
  117. package/dist/js/treeshaking/commands/start.js +69 -0
  118. package/dist/js/treeshaking/exports/server.js +1 -0
  119. package/dist/js/treeshaking/hooks.js +21 -0
  120. package/dist/js/treeshaking/index.js +267 -0
  121. package/dist/js/treeshaking/locale/en.js +34 -0
  122. package/dist/js/treeshaking/locale/index.js +9 -0
  123. package/dist/js/treeshaking/locale/zh.js +34 -0
  124. package/dist/js/treeshaking/utils/commands.js +5 -0
  125. package/dist/js/treeshaking/utils/config.js +124 -0
  126. package/dist/js/treeshaking/utils/createServer.js +73 -0
  127. package/dist/js/treeshaking/utils/getSpecifiedEntries.js +58 -0
  128. package/dist/js/treeshaking/utils/language.js +5 -0
  129. package/dist/js/treeshaking/utils/printInstructions.js +30 -0
  130. package/dist/js/treeshaking/utils/routes.js +29 -0
  131. package/dist/js/treeshaking/utils/types.js +0 -0
  132. package/dist/types/analyze/constants.d.ts +1 -0
  133. package/dist/types/analyze/generateCode.d.ts +1 -1
  134. package/dist/types/analyze/{getClientRoutes.d.ts → getClientRoutes/getRoutes.d.ts} +2 -7
  135. package/dist/types/analyze/getClientRoutes/getRoutesLegacy.d.ts +15 -0
  136. package/dist/types/analyze/getClientRoutes/index.d.ts +2 -0
  137. package/dist/types/analyze/getClientRoutes/utils.d.ts +5 -0
  138. package/dist/types/analyze/index.d.ts +4 -5
  139. package/dist/types/analyze/nestedRoutes.d.ts +5 -0
  140. package/dist/types/analyze/templates.d.ts +19 -3
  141. package/dist/types/analyze/utils.d.ts +2 -1
  142. package/dist/types/builder/builderPlugins/compatModern.d.ts +13 -0
  143. package/dist/types/builder/createHtmlConfig.d.ts +6 -0
  144. package/dist/types/builder/createOutputConfig.d.ts +3 -0
  145. package/dist/types/builder/createSourceConfig.d.ts +5 -0
  146. package/dist/types/builder/createToolsConfig.d.ts +13 -0
  147. package/dist/types/builder/index.d.ts +15 -0
  148. package/dist/types/builder/share.d.ts +26 -0
  149. package/dist/types/builder/webpackPlugins/htmlAsyncChunkPlugin.d.ts +8 -0
  150. package/dist/types/builder/webpackPlugins/htmlBottomTemplate.d.ts +10 -0
  151. package/dist/types/builder/webpackPlugins/routerPlugin.d.ts +10 -0
  152. package/dist/types/commands/build.d.ts +2 -1
  153. package/dist/types/commands/deploy.d.ts +2 -1
  154. package/dist/types/commands/dev.d.ts +2 -1
  155. package/dist/types/commands/inspect.d.ts +2 -6
  156. package/dist/types/commands/start.d.ts +2 -1
  157. package/dist/types/hooks.d.ts +15 -10
  158. package/dist/types/index.d.ts +4 -4
  159. package/dist/types/locale/en.d.ts +0 -1
  160. package/dist/types/locale/index.d.ts +0 -2
  161. package/dist/types/locale/zh.d.ts +0 -1
  162. package/dist/types/utils/commands.d.ts +1 -0
  163. package/dist/types/utils/config.d.ts +0 -1
  164. package/dist/types/utils/createServer.d.ts +8 -1
  165. package/dist/types/utils/printInstructions.d.ts +3 -2
  166. package/dist/types/utils/types.d.ts +2 -3
  167. package/package.json +25 -42
  168. package/dist/js/modern/utils/createCompiler.js +0 -61
  169. package/dist/js/node/utils/createCompiler.js +0 -81
  170. package/dist/types/utils/createCompiler.d.ts +0 -13
package/CHANGELOG.md CHANGED
@@ -1,56 +1,324 @@
1
1
  # @modern-js/app-tools
2
2
 
3
- ## 1.21.5
4
-
5
- ### Patch Changes
6
-
7
- - @modern-js/core@1.21.5
8
- - @modern-js/plugin-i18n@1.21.5
9
- - @modern-js/plugin-jarvis@1.21.5
10
- - @modern-js/webpack@1.21.5
11
- - @modern-js/new-action@1.21.5
12
- - @modern-js/prod-server@1.21.5
13
- - @modern-js/server@1.21.5
14
- - @modern-js/node-bundle-require@1.21.5
15
- - @modern-js/plugin@1.21.5
16
- - @modern-js/types@1.21.5
17
- - @modern-js/upgrade@1.21.5
18
- - @modern-js/utils@1.21.5
19
-
20
- ## 1.21.4
21
-
22
- ### Patch Changes
23
-
24
- - Updated dependencies [0889ab2]
25
- - @modern-js/server@1.21.4
26
- - @modern-js/core@1.21.4
27
- - @modern-js/plugin-i18n@1.21.4
28
- - @modern-js/plugin-jarvis@1.21.4
29
- - @modern-js/webpack@1.21.4
30
- - @modern-js/new-action@1.21.4
31
- - @modern-js/prod-server@1.21.4
32
- - @modern-js/node-bundle-require@1.21.4
33
- - @modern-js/plugin@1.21.4
34
- - @modern-js/types@1.21.4
35
- - @modern-js/upgrade@1.21.4
36
- - @modern-js/utils@1.21.4
37
-
38
- ## 1.21.3
39
-
40
- ### Patch Changes
41
-
42
- - @modern-js/upgrade@1.21.3
43
- - @modern-js/new-action@1.21.3
44
- - @modern-js/core@1.21.3
45
- - @modern-js/plugin-i18n@1.21.3
46
- - @modern-js/plugin-jarvis@1.21.3
47
- - @modern-js/webpack@1.21.3
48
- - @modern-js/prod-server@1.21.3
49
- - @modern-js/server@1.21.3
50
- - @modern-js/node-bundle-require@1.21.3
51
- - @modern-js/plugin@1.21.3
52
- - @modern-js/types@1.21.3
53
- - @modern-js/utils@1.21.3
3
+ ## 2.0.0-beta.1
4
+
5
+ ### Major Changes
6
+
7
+ - dda38c9: chore: v2
8
+
9
+ ### Minor Changes
10
+
11
+ - edd1cfb1af: feat: modernjs Access builder compiler
12
+ feat: modernjs 接入 builder 构建
13
+ - 543be9558e: feat: compile server loader and support handle loader request
14
+ feat: 编译 server loader 并支持处理 loader 的请求
15
+
16
+ ### Patch Changes
17
+
18
+ - c9f912ca4d: feat(app-tools): improve build logs of dev and build command
19
+
20
+ feat(app-tools): 优化 dev 和 build 过程中的日志展示
21
+
22
+ - 103973cde9: fix: builder tools.webpackChain config args not match the Modernjs tools.webpackChain
23
+ fix: builder tools.webpackChain 配置传参无法匹配 Modernjs tools.webpackChain
24
+ - 0b2d1ef02b: fix: repeat register `babel-plugin-lodash`
25
+ fix: 重复注册 `babel-plugin-lodash`
26
+ - 82cef85ed7: fix: specify builder compiler framework
27
+ fix: 指明 builder 构建时框架
28
+ - 3e57f2b: feat: add document feature with plugin
29
+
30
+ feat: 增加 document 功能插件
31
+
32
+ - 85edee888c: feat(app-tools): support tools.htmlPlugin config
33
+
34
+ feat(app-tools): 支持 tools.htmlPlugin 配置项
35
+
36
+ - 5402fdb: feat(Builder): add output.disableTsChecker config
37
+
38
+ feat(Builder): 新增 output.disableTsChecker 配置项
39
+
40
+ - dc8eeb9cbb: fix: clear distDirectory in prepare hook & inject data loader plugin to server
41
+ fix: 在 prepare hook 中清理 dist 目录,并且向 server 中注入 data loader plugin
42
+ - cc971eabfc: refactor: move server plugin load logic in `@modern-js/core`
43
+ refactor:移除在 `@modern-js/core` 中的 server 插件加载逻辑
44
+ - 5b9049f: feat: inject async js chunk when streaming ssr
45
+ feat: streaming ssr 时, 注入 async 类型的 js chunk
46
+ - d4a4566: chore: rename plugin-jarvis to plugin-lint
47
+
48
+ chore: 重命名 plugin-jarvis 为 plugin-lint
49
+
50
+ - 6bda14ed71: feat: refactor router with react-router@6.4
51
+
52
+ feat: 使用 react-router@6.4 重构路由模块
53
+
54
+ - d36c6ee126: fix(app-tools): failed to run inspect command
55
+
56
+ fix(app-tools): 修复运行 inspect 命令失败的问题
57
+
58
+ - 92004d1: feat: support load chunks parallelly
59
+ feat: 支持并行加载 chunks
60
+ - b8bbe036c7: feat: change type logic
61
+ feat: 修改类型相关的逻辑
62
+ - 40ed587: feat: inject css chunk into html for streaming ssr
63
+ feat: streaming ssr 返回的 html 注入 css chunk
64
+ - af4422d: feat(builder): complete utils of tools.webpack
65
+
66
+ feat(builder): 补全 tools.webpack 提供的 utils 方法
67
+
68
+ - 87c1ff8: feat(app-tools): attach builder instance to appContext
69
+
70
+ feat(app-tools): 将 builder 实例挂载到 appContext 上
71
+
72
+ - c258e34202: fix: add builder hooks `beforeBuild` params
73
+ fix: 新增 builder hooks `beforeBuild` 的参数
74
+ - 8b8e1bb571: feat: support nested routes
75
+ feat: 支持嵌套路由
76
+ - 7de97ae: fix: `deploy` command has't load `builder` instance
77
+ fix: `deploy` 命令没有加载 builder 实例
78
+ - c3b7de4: fix(app-tools): dev.assetPrefix not work
79
+
80
+ fix(app-tools): 修复 dev.assetPrefix 配置项不生效的问题
81
+
82
+ - 92004d1: fix: use loadable lazy instead of loadable
83
+ fix: 使用 loadable lazy 组件替代 loadable
84
+ - c677befc22: fix(app-tools): compat legacy resolve behavior
85
+
86
+ fix(app-tools): 兼容旧版本 node_modules 解析逻辑
87
+
88
+ - 3f7cde5caa: fix: builder plugin setup can't get config
89
+ fix: builder 插件在 setup 阶段无法拿到 config
90
+ - 99213e4bae: fix: process does't exit when exec command
91
+ fix: 修复执行命令时进程未退出的问题
92
+ - b16fd96: fix: `modern-js/app-tools` pass error config to builder.
93
+ fix: `modern-js/app-tools` 传递错误的 config 给 builder.
94
+ - 7eefedd7ca: fix: add html-webpack-plugin `__internal__` options, for bottom template
95
+ fix: 为了 bottom template, 增加 `html-webpack-plugin` `__internal__` 配置项,
96
+ - 14b712d: fix: use consistent alias type and default value across packages
97
+
98
+ fix: 在各个包中使用一致的 alias 类型定义和默认值
99
+
100
+ - Updated dependencies [c9f912ca4d]
101
+ - Updated dependencies [95be7cc49c]
102
+ - Updated dependencies [e439457a51]
103
+ - Updated dependencies [4d1545f8c0]
104
+ - Updated dependencies [2bc090c089]
105
+ - Updated dependencies [f96a725211]
106
+ - Updated dependencies [828f42f9ce]
107
+ - Updated dependencies [c745686]
108
+ - Updated dependencies [c9e800d39a]
109
+ - Updated dependencies [0ff846f]
110
+ - Updated dependencies [57077b2]
111
+ - Updated dependencies [d032d49]
112
+ - Updated dependencies [2ff6167]
113
+ - Updated dependencies [287f298990]
114
+ - Updated dependencies [15bf09d9c8]
115
+ - Updated dependencies [423188db70]
116
+ - Updated dependencies [fd2d652]
117
+ - Updated dependencies [0c2d8dae31]
118
+ - Updated dependencies [2edad29]
119
+ - Updated dependencies [85edee888c]
120
+ - Updated dependencies [a2509bfbdb]
121
+ - Updated dependencies [3998875791]
122
+ - Updated dependencies [3998875791]
123
+ - Updated dependencies [ba86b8b711]
124
+ - Updated dependencies [61f21d1e77]
125
+ - Updated dependencies [5402fdb]
126
+ - Updated dependencies [2ae58176fe]
127
+ - Updated dependencies [92f0ead]
128
+ - Updated dependencies [edd1cfb1af]
129
+ - Updated dependencies [5d67c26]
130
+ - Updated dependencies [cc971eabfc]
131
+ - Updated dependencies [5b9049f]
132
+ - Updated dependencies [d4a4566]
133
+ - Updated dependencies [18360a38d7]
134
+ - Updated dependencies [6bda14ed71]
135
+ - Updated dependencies [0b314e6946]
136
+ - Updated dependencies [92004d1]
137
+ - Updated dependencies [b8bbe036c7]
138
+ - Updated dependencies [40ed587]
139
+ - Updated dependencies [af4422d]
140
+ - Updated dependencies [87c1ff8]
141
+ - Updated dependencies [d5a31df781]
142
+ - Updated dependencies [dda38c9]
143
+ - Updated dependencies [102d32e4ba]
144
+ - Updated dependencies [c258e34202]
145
+ - Updated dependencies [7248342e4d]
146
+ - Updated dependencies [568eab1e42]
147
+ - Updated dependencies [8b8e1bb571]
148
+ - Updated dependencies [3bbea92b2a]
149
+ - Updated dependencies [ae71096d45]
150
+ - Updated dependencies [73cd29dd9f]
151
+ - Updated dependencies [a23010138d]
152
+ - Updated dependencies [75d1b2657c]
153
+ - Updated dependencies [18aaf42]
154
+ - Updated dependencies [f179749]
155
+ - Updated dependencies [3fae2d0]
156
+ - Updated dependencies [8a6d45f]
157
+ - Updated dependencies [ebbeed1]
158
+ - Updated dependencies [90e2879520]
159
+ - Updated dependencies [df41d71]
160
+ - Updated dependencies [f727e5c6cc]
161
+ - Updated dependencies [5e3cecd523]
162
+ - Updated dependencies [abf3421]
163
+ - Updated dependencies [da2d1fc3c2]
164
+ - Updated dependencies [543be9558e]
165
+ - Updated dependencies [14b712d]
166
+ - @modern-js/builder-webpack-provider@2.0.0-beta.1
167
+ - @modern-js/builder-shared@2.0.0-beta.1
168
+ - @modern-js/core@2.0.0-beta.1
169
+ - @modern-js/prod-server@2.0.0-beta.1
170
+ - @modern-js/builder-plugin-esbuild@2.0.0-beta.1
171
+ - @modern-js/server@2.0.0-beta.1
172
+ - @modern-js/node-bundle-require@2.0.0-beta.1
173
+ - @modern-js/utils@2.0.0-beta.1
174
+ - @modern-js/builder-plugin-node-polyfill@2.0.0-beta.1
175
+ - @modern-js/types@2.0.0-beta.1
176
+ - @modern-js/plugin-lint@2.0.0-beta.1
177
+ - @modern-js/plugin@2.0.0-beta.1
178
+ - @modern-js/builder@2.0.0-beta.1
179
+ - @modern-js/plugin-data-loader@2.0.0-beta.1
180
+ - @modern-js/plugin-i18n@2.0.0-beta.1
181
+ - @modern-js/new-action@2.0.0-beta.1
182
+ - @modern-js/upgrade@2.0.0-beta.1
183
+
184
+ ## 2.0.0-beta.0
185
+
186
+ ### Major Changes
187
+
188
+ - dda38c9: chore: v2
189
+
190
+ ### Minor Changes
191
+
192
+ - edd1cfb1a: feat: modernjs Access builder compiler
193
+ feat: modernjs 接入 builder 构建
194
+ - 543be95: feat: compile server loader and support handle loader request
195
+ feat: 编译 server loader 并支持处理 loader 的请求
196
+
197
+ ### Patch Changes
198
+
199
+ - c9f912c: feat(app-tools): improve build logs of dev and build command
200
+
201
+ feat(app-tools): 优化 dev 和 build 过程中的日志展示
202
+
203
+ - 103973c: fix: builder tools.webpackChain config args not match the Modernjs tools.webpackChain
204
+ fix: builder tools.webpackChain 配置传参无法匹配 Modernjs tools.webpackChain
205
+ - 0b2d1ef: fix: repeat register `babel-plugin-lodash`
206
+ fix: 重复注册 `babel-plugin-lodash`
207
+ - 82cef85: fix: specify builder compiler framework
208
+ fix: 指明 builder 构建时框架
209
+ - 85edee8: feat(app-tools): support tools.htmlPlugin config
210
+
211
+ feat(app-tools): 支持 tools.htmlPlugin 配置项
212
+
213
+ - dc8eeb9: fix: clear distDirectory in prepare hook & inject data loader plugin to server
214
+ fix: 在 prepare hook 中清理 dist 目录,并且向 server 中注入 data loader plugin
215
+ - cc971eabf: refactor: move server plugin load logic in `@modern-js/core`
216
+ refactor:移除在 `@modern-js/core` 中的 server 插件加载逻辑
217
+ - 5b9049f: feat: inject async js chunk when streaming ssr
218
+ feat: streaming ssr 时, 注入 async 类型的 js chunk
219
+ - 6bda14ed7: feat: refactor router with react-router@6.4
220
+
221
+ feat: 使用 react-router@6.4 重构路由模块
222
+
223
+ - d36c6ee: fix(app-tools): failed to run inspect command
224
+
225
+ fix(app-tools): 修复运行 inspect 命令失败的问题
226
+
227
+ - b8bbe036c: feat: change type logic
228
+ feat: 修改类型相关的逻辑
229
+ - af4422d: feat(builder): complete utils of tools.webpack
230
+
231
+ feat(builder): 补全 tools.webpack 提供的 utils 方法
232
+
233
+ - c258e34: fix: add builder hooks `beforeBuild` params
234
+ fix: 新增 builder hooks `beforeBuild` 的参数
235
+ - 8b8e1bb57: feat: support nested routes
236
+ feat: 支持嵌套路由
237
+ - c677bef: fix(app-tools): compat legacy resolve behavior
238
+
239
+ fix(app-tools): 兼容旧版本 node_modules 解析逻辑
240
+
241
+ - 3f7cde5: fix: builder plugin setup can't get config
242
+ fix: builder 插件在 setup 阶段无法拿到 config
243
+ - 99213e4: fix: process does't exit when exec command
244
+ fix: 修复执行命令时进程未退出的问题
245
+ - b16fd96: fix: `modern-js/app-tools` pass error config to builder.
246
+ fix: `modern-js/app-tools` 传递错误的 config 给 builder.
247
+ - 7eefedd: fix: add html-webpack-plugin `__internal__` options, for bottom template
248
+ fix: 为了 bottom template, 增加 `html-webpack-plugin` `__internal__` 配置项,
249
+ - 14b712d: fix: use consistent alias type and default value across packages
250
+
251
+ fix: 在各个包中使用一致的 alias 类型定义和默认值
252
+
253
+ - Updated dependencies [c9f912c]
254
+ - Updated dependencies [95be7cc49]
255
+ - Updated dependencies [e439457a5]
256
+ - Updated dependencies [4d1545f]
257
+ - Updated dependencies [2bc090c08]
258
+ - Updated dependencies [f96a725]
259
+ - Updated dependencies [828f42f9c]
260
+ - Updated dependencies [c745686]
261
+ - Updated dependencies [c9e800d39]
262
+ - Updated dependencies [0ff846f]
263
+ - Updated dependencies [57077b2]
264
+ - Updated dependencies [287f29899]
265
+ - Updated dependencies [15bf09d9c]
266
+ - Updated dependencies [423188db7]
267
+ - Updated dependencies [fd2d652]
268
+ - Updated dependencies [0c2d8dae3]
269
+ - Updated dependencies [85edee8]
270
+ - Updated dependencies [a2509bf]
271
+ - Updated dependencies [399887579]
272
+ - Updated dependencies [399887579]
273
+ - Updated dependencies [ba86b8b]
274
+ - Updated dependencies [61f21d1e7]
275
+ - Updated dependencies [2ae58176f]
276
+ - Updated dependencies [edd1cfb1a]
277
+ - Updated dependencies [5d67c26]
278
+ - Updated dependencies [cc971eabf]
279
+ - Updated dependencies [5b9049f]
280
+ - Updated dependencies [18360a38d]
281
+ - Updated dependencies [6bda14ed7]
282
+ - Updated dependencies [0b314e694]
283
+ - Updated dependencies [b8bbe036c]
284
+ - Updated dependencies [af4422d]
285
+ - Updated dependencies [d5a31df78]
286
+ - Updated dependencies [dda38c9]
287
+ - Updated dependencies [102d32e4b]
288
+ - Updated dependencies [c258e34]
289
+ - Updated dependencies [7248342e4]
290
+ - Updated dependencies [568eab1e4]
291
+ - Updated dependencies [8b8e1bb57]
292
+ - Updated dependencies [3bbea92b2]
293
+ - Updated dependencies [ae71096d4]
294
+ - Updated dependencies [73cd29dd9]
295
+ - Updated dependencies [a23010138]
296
+ - Updated dependencies [75d1b2657]
297
+ - Updated dependencies [8a6d45f]
298
+ - Updated dependencies [90e2879]
299
+ - Updated dependencies [f727e5c6c]
300
+ - Updated dependencies [5e3cecd52]
301
+ - Updated dependencies [abf3421]
302
+ - Updated dependencies [da2d1fc3c]
303
+ - Updated dependencies [543be95]
304
+ - Updated dependencies [14b712d]
305
+ - @modern-js/builder-webpack-provider@2.0.0-beta.0
306
+ - @modern-js/builder-shared@2.0.0-beta.0
307
+ - @modern-js/core@2.0.0-beta.0
308
+ - @modern-js/prod-server@2.0.0-beta.0
309
+ - @modern-js/builder-plugin-esbuild@2.0.0-beta.0
310
+ - @modern-js/server@2.0.0-beta.0
311
+ - @modern-js/node-bundle-require@2.0.0-beta.0
312
+ - @modern-js/builder-plugin-node-polyfill@2.0.0-beta.0
313
+ - @modern-js/utils@2.0.0-beta.0
314
+ - @modern-js/types@2.0.0-beta.0
315
+ - @modern-js/plugin@2.0.0-beta.0
316
+ - @modern-js/builder@2.0.0-beta.0
317
+ - @modern-js/plugin-data-loader@2.0.0-beta.0
318
+ - @modern-js/plugin-i18n@2.0.0-beta.0
319
+ - @modern-js/plugin-jarvis@2.0.0-beta.0
320
+ - @modern-js/new-action@2.0.0-beta.0
321
+ - @modern-js/upgrade@2.0.0-beta.0
54
322
 
55
323
  ## 1.21.2
56
324
 
@@ -2,6 +2,7 @@ export const JS_EXTENSIONS = ['.js', '.ts', '.jsx', '.tsx'];
2
2
  export const INDEX_FILE_NAME = 'index';
3
3
  export const APP_FILE_NAME = 'App';
4
4
  export const PAGES_DIR_NAME = 'pages';
5
+ export const NESTED_ROUTES_DIR = 'routes';
5
6
  export const FILE_SYSTEM_ROUTES_FILE_NAME = 'routes.js';
6
7
  export const ENTRY_POINT_FILE_NAME = 'index.js';
7
8
  export const ENTRY_BOOTSTRAP_FILE_NAME = 'bootstrap.js';
@@ -1,14 +1,16 @@
1
1
  import path from 'path';
2
- import { fs } from '@modern-js/utils';
2
+ import { fs, logger } from '@modern-js/utils';
3
+ import { useResolvedConfigContext } from '@modern-js/core';
4
+ import esbuild from 'esbuild';
5
+ import { getCommand } from "../utils/commands";
3
6
  import * as templates from "./templates";
4
- import { getClientRoutes } from "./getClientRoutes";
7
+ import { getClientRoutes, getClientRoutesLegacy } from "./getClientRoutes";
5
8
  import { FILE_SYSTEM_ROUTES_FILE_NAME, ENTRY_POINT_FILE_NAME, ENTRY_BOOTSTRAP_FILE_NAME } from "./constants";
6
9
  import { getDefaultImports } from "./utils";
7
-
10
+ import { walk } from "./nestedRoutes";
8
11
  const createImportSpecifier = specifiers => {
9
12
  let defaults = '';
10
13
  const named = [];
11
-
12
14
  for (const {
13
15
  local,
14
16
  imported
@@ -21,7 +23,6 @@ const createImportSpecifier = specifiers => {
21
23
  named.push(imported);
22
24
  }
23
25
  }
24
-
25
26
  if (defaults && named.length) {
26
27
  return `${defaults}, { ${named.join(', ')} }`;
27
28
  } else if (defaults) {
@@ -30,12 +31,10 @@ const createImportSpecifier = specifiers => {
30
31
  return `{ ${named.join(', ')} }`;
31
32
  }
32
33
  };
33
-
34
34
  export const createImportStatements = statements => {
35
35
  // merge import statements with the same value.
36
36
  const deDuplicated = [];
37
37
  const seen = new Map();
38
-
39
38
  for (const {
40
39
  value,
41
40
  specifiers,
@@ -50,71 +49,162 @@ export const createImportStatements = statements => {
50
49
  seen.set(value, specifiers);
51
50
  } else {
52
51
  var _deDuplicated$modifyI, _deDuplicated$modifyI2;
53
-
54
- seen.get(value).push(...specifiers); // make "initialize" param can be connected when multiple plugins were imported from same package
55
-
52
+ seen.get(value).push(...specifiers);
53
+ // make "initialize" param can be connected when multiple plugins were imported from same package
56
54
  const modifyIndex = deDuplicated.findIndex(v => v.value === value);
57
55
  const originInitialize = (_deDuplicated$modifyI = (_deDuplicated$modifyI2 = deDuplicated[modifyIndex]) === null || _deDuplicated$modifyI2 === void 0 ? void 0 : _deDuplicated$modifyI2.initialize) !== null && _deDuplicated$modifyI !== void 0 ? _deDuplicated$modifyI : '';
58
56
  deDuplicated[modifyIndex].initialize = originInitialize.concat(`\n${initialize || ''}`);
59
57
  }
60
58
  }
61
-
62
59
  return deDuplicated.map(({
63
60
  value,
64
61
  specifiers,
65
62
  initialize
66
63
  }) => `import ${createImportSpecifier(specifiers)} from '${value}';\n${initialize || ''}`).join('\n');
67
64
  };
65
+ const buildLoader = async (entry, outfile) => {
66
+ const loader = {
67
+ '.js': 'jsx',
68
+ '.ts': 'tsx'
69
+ };
70
+ const EXTERNAL_REGEXP = /^[^./]|^\.[^./]|^\.\.[^/]/;
71
+ const command = getCommand();
72
+ await esbuild.build({
73
+ format: 'cjs',
74
+ platform: 'node',
75
+ target: 'esnext',
76
+ loader,
77
+ watch: command === 'dev' && {},
78
+ bundle: true,
79
+ logLevel: 'error',
80
+ entryPoints: [entry],
81
+ outfile,
82
+ plugins: [{
83
+ name: 'make-all-packages-external',
84
+ setup(build) {
85
+ // https://github.com/evanw/esbuild/issues/619#issuecomment-751995294
86
+ build.onResolve({
87
+ filter: EXTERNAL_REGEXP
88
+ }, args => {
89
+ let external = true;
90
+ // FIXME: windows external entrypoint
91
+ if (args.kind === 'entry-point') {
92
+ external = false;
93
+ }
94
+ return {
95
+ path: args.path,
96
+ external
97
+ };
98
+ });
99
+ }
100
+ }]
101
+ });
102
+ };
68
103
  export const generateCode = async (appContext, config, entrypoints, api) => {
104
+ var _config$runtime, _config$runtime$route;
69
105
  const {
70
106
  internalDirectory,
107
+ distDirectory,
71
108
  srcDirectory,
72
109
  internalDirAlias,
73
110
  internalSrcAlias
74
111
  } = appContext;
75
112
  const hookRunners = api.useHookRunners();
113
+ const islegacy = Boolean(config === null || config === void 0 ? void 0 : (_config$runtime = config.runtime) === null || _config$runtime === void 0 ? void 0 : (_config$runtime$route = _config$runtime.router) === null || _config$runtime$route === void 0 ? void 0 : _config$runtime$route.legacy);
76
114
  const {
77
- output: {
78
- mountId
79
- }
80
- } = config;
81
-
82
- for (const entrypoint of entrypoints) {
115
+ mountId
116
+ } = config.output;
117
+ const getRoutes = islegacy ? getClientRoutesLegacy : getClientRoutes;
118
+ await Promise.all(entrypoints.map(generateEntryCode));
119
+ async function generateEntryCode(entrypoint) {
83
120
  const {
84
121
  entryName,
85
122
  isAutoMount,
86
123
  customBootstrap,
87
124
  fileSystemRoutes
88
125
  } = entrypoint;
89
-
90
126
  if (isAutoMount) {
91
127
  // generate routes file for file system routes entrypoint.
92
128
  if (fileSystemRoutes) {
93
- const initialRoutes = getClientRoutes({
94
- entrypoint,
95
- srcDirectory,
96
- srcAlias: internalSrcAlias,
97
- internalDirectory,
98
- internalDirAlias
99
- });
129
+ let initialRoutes = [];
130
+ let nestedRoute = null;
131
+ if (entrypoint.entry) {
132
+ initialRoutes = getRoutes({
133
+ entrypoint,
134
+ srcDirectory,
135
+ srcAlias: internalSrcAlias,
136
+ internalDirectory,
137
+ internalDirAlias
138
+ });
139
+ }
140
+ if (entrypoint.nestedRoutesEntry) {
141
+ if (!islegacy) {
142
+ nestedRoute = await walk(entrypoint.nestedRoutesEntry, entrypoint.nestedRoutesEntry, {
143
+ name: internalSrcAlias,
144
+ basename: srcDirectory
145
+ }, entrypoint.entryName);
146
+ if (nestedRoute) {
147
+ initialRoutes.unshift(nestedRoute);
148
+ }
149
+ } else {
150
+ logger.error('Nested routes is not supported in legacy mode.');
151
+ // eslint-disable-next-line no-process-exit
152
+ process.exit(1);
153
+ }
154
+ }
100
155
  const {
101
156
  routes
102
157
  } = await hookRunners.modifyFileSystemRoutes({
103
158
  entrypoint,
104
159
  routes: initialRoutes
105
160
  });
161
+ const config = useResolvedConfigContext();
162
+ const ssr = config === null || config === void 0 ? void 0 : config.server.ssr;
163
+ let mode;
164
+ if (ssr) {
165
+ mode = typeof ssr === 'object' ? ssr.mode || 'string' : 'string';
166
+ } else {
167
+ mode = false;
168
+ }
169
+ if (mode === 'stream') {
170
+ const hasPageRoute = routes.some(route => 'type' in route && route.type === 'page');
171
+ if (hasPageRoute) {
172
+ logger.error('streaming ssr is not supported when pages dir exists');
173
+ // eslint-disable-next-line no-process-exit
174
+ process.exit(1);
175
+ }
176
+ }
106
177
  const {
107
178
  code
108
179
  } = await hookRunners.beforeGenerateRoutes({
109
180
  entrypoint,
110
181
  code: templates.fileSystemRoutes({
111
- routes
182
+ routes,
183
+ ssrMode: mode,
184
+ nestedRoutesEntry: entrypoint.nestedRoutesEntry,
185
+ entryName: entrypoint.entryName
112
186
  })
113
187
  });
114
- fs.outputFileSync(path.resolve(internalDirectory, `./${entryName}/${FILE_SYSTEM_ROUTES_FILE_NAME}`), code, 'utf8');
115
- } // call modifyEntryImports hook
116
188
 
189
+ // extract nested router loaders
190
+ if (entrypoint.nestedRoutesEntry) {
191
+ const routesServerFile = path.join(internalDirectory, entryName, 'routes.server.js');
192
+ const outputRoutesServerFile = path.join(distDirectory, 'loader-routes', entryName, 'index.js');
193
+ const code = templates.routesForServer({
194
+ routes: routes,
195
+ alias: {
196
+ name: internalSrcAlias,
197
+ basename: srcDirectory
198
+ }
199
+ });
200
+ await fs.ensureFile(routesServerFile);
201
+ await fs.writeFile(routesServerFile, code);
202
+ await buildLoader(routesServerFile, outputRoutesServerFile);
203
+ }
204
+ fs.outputFileSync(path.resolve(internalDirectory, `./${entryName}/${FILE_SYSTEM_ROUTES_FILE_NAME}`), code, 'utf8');
205
+ }
117
206
 
207
+ // call modifyEntryImports hook
118
208
  const {
119
209
  imports: importStatements
120
210
  } = await hookRunners.modifyEntryImports({
@@ -126,15 +216,17 @@ export const generateCode = async (appContext, config, entrypoints, api) => {
126
216
  internalDirAlias,
127
217
  internalDirectory
128
218
  })
129
- }); // call modifyEntryRuntimePlugins hook
219
+ });
130
220
 
221
+ // call modifyEntryRuntimePlugins hook
131
222
  const {
132
223
  plugins
133
224
  } = await hookRunners.modifyEntryRuntimePlugins({
134
225
  entrypoint,
135
226
  plugins: []
136
- }); // call modifyEntryRenderFunction hook
227
+ });
137
228
 
229
+ // call modifyEntryRenderFunction hook
138
230
  const {
139
231
  code: renderFunction
140
232
  } = await hookRunners.modifyEntryRenderFunction({
@@ -144,8 +236,9 @@ export const generateCode = async (appContext, config, entrypoints, api) => {
144
236
  customBootstrap,
145
237
  fileSystemRoutes
146
238
  })
147
- }); // call modifyEntryExport hook
239
+ });
148
240
 
241
+ // call modifyEntryExport hook
149
242
  const {
150
243
  exportStatement
151
244
  } = await hookRunners.modifyEntryExport({
@@ -159,8 +252,9 @@ export const generateCode = async (appContext, config, entrypoints, api) => {
159
252
  exportStatement
160
253
  });
161
254
  const entryFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_POINT_FILE_NAME}`);
162
- entrypoint.entry = entryFile; // generate entry file.
255
+ entrypoint.entry = entryFile;
163
256
 
257
+ // generate entry file.
164
258
  if (config.source.enableAsyncEntry) {
165
259
  const {
166
260
  code: asyncEntryCode