@esmx/rspack 3.0.0-rc.11 → 3.0.0-rc.111

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 (76) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +48 -20
  3. package/README.zh-CN.md +57 -0
  4. package/dist/index.d.ts +2 -4
  5. package/dist/index.mjs +4 -4
  6. package/dist/module-link/config.d.ts +5 -0
  7. package/dist/module-link/config.mjs +100 -0
  8. package/dist/module-link/config1.d.ts +3 -0
  9. package/dist/module-link/config1.mjs +16 -0
  10. package/dist/module-link/config2.d.ts +3 -0
  11. package/dist/module-link/config2.mjs +17 -0
  12. package/dist/module-link/index.d.ts +4 -0
  13. package/dist/module-link/index.mjs +8 -0
  14. package/dist/module-link/manifest-plugin.d.ts +14 -0
  15. package/dist/module-link/manifest-plugin.mjs +141 -0
  16. package/dist/module-link/parse.d.ts +2 -0
  17. package/dist/module-link/parse.mjs +24 -0
  18. package/dist/module-link/types.d.ts +25 -0
  19. package/dist/rspack/app.d.ts +183 -0
  20. package/dist/{app.mjs → rspack/app.mjs} +18 -46
  21. package/dist/rspack/build-target.d.ts +7 -0
  22. package/dist/rspack/build-target.mjs +0 -0
  23. package/dist/{config.d.ts → rspack/chain-config.d.ts} +3 -4
  24. package/dist/rspack/chain-config.mjs +113 -0
  25. package/dist/rspack/index.d.ts +3 -0
  26. package/dist/rspack/index.mjs +4 -0
  27. package/dist/rspack/loader.d.ts +9 -0
  28. package/dist/{loader.mjs → rspack/loader.mjs} +2 -22
  29. package/dist/rspack/pack.d.ts +9 -0
  30. package/dist/{pack.mjs → rspack/pack.mjs} +33 -25
  31. package/dist/rspack/pack.test.d.ts +1 -0
  32. package/dist/rspack/pack.test.mjs +180 -0
  33. package/dist/rspack/utils/rsbuild.d.ts +6 -0
  34. package/dist/{utils → rspack/utils}/rsbuild.mjs +7 -37
  35. package/dist/rspack-html/index.d.ts +168 -0
  36. package/dist/rspack-html/index.mjs +160 -0
  37. package/dist/rspack-html/target-setting.d.ts +17 -0
  38. package/dist/rspack-html/target-setting.mjs +31 -0
  39. package/dist/rspack-html/target-setting.test.d.ts +1 -0
  40. package/dist/rspack-html/target-setting.test.mjs +105 -0
  41. package/package.json +23 -21
  42. package/src/index.ts +7 -6
  43. package/src/module-link/config.ts +157 -0
  44. package/src/module-link/config1.ts +24 -0
  45. package/src/module-link/config2.ts +28 -0
  46. package/src/module-link/index.ts +19 -0
  47. package/src/module-link/manifest-plugin.ts +179 -0
  48. package/src/module-link/parse.ts +31 -0
  49. package/src/module-link/types.ts +31 -0
  50. package/src/{app.ts → rspack/app.ts} +104 -107
  51. package/src/rspack/build-target.ts +7 -0
  52. package/src/rspack/chain-config.ts +165 -0
  53. package/src/rspack/index.ts +8 -0
  54. package/src/{loader.ts → rspack/loader.ts} +3 -22
  55. package/src/rspack/pack.test.ts +215 -0
  56. package/src/rspack/pack.ts +101 -0
  57. package/src/{utils → rspack/utils}/rsbuild.ts +11 -40
  58. package/src/rspack-html/index.ts +495 -0
  59. package/src/rspack-html/target-setting.test.ts +123 -0
  60. package/src/rspack-html/target-setting.ts +52 -0
  61. package/dist/app.d.ts +0 -160
  62. package/dist/build-target.d.ts +0 -8
  63. package/dist/config.mjs +0 -142
  64. package/dist/html-app.d.ts +0 -299
  65. package/dist/html-app.mjs +0 -214
  66. package/dist/loader.d.ts +0 -30
  67. package/dist/pack.d.ts +0 -2
  68. package/dist/utils/rsbuild.d.ts +0 -12
  69. package/src/build-target.ts +0 -8
  70. package/src/config.ts +0 -171
  71. package/src/html-app.ts +0 -560
  72. package/src/pack.ts +0 -79
  73. /package/dist/{build-target.mjs → module-link/types.mjs} +0 -0
  74. /package/dist/{utils → rspack/utils}/index.d.ts +0 -0
  75. /package/dist/{utils → rspack/utils}/index.mjs +0 -0
  76. /package/src/{utils → rspack/utils}/index.ts +0 -0
package/dist/app.d.ts DELETED
@@ -1,160 +0,0 @@
1
- import { type App, type Esmx } from '@esmx/core';
2
- import type { RspackOptions } from '@rspack/core';
3
- import type { BuildTarget } from './build-target';
4
- /**
5
- * Rspack 应用配置上下文接口。
6
- *
7
- * 该接口提供了在配置钩子函数中可以访问的上下文信息,允许你:
8
- * - 访问 Esmx 框架实例
9
- * - 获取当前的构建目标(client/server/node)
10
- * - 修改 Rspack 配置
11
- * - 访问应用选项
12
- *
13
- * @example
14
- * ```ts
15
- * // entry.node.ts
16
- * export default {
17
- * async devApp(esmx) {
18
- * return import('@esmx/rspack').then((m) =>
19
- * m.createRspackApp(esmx, {
20
- * // 配置钩子函数
21
- * config(context) {
22
- * // 访问构建目标
23
- * if (context.buildTarget === 'client') {
24
- * // 修改客户端构建配置
25
- * context.config.optimization = {
26
- * ...context.config.optimization,
27
- * splitChunks: {
28
- * chunks: 'all'
29
- * }
30
- * };
31
- * }
32
- * }
33
- * })
34
- * );
35
- * }
36
- * };
37
- * ```
38
- */
39
- export interface RspackAppConfigContext {
40
- /**
41
- * Esmx 框架实例。
42
- * 可用于访问框架提供的 API 和工具函数。
43
- */
44
- esmx: Esmx;
45
- /**
46
- * 当前的构建目标。
47
- * - 'client': 客户端构建,生成浏览器可执行的代码
48
- * - 'server': 服务端构建,生成 SSR 渲染代码
49
- * - 'node': Node.js 构建,生成服务器入口代码
50
- */
51
- buildTarget: BuildTarget;
52
- /**
53
- * Rspack 编译配置对象。
54
- * 你可以在配置钩子中修改这个对象来自定义构建行为。
55
- */
56
- config: RspackOptions;
57
- /**
58
- * 创建应用时传入的选项对象。
59
- */
60
- options: RspackAppOptions;
61
- }
62
- /**
63
- * Rspack 应用配置选项接口。
64
- *
65
- * 该接口提供了创建 Rspack 应用时可以使用的配置选项,包括:
66
- * - 代码压缩选项
67
- * - Rspack 配置钩子函数
68
- *
69
- * @example
70
- * ```ts
71
- * // entry.node.ts
72
- * export default {
73
- * async devApp(esmx) {
74
- * return import('@esmx/rspack').then((m) =>
75
- * m.createRspackApp(esmx, {
76
- * // 禁用代码压缩
77
- * minimize: false,
78
- * // 自定义 Rspack 配置
79
- * config(context) {
80
- * if (context.buildTarget === 'client') {
81
- * context.config.optimization.splitChunks = {
82
- * chunks: 'all'
83
- * };
84
- * }
85
- * }
86
- * })
87
- * );
88
- * }
89
- * };
90
- * ```
91
- */
92
- export interface RspackAppOptions {
93
- /**
94
- * 是否启用代码压缩。
95
- *
96
- * - true: 启用代码压缩
97
- * - false: 禁用代码压缩
98
- * - undefined: 根据环境自动判断(生产环境启用,开发环境禁用)
99
- *
100
- * @default undefined
101
- */
102
- minimize?: boolean;
103
- /**
104
- * Rspack 配置钩子函数。
105
- *
106
- * 在构建开始前调用,可以通过该函数修改 Rspack 的编译配置。
107
- * 支持针对不同的构建目标(client/server/node)进行差异化配置。
108
- *
109
- * @param context - 配置上下文,包含框架实例、构建目标和配置对象
110
- */
111
- config?: (context: RspackAppConfigContext) => void;
112
- }
113
- /**
114
- * 创建 Rspack 应用实例。
115
- *
116
- * 该函数根据运行环境(开发/生产)创建不同的应用实例:
117
- * - 开发环境:配置热更新中间件和实时渲染
118
- * - 生产环境:配置构建任务
119
- *
120
- * @param esmx - Esmx 框架实例
121
- * @param options - Rspack 应用配置选项
122
- * @returns 返回应用实例
123
- *
124
- * @example
125
- * ```ts
126
- * // entry.node.ts
127
- * export default {
128
- * async devApp(esmx) {
129
- * return import('@esmx/rspack').then((m) =>
130
- * m.createRspackApp(esmx, {
131
- * config(context) {
132
- * // 配置 loader 处理不同类型的文件
133
- * context.config.module = {
134
- * rules: [
135
- * {
136
- * test: /\.ts$/,
137
- * exclude: [/node_modules/],
138
- * loader: 'builtin:swc-loader',
139
- * options: {
140
- * jsc: {
141
- * parser: {
142
- * syntax: 'typescript'
143
- * }
144
- * }
145
- * }
146
- * },
147
- * {
148
- * test: /\.css$/,
149
- * use: ['style-loader', 'css-loader']
150
- * }
151
- * ]
152
- * };
153
- * }
154
- * })
155
- * );
156
- * }
157
- * };
158
- * ```
159
- */
160
- export declare function createRspackApp(esmx: Esmx, options?: RspackAppOptions): Promise<App>;
@@ -1,8 +0,0 @@
1
- /**
2
- * 构建目标环境类型
3
- * @description 定义了应用程序的构建目标环境,用于配置构建过程中的特定优化和功能
4
- * - node: 构建为 Node.js 环境运行的代码
5
- * - client: 构建为浏览器环境运行的代码
6
- * - server: 构建为服务端环境运行的代码
7
- */
8
- export type BuildTarget = 'node' | 'client' | 'server';
package/dist/config.mjs DELETED
@@ -1,142 +0,0 @@
1
- import { moduleLinkPlugin } from "@esmx/rspack-module-link-plugin";
2
- import {
3
- rspack
4
- } from "@rspack/core";
5
- import nodeExternals from "webpack-node-externals";
6
- export function createRspackConfig(esmx, buildTarget, options) {
7
- const isWebApp = buildTarget === "client" || buildTarget === "server";
8
- const isHot = buildTarget === "client" && !esmx.isProd;
9
- return {
10
- /**
11
- * 项目根目录,不可修改
12
- */
13
- context: esmx.root,
14
- entry: (() => {
15
- const importPaths = [];
16
- switch (buildTarget) {
17
- case "client":
18
- importPaths.push(esmx.resolvePath("src/entry.client.ts"));
19
- isHot && importPaths.push(
20
- `${resolve("webpack-hot-middleware/client")}?path=${esmx.basePath}hot-middleware&timeout=5000&overlay=false`
21
- );
22
- break;
23
- case "server":
24
- importPaths.push(esmx.resolvePath("src/entry.server.ts"));
25
- break;
26
- case "node":
27
- importPaths.push(esmx.resolvePath("src/entry.node.ts"));
28
- break;
29
- }
30
- return {
31
- [`./src/entry.${buildTarget}`]: {
32
- import: importPaths
33
- }
34
- };
35
- })(),
36
- output: {
37
- clean: esmx.isProd,
38
- module: true,
39
- chunkFormat: esmx.isProd ? "module" : void 0,
40
- chunkLoading: esmx.isProd ? "import" : void 0,
41
- chunkFilename: esmx.isProd ? "chunks/[name].[contenthash:8].final.js" : "chunks/[name].js",
42
- library: {
43
- type: esmx.isProd ? "modern-module" : "module"
44
- },
45
- filename: buildTarget !== "node" && esmx.isProd ? "[name].[contenthash:8].final.js" : "[name].js",
46
- cssFilename: esmx.isProd ? "[name].[contenthash:8].final.css" : "[name].css",
47
- cssChunkFilename: esmx.isProd ? "chunks/[name].[contenthash:8].final.css" : "chunks/[name].css",
48
- publicPath: buildTarget === "client" ? "auto" : `${esmx.basePathPlaceholder}${esmx.basePath}`,
49
- uniqueName: esmx.varName,
50
- hotUpdateChunkFilename: "__hot__/[id].[fullhash].hot-update.js",
51
- hotUpdateMainFilename: "__hot__/[runtime].[fullhash].hot-update.json",
52
- path: (() => {
53
- switch (buildTarget) {
54
- case "client":
55
- return esmx.resolvePath("dist/client");
56
- case "server":
57
- return esmx.resolvePath("dist/server");
58
- case "node":
59
- return esmx.resolvePath("dist/node");
60
- }
61
- })(),
62
- environment: {
63
- nodePrefixForCoreModules: true
64
- }
65
- },
66
- // 默认插件,不可修改
67
- plugins: (() => {
68
- return [
69
- // 进度条插件
70
- new rspack.ProgressPlugin({
71
- prefix: buildTarget
72
- }),
73
- // 模块链接插件
74
- isWebApp ? moduleLinkPlugin(esmx.moduleConfig) : false,
75
- // 热更新插件
76
- isHot ? new rspack.HotModuleReplacementPlugin() : false
77
- ];
78
- })(),
79
- module: {
80
- parser: {
81
- javascript: {
82
- url: buildTarget === "client" ? true : "relative",
83
- importMeta: false,
84
- strictExportPresence: true
85
- }
86
- },
87
- generator: {
88
- asset: {
89
- emit: buildTarget === "client"
90
- },
91
- "asset/resource": {
92
- emit: buildTarget === "client"
93
- }
94
- },
95
- rules: []
96
- },
97
- resolve: {
98
- alias: {
99
- [esmx.name]: esmx.root
100
- }
101
- },
102
- optimization: {
103
- minimize: options.minimize ?? esmx.isProd,
104
- avoidEntryIife: esmx.isProd,
105
- concatenateModules: esmx.isProd,
106
- emitOnErrors: true,
107
- splitChunks: {
108
- chunks: "async"
109
- }
110
- },
111
- externalsPresets: {
112
- web: buildTarget === "client",
113
- node: buildTarget === "server" || buildTarget === "node"
114
- },
115
- externalsType: "module-import",
116
- externals: (() => {
117
- if (buildTarget === "node") {
118
- return [
119
- // @ts-ignore
120
- nodeExternals({
121
- // @ts-ignore
122
- importType: "module-import"
123
- })
124
- ];
125
- }
126
- return [];
127
- })(),
128
- experiments: {
129
- outputModule: true,
130
- parallelCodeSplitting: true,
131
- rspackFuture: {
132
- bundlerInfo: { force: false }
133
- }
134
- },
135
- target: buildTarget === "client" ? "web" : "node22.6",
136
- mode: esmx.isProd ? "production" : "development",
137
- cache: !esmx.isProd
138
- };
139
- }
140
- function resolve(name) {
141
- return new URL(import.meta.resolve(name)).pathname;
142
- }
@@ -1,299 +0,0 @@
1
- import type { Esmx } from '@esmx/core';
2
- import { type SwcLoaderOptions } from '@rspack/core';
3
- import { type RspackAppOptions } from './app';
4
- import type { BuildTarget } from './build-target';
5
- import { RSPACK_LOADER } from './loader';
6
- /**
7
- * Rspack HTML 应用配置选项接口
8
- *
9
- * @example
10
- * ```ts
11
- * // entry.node.ts
12
- * export default {
13
- * async devApp(esmx) {
14
- * return import('@esmx/rspack').then((m) =>
15
- * m.createRspackHtmlApp(esmx, {
16
- * // 将 CSS 输出到独立的 CSS 文件中
17
- * css: 'css',
18
- * // 自定义 loader
19
- * loaders: {
20
- * styleLoader: 'vue-style-loader'
21
- * },
22
- * // 配置 CSS 相关 loader
23
- * styleLoader: {
24
- * injectType: 'singletonStyleTag'
25
- * },
26
- * cssLoader: {
27
- * modules: true
28
- * },
29
- * // 配置构建目标
30
- * target: {
31
- * web: ['chrome>=87'],
32
- * node: ['node>=16']
33
- * },
34
- * // 定义全局常量
35
- * definePlugin: {
36
- * 'process.env.APP_ENV': JSON.stringify('production')
37
- * }
38
- * })
39
- * );
40
- * }
41
- * };
42
- * ```
43
- */
44
- export interface RspackHtmlAppOptions extends RspackAppOptions {
45
- /**
46
- * CSS 输出模式配置
47
- *
48
- * @default 根据环境自动选择:
49
- * - 生产环境: 'css',将CSS输出到独立文件中,有利于缓存和并行加载
50
- * - 开发环境: 'js',将CSS打包到JS中以支持热更新(HMR),实现样式的即时更新
51
- *
52
- * - 'css': 将 CSS 输出到独立的 CSS 文件中
53
- * - 'js': 将 CSS 打包到 JS 文件中,运行时动态插入样式
54
- * - false: 关闭默认的 CSS 处理配置,需要手动配置 loader 规则
55
- *
56
- * @example
57
- * ```ts
58
- * // 使用环境默认配置
59
- * css: undefined
60
- *
61
- * // 强制输出到独立的 CSS 文件
62
- * css: 'css'
63
- *
64
- * // 强制打包到 JS 中
65
- * css: 'js'
66
- *
67
- * // 自定义 CSS 处理
68
- * css: false
69
- * ```
70
- */
71
- css?: 'css' | 'js' | false;
72
- /**
73
- * 自定义 loader 配置
74
- *
75
- * 允许替换默认的 loader 实现,可用于切换到特定框架的 loader
76
- *
77
- * @example
78
- * ```ts
79
- * // 使用 Vue 的 style-loader
80
- * loaders: {
81
- * styleLoader: 'vue-style-loader'
82
- * }
83
- * ```
84
- */
85
- loaders?: Partial<Record<keyof typeof RSPACK_LOADER, string>>;
86
- /**
87
- * style-loader 配置项
88
- *
89
- * 用于配置样式注入方式,完整选项参考:
90
- * https://github.com/webpack-contrib/style-loader
91
- *
92
- * @example
93
- * ```ts
94
- * styleLoader: {
95
- * injectType: 'singletonStyleTag',
96
- * attributes: { id: 'app-styles' }
97
- * }
98
- * ```
99
- */
100
- styleLoader?: Record<string, any>;
101
- /**
102
- * css-loader 配置项
103
- *
104
- * 用于配置 CSS 模块化、URL 解析等,完整选项参考:
105
- * https://github.com/webpack-contrib/css-loader
106
- *
107
- * @example
108
- * ```ts
109
- * cssLoader: {
110
- * modules: true,
111
- * url: false
112
- * }
113
- * ```
114
- */
115
- cssLoader?: Record<string, any>;
116
- /**
117
- * less-loader 配置项
118
- *
119
- * 用于配置 Less 编译选项,完整选项参考:
120
- * https://github.com/webpack-contrib/less-loader
121
- *
122
- * @example
123
- * ```ts
124
- * lessLoader: {
125
- * lessOptions: {
126
- * javascriptEnabled: true,
127
- * modifyVars: { '@primary-color': '#1DA57A' }
128
- * }
129
- * }
130
- * ```
131
- */
132
- lessLoader?: Record<string, any>;
133
- /**
134
- * style-resources-loader 配置项
135
- *
136
- * 用于自动注入全局的样式资源,完整选项参考:
137
- * https://github.com/yenshih/style-resources-loader
138
- *
139
- * @example
140
- * ```ts
141
- * styleResourcesLoader: {
142
- * patterns: [
143
- * './src/styles/variables.less',
144
- * './src/styles/mixins.less'
145
- * ]
146
- * }
147
- * ```
148
- */
149
- styleResourcesLoader?: Record<string, any>;
150
- /**
151
- * SWC loader 配置项
152
- *
153
- * 用于配置 TypeScript/JavaScript 编译选项,完整选项参考:
154
- * https://rspack.dev/guide/features/builtin-swc-loader
155
- *
156
- * @example
157
- * ```ts
158
- * swcLoader: {
159
- * jsc: {
160
- * parser: {
161
- * syntax: 'typescript',
162
- * decorators: true
163
- * },
164
- * transform: {
165
- * legacyDecorator: true
166
- * }
167
- * }
168
- * }
169
- * ```
170
- */
171
- swcLoader?: SwcLoaderOptions;
172
- /**
173
- * DefinePlugin 配置项
174
- *
175
- * 用于定义编译时的全局常量,支持针对不同构建目标设置不同的值
176
- * 完整说明参考: https://rspack.dev/plugins/webpack/define-plugin
177
- *
178
- * @example
179
- * ```ts
180
- * // 统一的值
181
- * definePlugin: {
182
- * 'process.env.APP_ENV': JSON.stringify('production')
183
- * }
184
- *
185
- * // 针对不同构建目标的值
186
- * definePlugin: {
187
- * 'process.env.IS_SERVER': {
188
- * server: 'true',
189
- * client: 'false'
190
- * }
191
- * }
192
- * ```
193
- */
194
- definePlugin?: Record<string, string | Partial<Record<BuildTarget, string>>>;
195
- /**
196
- * 构建目标配置
197
- *
198
- * 用于设置代码的目标运行环境,影响代码的编译降级和 polyfill 注入
199
- *
200
- * @example
201
- * ```ts
202
- * target: {
203
- * // 浏览器构建目标
204
- * web: ['chrome>=87', 'firefox>=78', 'safari>=14'],
205
- * // Node.js 构建目标
206
- * node: ['node>=16']
207
- * }
208
- * ```
209
- */
210
- target?: {
211
- /**
212
- * 浏览器构建目标
213
- *
214
- * @default ['chrome>=87', 'edge>=88', 'firefox>=78', 'safari>=14']
215
- */
216
- web?: string[];
217
- /**
218
- * Node.js 构建目标
219
- *
220
- * @default ['node>=22.6']
221
- */
222
- node?: string[];
223
- };
224
- }
225
- /**
226
- * 创建 Rspack HTML 应用实例。
227
- *
228
- * 该函数提供了完整的 Web 应用构建配置,支持以下资源类型的处理:
229
- * - TypeScript/JavaScript
230
- * - Web Worker
231
- * - JSON
232
- * - CSS/Less
233
- * - 视频/图片
234
- * - 字体文件
235
- *
236
- * @param esmx - Esmx 框架实例
237
- * @param options - Rspack HTML 应用配置选项
238
- * @returns 返回应用实例,包含中间件、渲染函数和构建函数
239
- *
240
- * @example
241
- * ```ts
242
- * // 开发环境配置
243
- * // entry.node.ts
244
- * export default {
245
- * async devApp(esmx) {
246
- * return import('@esmx/rspack').then((m) =>
247
- * m.createRspackHtmlApp(esmx, {
248
- * // 配置 CSS 输出模式
249
- * css: 'css',
250
- * // 配置 TypeScript 编译选项
251
- * swcLoader: {
252
- * jsc: {
253
- * parser: {
254
- * syntax: 'typescript',
255
- * decorators: true
256
- * }
257
- * }
258
- * },
259
- * // 配置构建目标
260
- * target: {
261
- * web: ['chrome>=87'],
262
- * node: ['node>=16']
263
- * },
264
- * // 自定义 Rspack 配置
265
- * config({ config }) {
266
- * // 添加自定义 loader
267
- * config.module.rules.push({
268
- * test: /\.vue$/,
269
- * loader: 'vue-loader'
270
- * });
271
- * }
272
- * })
273
- * );
274
- * }
275
- * };
276
- *
277
- * // 生产环境配置
278
- * // entry.node.ts
279
- * export default {
280
- * async buildApp(esmx) {
281
- * return import('@esmx/rspack').then((m) =>
282
- * m.createRspackHtmlApp(esmx, {
283
- * // 启用代码压缩
284
- * minimize: true,
285
- * // 配置全局常量
286
- * definePlugin: {
287
- * 'process.env.NODE_ENV': JSON.stringify('production'),
288
- * 'process.env.IS_SERVER': {
289
- * server: 'true',
290
- * client: 'false'
291
- * }
292
- * }
293
- * })
294
- * );
295
- * }
296
- * };
297
- * ```
298
- */
299
- export declare function createRspackHtmlApp(esmx: Esmx, options?: RspackHtmlAppOptions): Promise<import("@esmx/core").App>;