@ikaros-cli/ikaros 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin.mjs +1 -1
- package/dist/index.d.mts +179 -174
- package/dist/index.mjs +5 -10
- package/package.json +10 -9
package/bin.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
2
|
+
import './dist/index.mjs'
|
package/dist/index.d.mts
CHANGED
|
@@ -1,236 +1,241 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import
|
|
3
|
-
import * as
|
|
4
|
-
import
|
|
1
|
+
import * as _rspack_core2 from "@rspack/core";
|
|
2
|
+
import { DefinePluginOptions, LightningcssLoaderOptions, Loader, ModuleFederationPluginOptions, Plugin } from "@rspack/core";
|
|
3
|
+
import * as _rspack_dev_server0 from "@rspack/dev-server";
|
|
4
|
+
import * as https1 from "https";
|
|
5
5
|
|
|
6
|
+
//#region src/types/env.d.ts
|
|
6
7
|
interface ImportMetaBaseEnv {
|
|
7
8
|
/** 命令行所指定的 mode (-m, --mode) */
|
|
8
|
-
MODE?: string
|
|
9
|
+
MODE?: string;
|
|
9
10
|
/** 路径前缀 */
|
|
10
|
-
BASE?: string
|
|
11
|
+
BASE?: string;
|
|
11
12
|
/** 平台 */
|
|
12
|
-
PLATFORM: 'web'
|
|
13
|
+
PLATFORM: 'web';
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
type ImportMetaEnv = Record<string, any>
|
|
16
|
-
|
|
15
|
+
type ImportMetaEnv = Record<string, any>;
|
|
17
16
|
interface ImportMeta {
|
|
18
|
-
readonly env: Readonly<ImportMetaEnv & ImportMetaBaseEnv
|
|
17
|
+
readonly env: Readonly<ImportMetaEnv & ImportMetaBaseEnv>;
|
|
19
18
|
}
|
|
20
19
|
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/node/compile/base-compile-service.d.ts
|
|
21
22
|
/** 命令 */
|
|
22
23
|
declare const enum Command {
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
SERVER = "server",
|
|
25
|
+
BUILD = "build",
|
|
25
26
|
}
|
|
26
27
|
|
|
28
|
+
//#endregion
|
|
29
|
+
//#region src/node/utils/css-loaders-helper.d.ts
|
|
27
30
|
interface CssLoaderOptions {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
lightningcss?: LightningcssLoaderOptions;
|
|
32
|
+
sourceMap?: boolean;
|
|
33
|
+
less?: Record<string, any>;
|
|
34
|
+
sass?: Record<string, any>;
|
|
35
|
+
stylus?: Record<string, any>;
|
|
33
36
|
}
|
|
34
37
|
|
|
38
|
+
//#endregion
|
|
39
|
+
//#region src/node/utils/loader-plugin-helper.d.ts
|
|
35
40
|
type RspackExperiments = {
|
|
36
|
-
|
|
41
|
+
import: Record<string, unknown>[];
|
|
37
42
|
};
|
|
38
43
|
type Pages = {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
};
|
|
44
|
+
[key: string]: {
|
|
45
|
+
html: string;
|
|
46
|
+
entry: string;
|
|
47
|
+
library?: _rspack_core2.LibraryOptions;
|
|
48
|
+
options?: {
|
|
49
|
+
title: string;
|
|
50
|
+
inject: boolean;
|
|
51
|
+
meta: Record<string, string>;
|
|
48
52
|
};
|
|
49
|
-
};
|
|
50
|
-
|
|
53
|
+
};
|
|
54
|
+
}; //#endregion
|
|
55
|
+
//#region src/node/plugins/cdn-plugin.d.ts
|
|
51
56
|
interface CdnModule {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
name: string;
|
|
58
|
+
var?: string;
|
|
59
|
+
version?: string;
|
|
60
|
+
path?: string;
|
|
61
|
+
paths?: string[];
|
|
62
|
+
style?: string;
|
|
63
|
+
styles?: string[];
|
|
64
|
+
cssOnly?: boolean;
|
|
65
|
+
prodUrl?: string;
|
|
66
|
+
devUrl?: string;
|
|
62
67
|
}
|
|
63
68
|
interface CdnPluginOptions {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
sri?: boolean;
|
|
69
|
+
modules: CdnModule[];
|
|
70
|
+
prodUrl?: string;
|
|
71
|
+
devUrl?: string;
|
|
72
|
+
crossOrigin?: boolean | string;
|
|
69
73
|
}
|
|
70
74
|
|
|
75
|
+
//#endregion
|
|
76
|
+
//#region src/node/user-config.d.ts
|
|
71
77
|
/**
|
|
72
|
-
|
|
73
|
-
|
|
78
|
+
* 这里复写了 ModuleFederationPluginOptions,因为 ModuleFederationPluginOptions 是从 module-federation/sdk 导入的,remoteType和rspack的remoteType不一样
|
|
79
|
+
*/
|
|
74
80
|
interface ModuleFederationOptions extends Omit<ModuleFederationPluginOptions, 'remoteType'> {
|
|
75
|
-
|
|
81
|
+
remoteType?: 'var' | 'module' | 'assign' | 'this' | 'window' | 'self' | 'global' | 'commonjs' | 'commonjs2' | 'commonjs-module' | 'commonjs-static' | 'amd' | 'amd-require' | 'umd' | 'umd2' | 'jsonp' | 'system' | 'promise' | 'import' | 'script' | 'module-import' | 'node-commonjs';
|
|
76
82
|
}
|
|
77
83
|
interface UserConfig {
|
|
84
|
+
/**
|
|
85
|
+
* 编译的平台,该值影响底层优化逻辑
|
|
86
|
+
* @default 'pc'
|
|
87
|
+
* @future 该功能受限,目前仅支持 'pc'
|
|
88
|
+
*/
|
|
89
|
+
target?: 'pc' | 'mobile';
|
|
90
|
+
/**
|
|
91
|
+
* 页面配置
|
|
92
|
+
* @default
|
|
93
|
+
* {
|
|
94
|
+
* index: {
|
|
95
|
+
* html: path.join(context, 'index.html'),
|
|
96
|
+
* entry: path.join(context, 'src/index')
|
|
97
|
+
* }
|
|
98
|
+
* }
|
|
99
|
+
*/
|
|
100
|
+
pages?: Pages;
|
|
101
|
+
/**
|
|
102
|
+
* 可选页面启动,当pages为多个对象时,可选择启动哪些页面,当设置为false或者不设置时,启动所有页面
|
|
103
|
+
* @default false
|
|
104
|
+
*/
|
|
105
|
+
enablePages?: string[] | false;
|
|
106
|
+
/**
|
|
107
|
+
* 全局变量
|
|
108
|
+
* @default {}
|
|
109
|
+
*/
|
|
110
|
+
define?: DefinePluginOptions;
|
|
111
|
+
/**
|
|
112
|
+
* 模块联邦
|
|
113
|
+
* @see {@link https://module-federation.io/zh/blog/announcement.html}
|
|
114
|
+
* @default undefined
|
|
115
|
+
*/
|
|
116
|
+
moduleFederation?: ModuleFederationOptions | ModuleFederationOptions[];
|
|
117
|
+
/**
|
|
118
|
+
* 插件
|
|
119
|
+
* @see {@link https://rspack.dev/zh/guide/features/plugin}
|
|
120
|
+
*/
|
|
121
|
+
plugins?: Plugin | Plugin[];
|
|
122
|
+
/**
|
|
123
|
+
* loader
|
|
124
|
+
* @see {@link https://rspack.dev/zh/guide/features/loader}
|
|
125
|
+
*/
|
|
126
|
+
loaders?: Loader[];
|
|
127
|
+
/**
|
|
128
|
+
* RspackExperiments
|
|
129
|
+
* @default undefined
|
|
130
|
+
* @see {@link https://rspack.dev/zh/guide/features/builtin-swc-loader#rspackexperimentsimport}
|
|
131
|
+
* @see {@link rules https://www.npmjs.com/package/babel-plugin-import}
|
|
132
|
+
*/
|
|
133
|
+
experiments?: RspackExperiments;
|
|
134
|
+
/**
|
|
135
|
+
* cdn配置
|
|
136
|
+
* @default undefined
|
|
137
|
+
* @see {@link https://www.npmjs.com/package/webpack-cdn-plugin}
|
|
138
|
+
*/
|
|
139
|
+
cdnOptions?: CdnPluginOptions;
|
|
140
|
+
/**
|
|
141
|
+
* dev 服务相关 该对象下的值不影响 生产环境
|
|
142
|
+
*/
|
|
143
|
+
server?: {
|
|
78
144
|
/**
|
|
79
|
-
*
|
|
80
|
-
* @default
|
|
81
|
-
* @future 该功能受限,目前仅支持 'pc'
|
|
145
|
+
* 服务器端口号 空则自动获取
|
|
146
|
+
* @default undefined
|
|
82
147
|
*/
|
|
83
|
-
|
|
148
|
+
port?: number;
|
|
84
149
|
/**
|
|
85
|
-
*
|
|
86
|
-
* @
|
|
87
|
-
*
|
|
88
|
-
* index: {
|
|
89
|
-
* html: path.join(context, 'index.html'),
|
|
90
|
-
* entry: path.join(context, 'src/index')
|
|
91
|
-
* }
|
|
92
|
-
* }
|
|
150
|
+
* webpack-server 服务器代理
|
|
151
|
+
* @see {@link https://webpack.js.org/configuration/dev-server/#devserverproxy}
|
|
152
|
+
* @default undefined
|
|
93
153
|
*/
|
|
94
|
-
|
|
154
|
+
proxy?: _rspack_dev_server0.Configuration['proxy'];
|
|
95
155
|
/**
|
|
96
|
-
*
|
|
156
|
+
* https
|
|
157
|
+
* @see {@link https://webpack.js.org/configuration/dev-server/#devserverhttps}
|
|
97
158
|
* @default false
|
|
98
159
|
*/
|
|
99
|
-
|
|
160
|
+
https?: boolean | https1.ServerOptions;
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* css loader 配置
|
|
164
|
+
* @see {@link lightningcssOptions https://rspack.dev/zh/guide/features/builtin-lightningcss-loader#%E9%80%89%E9%A1%B9}
|
|
165
|
+
* @see {@link stylusOptions https://webpack.js.org/loaders/stylus-loader/#options}
|
|
166
|
+
* @see {@link lessOptions https://webpack.js.org/loaders/less-loader/#options}
|
|
167
|
+
* @see {@link sassOptions https://webpack.js.org/loaders/sass-loader/#options}
|
|
168
|
+
*/
|
|
169
|
+
css?: CssLoaderOptions;
|
|
170
|
+
/**
|
|
171
|
+
* 构建配置
|
|
172
|
+
*/
|
|
173
|
+
build?: {
|
|
100
174
|
/**
|
|
101
|
-
*
|
|
102
|
-
* @default
|
|
175
|
+
* 资源前缀,值得注意的是 './' 只会被原封不动的作为所有资源的前缀,如果你想根据html定位应该填 'auto'
|
|
176
|
+
* @default '/'
|
|
103
177
|
*/
|
|
104
|
-
|
|
178
|
+
base?: string;
|
|
105
179
|
/**
|
|
106
|
-
*
|
|
107
|
-
* @see {@link https://module-federation.io/zh/blog/announcement.html}
|
|
180
|
+
* 资产包裹目录,只在生产环境下生效
|
|
108
181
|
* @default undefined
|
|
109
182
|
*/
|
|
110
|
-
|
|
183
|
+
assetsDir?: string;
|
|
111
184
|
/**
|
|
112
|
-
*
|
|
113
|
-
* @
|
|
185
|
+
* 是否输出Gzip版,只在生产环境下生效
|
|
186
|
+
* @default false
|
|
114
187
|
*/
|
|
115
|
-
|
|
188
|
+
gzip?: boolean;
|
|
116
189
|
/**
|
|
117
|
-
*
|
|
118
|
-
* @
|
|
190
|
+
* 生成映射源代码文件,只在生产环境下生效
|
|
191
|
+
* @default false
|
|
119
192
|
*/
|
|
120
|
-
|
|
193
|
+
sourceMap?: boolean;
|
|
121
194
|
/**
|
|
122
|
-
*
|
|
123
|
-
* @default
|
|
124
|
-
* @see {@link https://rspack.dev/zh/guide/features/builtin-swc-loader#rspackexperimentsimport}
|
|
125
|
-
* @see {@link rules https://www.npmjs.com/package/babel-plugin-import}
|
|
195
|
+
* 输出的目录名称,只在生产环境下生效
|
|
196
|
+
* @default "dist"
|
|
126
197
|
*/
|
|
127
|
-
|
|
198
|
+
outDirName?: string;
|
|
128
199
|
/**
|
|
129
|
-
*
|
|
130
|
-
* @default
|
|
131
|
-
* @see {@link https://www.npmjs.com/package/webpack-cdn-plugin}
|
|
200
|
+
* 是否输出打包分析报告,只在生产环境下生效
|
|
201
|
+
* @default false
|
|
132
202
|
*/
|
|
133
|
-
|
|
203
|
+
outReport?: boolean;
|
|
134
204
|
/**
|
|
135
|
-
*
|
|
205
|
+
* 是否缓存编译结果
|
|
206
|
+
* @default false
|
|
136
207
|
*/
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* 服务器端口号 空则自动获取
|
|
140
|
-
* @default undefined
|
|
141
|
-
*/
|
|
142
|
-
port?: number;
|
|
143
|
-
/**
|
|
144
|
-
* webpack-server 服务器代理
|
|
145
|
-
* @see {@link https://webpack.js.org/configuration/dev-server/#devserverproxy}
|
|
146
|
-
* @default undefined
|
|
147
|
-
*/
|
|
148
|
-
proxy?: _rspack_dev_server.Configuration['proxy'];
|
|
149
|
-
/**
|
|
150
|
-
* https
|
|
151
|
-
* @see {@link https://webpack.js.org/configuration/dev-server/#devserverhttps}
|
|
152
|
-
* @default false
|
|
153
|
-
*/
|
|
154
|
-
https?: boolean | https.ServerOptions;
|
|
155
|
-
};
|
|
208
|
+
cache?: boolean;
|
|
156
209
|
/**
|
|
157
|
-
*
|
|
158
|
-
* @see {@link lightningcssOptions https://rspack.dev/zh/guide/features/builtin-lightningcss-loader#%E9%80%89%E9%A1%B9}
|
|
159
|
-
* @see {@link stylusOptions https://webpack.js.org/loaders/stylus-loader/#options}
|
|
160
|
-
* @see {@link lessOptions https://webpack.js.org/loaders/less-loader/#options}
|
|
161
|
-
* @see {@link sassOptions https://webpack.js.org/loaders/sass-loader/#options}
|
|
210
|
+
* 是否开启循环依赖检查
|
|
162
211
|
*/
|
|
163
|
-
|
|
212
|
+
dependencyCycleCheck?: boolean;
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* resolve
|
|
216
|
+
*/
|
|
217
|
+
resolve?: {
|
|
164
218
|
/**
|
|
165
|
-
*
|
|
219
|
+
* 路径别名
|
|
220
|
+
* @see {@link https://webpack.js.org/configuration/resolve/#resolvealias}
|
|
221
|
+
* @default {'@': path.join(context,'src')}
|
|
166
222
|
*/
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* 资源前缀,值得注意的是 './' 只会被原封不动的作为所有资源的前缀,如果你想根据html定位应该填 'auto'
|
|
170
|
-
* @default '/'
|
|
171
|
-
*/
|
|
172
|
-
base?: string;
|
|
173
|
-
/**
|
|
174
|
-
* 资产包裹目录,只在生产环境下生效
|
|
175
|
-
* @default undefined
|
|
176
|
-
*/
|
|
177
|
-
assetsDir?: string;
|
|
178
|
-
/**
|
|
179
|
-
* 是否输出Gzip版,只在生产环境下生效
|
|
180
|
-
* @default false
|
|
181
|
-
*/
|
|
182
|
-
gzip?: boolean;
|
|
183
|
-
/**
|
|
184
|
-
* 生成映射源代码文件,只在生产环境下生效
|
|
185
|
-
* @default false
|
|
186
|
-
*/
|
|
187
|
-
sourceMap?: boolean;
|
|
188
|
-
/**
|
|
189
|
-
* 输出的目录名称,只在生产环境下生效
|
|
190
|
-
* @default "dist"
|
|
191
|
-
*/
|
|
192
|
-
outDirName?: string;
|
|
193
|
-
/**
|
|
194
|
-
* 是否输出打包分析报告,只在生产环境下生效
|
|
195
|
-
* @default false
|
|
196
|
-
*/
|
|
197
|
-
outReport?: boolean;
|
|
198
|
-
/**
|
|
199
|
-
* 是否缓存编译结果
|
|
200
|
-
* @default false
|
|
201
|
-
*/
|
|
202
|
-
cache?: boolean;
|
|
203
|
-
/**
|
|
204
|
-
* 是否开启循环依赖检查
|
|
205
|
-
*/
|
|
206
|
-
dependencyCycleCheck?: boolean;
|
|
207
|
-
};
|
|
223
|
+
alias?: Record<string, string>;
|
|
208
224
|
/**
|
|
209
|
-
*
|
|
225
|
+
* 默认后缀
|
|
226
|
+
* @see {@link https://webpack.js.org/configuration/resolve/#resolveextensions}
|
|
227
|
+
* @default [".js", ".json", ".wasm",'.mjs', '.jsx', '.ts', '.tsx']
|
|
210
228
|
*/
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
* 路径别名
|
|
214
|
-
* @see {@link https://webpack.js.org/configuration/resolve/#resolvealias}
|
|
215
|
-
* @default {'@': path.join(context,'src')}
|
|
216
|
-
*/
|
|
217
|
-
alias?: Record<string, string>;
|
|
218
|
-
/**
|
|
219
|
-
* 默认后缀
|
|
220
|
-
* @see {@link https://webpack.js.org/configuration/resolve/#resolveextensions}
|
|
221
|
-
* @default [".js", ".json", ".wasm",'.mjs', '.jsx', '.ts', '.tsx']
|
|
222
|
-
*/
|
|
223
|
-
extensions?: string[];
|
|
224
|
-
};
|
|
229
|
+
extensions?: string[];
|
|
230
|
+
};
|
|
225
231
|
}
|
|
226
232
|
type ConfigEnvPre = Readonly<{
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
233
|
+
mode: string;
|
|
234
|
+
env: Omit<ImportMeta['env'], 'BASE'>;
|
|
235
|
+
command: Command;
|
|
230
236
|
}>;
|
|
231
237
|
type UserConfigFn<C> = (envPre: ConfigEnvPre) => C | Promise<C>;
|
|
232
|
-
type UserConfigWebExport = UserConfig | Promise<UserConfig> | UserConfigFn<UserConfig>;
|
|
233
|
-
/** 辅助工具函数 */
|
|
234
|
-
declare const defineConfig: (config: UserConfigWebExport) => UserConfigWebExport;
|
|
238
|
+
type UserConfigWebExport = UserConfig | Promise<UserConfig> | UserConfigFn<UserConfig>; /** 辅助工具函数 */
|
|
235
239
|
|
|
236
|
-
|
|
240
|
+
declare const defineConfig: (config: UserConfigWebExport) => UserConfigWebExport; //#endregion
|
|
241
|
+
export { ConfigEnvPre, ModuleFederationOptions, UserConfig, UserConfigFn, UserConfigWebExport, defineConfig };
|
package/dist/index.mjs
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
var _e=Object.defineProperty;var r=(o,e)=>_e(o,"name",{value:e,configurable:!0}),I=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+o+'" is not supported')});import{program as Z}from"commander";var Q="@ikaros-cli/ikaros",O="1.1.2";import{Option as Se}from"commander";import ft from"chalk";import{rspack as y}from"@rspack/core";import{RsdoctorRspackPlugin as ht}from"@rsdoctor/rspack-plugin";import vt from"compression-webpack-plugin";import{ModuleFederationPlugin as ke}from"@module-federation/enhanced/rspack";import{isEmpty as yt,isString as Oe,isArray as Ct}from"radash";import{RspackDevServer as xt}from"@rspack/dev-server";import{join as De}from"node:path";import{detect as bt}from"detect-port";import{createRequire as Ye}from"node:module";import{join as pe}from"path";import Ke from"node:fs";import ce from"node:fs/promises";import{isObject as Fe}from"radash";import ee from"fs/promises";import{z as a}from"zod";import{join as Ne}from"path";var z=r((o,e)=>{for(let t in e)o[t]=Fe(e[t])&&t in o?z(o[t],e[t]):e[t];return o},"mergeUserConfig");async function V(o){try{let e=Ne(process.cwd(),"node_modules",o);return await ee.access(e,ee.constants.F_OK),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}r(V,"checkDependency");var te=a.object({target:a.enum(["pc","mobile"]).optional().default("pc"),pages:a.custom().optional(),enablePages:a.union([a.array(a.string()),a.boolean()]).optional().default(!1),moduleFederation:a.union([a.custom(),a.array(a.custom())]).optional(),plugins:a.union([a.custom(),a.array(a.custom())]).optional(),loaders:a.array(a.custom()).optional(),experiments:a.custom().optional(),cdnOptions:a.custom().optional(),server:a.object({port:a.number().int().min(1024).max(65535).optional(),proxy:a.custom().optional(),https:a.union([a.boolean(),a.record(a.any())]).optional().default(!1)}).optional(),css:a.object({lightningcssOptions:a.record(a.any()).optional(),sourceMap:a.boolean().optional(),lessOptions:a.record(a.unknown()).optional(),sassOptions:a.record(a.unknown()).optional(),stylusOptions:a.record(a.unknown()).optional()}).optional(),build:a.object({base:a.string().optional().default("/"),assetsDir:a.string().optional(),gzip:a.boolean().optional().default(!1),sourceMap:a.boolean().optional().default(!1),outDirName:a.string().optional().default("dist"),outReport:a.boolean().optional().default(!1),cache:a.boolean().optional().default(!1),dependencyCycleCheck:a.boolean().optional().default(!1)}).optional(),resolve:a.object({alias:a.record(a.string()).optional(),extensions:a.array(a.string()).optional()}).optional()});import{dirname as Ae,extname as H,isAbsolute as Ie,join as ze,resolve as oe}from"node:path";import{pathToFileURL as B}from"node:url";import{createRequire as Ve}from"node:module";import{parse as He}from"yaml";import se from"node:fs";import ne from"node:fs/promises";import re from"fs-extra";import{build as Be}from"esbuild";async function qe(o,e=!1){let t=await Be({absWorkingDir:process.cwd(),entryPoints:[o],outfile:"out.js",write:!1,platform:"node",bundle:!0,format:e?"esm":"cjs",sourcemap:"inline",metafile:!0,plugins:[{name:"externalize-deps",setup(n){n.onResolve({filter:/.*/},l=>{let p=l.path;if(!p.startsWith(".")&&!Ie(p))return{external:!0}})}}]}),{text:s}=t.outputFiles[0];return{code:s,dependencies:t.metafile?Object.keys(t.metafile.inputs):[]}}r(qe,"transformConfig");var E=Ve(B(oe()));async function We(o,e,t=!1){if(t){let i=`${o}.timestamp-${Date.now()}-${Math.random().toString(16).slice(2)}`,c=`${i}.mjs`,u=`${B(i)}.mjs`;await ne.writeFile(c,e);try{return(await import(u)).default}finally{se.unlink(c,()=>{})}}let s=H(o),n=se.realpathSync(o),l=s in E.extensions?s:".js",p=E.extensions[l];E.extensions[l]=(i,c)=>{c===n?i._compile(e,c):p(i,c)},delete I.cache[I.resolve(o)];let m=E(o);return E.extensions[l]=p,m.__esModule?m.default:m}r(We,"requireConfig");async function Je(o,e=!1){let{code:t}=await qe(o,e);return We(o,t,e)}r(Je,"resultConfig");var C=new Map;C.set(".mjs",async o=>(await import(B(o).href)).default);C.set(".ts",async o=>await Je(o,!0));C.set(".json",async o=>await re.readJson(o));C.set(".yaml",async o=>{let e=await ne.readFile(o,"utf8");return He(e)});async function ie({configFile:o}){let e,t=process.cwd(),s="ikaros.config",n=["ts","mjs","json","yaml"].map(m=>`${ze(t,s)}.${m}`),p=(await Promise.all(n.map(m=>re.pathExists(m)))).findIndex(Boolean);if(!(p<0)){if(e=H(n[p]),t=oe(t,`${s}${e}`),o&&(t=Ae(o),e=H(o)),!C.has(e))throw new Error("No configuration file ! ");return C.get(e)(t)}}r(ie,"resolveConfig");import{isFunction as Ze,isObject as Xe}from"radash";import W from"fs-extra";import{join as J}from"path";import{config as ae}from"dotenv";import R from"chalk";var q=[],v=r(()=>{let o=r((i,c)=>({DONE:R.bgGreen.white,ERROR:R.bgRed.white,OKAY:R.bgBlue.white,WARNING:R.bgYellow.white,INFO:R.bgCyan.white})[i](` ${i} `)+` ${c}`,"generateLog");return{done:r(({text:i,onlyText:c})=>{if(c)return o("DONE",i);console.log(o("DONE",i))},"done"),error:r(({text:i,onlyText:c})=>{if(c)return o("ERROR",i);console.error(o("ERROR",i))},"error"),okay:r(({text:i,onlyText:c})=>{if(c)return o("OKAY",i);console.log(o("OKAY",i))},"okay"),warning:r(({text:i,onlyText:c})=>{if(c)return o("WARNING",i);console.warn(o("WARNING",i))},"warning"),info:r(({text:i,onlyText:c})=>{if(c)return o("INFO",i);console.info(o("INFO",i))},"info"),emitEvent:r(i=>{let c=new Date().toLocaleTimeString("en-US",{hour12:!1}).split(" ")[0];q.push(`[${c}] ${i}`)},"emitEvent"),clearEventArray:r(()=>{q.length=0},"clearEventArray"),eventArray:q}},"LoggerSystem");var D=r(o=>o?J(G,"env",`.env.${o}`):J(G,"env",".env"),"getEnvPath"),Ge=r(async o=>{let{warning:e,emitEvent:t}=v();if(!await W.pathExists(J(G,"env")))return t(e({text:"env folder not found",onlyText:!0})),!1;if(o){if(!await W.pathExists(D(o)))return t(e({text:`.env.${o} file not found`,onlyText:!0})),!1}else return await W.pathExists(D())?!0:(t(e({text:".env file not found",onlyText:!0})),!1);return!0},"checkEnv"),G=process.cwd(),le=r(async o=>await Ge(o)?o?ae({path:D(o)}).parsed??{}:ae({path:D()}).parsed??{}:{},"getEnv");var S=class{static{r(this,"BaseCompileService")}set env(e){this._env=e}get env(){return this._env}set contextPkg(e){this._contextPkg=e}get contextPkg(){return this._contextPkg}constructor(e){let{command:t,options:s,configFile:n}=e;this.command=t,this.options=s,this.configFile=n,this.context=pe(process.cwd(),"./"),this.contextRequire=Ye(this.context),this.initialize()}async initialize(){await this.initContextPkg(),await this.initEnv(),await this.getUserConfig(),this.startCompile()}resolveContext(...e){return pe(this.context,...e)}async initContextPkg(){let e=this.resolveContext("package.json");try{await ce.access(e,Ke.constants.F_OK)}catch{return}this.contextPkg=JSON.parse(await ce.readFile(e,{encoding:"utf8"}))}async initEnv(){let{platform:e,mode:t}=this.options,s={PLATFORM:e,MODE:t},n=await le(t);this.env={...s,...n}}resolveContextModule(e){try{return this.contextRequire.resolve(e)}catch{return}}loadContextModule(e){return this.contextRequire(e)}async getUserConfig(){let{configFile:e}=this,t=await ie({configFile:e}),s;if(t){if(Ze(t)){let n={PLATFORM:this.options.platform},l={mode:this.options.mode??"",env:Object.assign(n,this.env),command:this.command};s=await t(l)}Xe(t)&&(s=t),this.userConfig=te.parse(s)}}startCompile(){switch(this.command){case"server":{this.dev?.();break}case"build":{this.build?.();break}default:break}}};import{join as Y}from"path";import{createRequire as Qe}from"node:module";import ue from"node:url";var T=Y(process.cwd(),"./"),me=["...",".mjs",".jsx",".ts",".tsx"],ds=Y(T,"tsconfig.json"),de=ue.fileURLToPath(new ue.URL("../",import.meta.url)),ge=Qe(de),fe=r((...o)=>Y(de,...o),"resolveCLI");import{rspack as j}from"@rspack/core";var he=r((o,e)=>({loader:o.includes("builtin")?o:ge.resolve(o),options:e}),"createLoader"),et=r((o,e)=>{let{lightningcss:t,sourceMap:s}=e??{},n=he("builtin:lightningcss-loader",{...t}),l=r((p,m)=>{let i=[n],c=e&&e[`${p}`];return p&&p!=="css"&&i.push(he(`${p}-loader`,Object.assign(c??{},m,{sourceMap:s}))),i},"generateLoaders");return{less:l("less"),sass:l("sass",{sassOptions:{indentedSyntax:!0,api:"modern-compiler"}}),scss:l("sass",{sassOptions:{api:"modern-compiler"}}),stylus:l("stylus"),styl:l("stylus"),css:l("css")}},"cssLoaders"),ve=r((o,e)=>{let t=et(o,e);return Object.entries(t).map(([s,n])=>({test:new RegExp(`\\.${s}$`),use:n,type:"css/auto"}))},"buildCssLoaders");import{join as ye}from"path";import{isArray as xe,isEmpty as Ce}from"radash";var L=class{constructor({env:e="development",mode:t=""}){this.list=[];this.env="development";this.mode="";this.isDev=!0;this.env=e,this.mode=t,this.isDev=e==="development"}static{r(this,"BaseCreate")}add(e){return xe(e)?this.list=this.list.concat(e):e&&this.list.push(e),this}end(){return this.list}},M=class extends L{constructor({env:t="development",mode:s=""}){super({env:t,mode:s});this.defaultScriptLoader=r(t=>({test:/\.m?[j]s$/,loader:"builtin:swc-loader",options:{sourceMap:this.isDev,isModule:"unknown",rspackExperiments:t},type:"javascript/auto"}),"defaultScriptLoader");this.defaultResourceLoader=[{test:/\.(png|jpe?g|gif|svg|ico)(\?.*)?$/,type:"asset/resource",generator:{filename:this.isDev?"[id][ext]":"assets/img/[contenthash][ext]"}},{test:/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,type:"asset/resource",generator:{filename:this.isDev?"[id][ext]":"assets/media/[contenthash][ext]"}},{test:/\.(woff2?|eot|ttf|otf)(\?.*)?$/,type:"asset/resource",generator:{filename:this.isDev?"[id][ext]":"assets/fonts/[contenthash][ext]"}}]}static{r(this,"CreateLoader")}useDefaultCssLoader(t){return ve(this.env,t).forEach(n=>this.add(n)),this}useDefaultScriptLoader(t){return this.add(this.defaultScriptLoader(t)),this}useDefaultResourceLoader(){return this.defaultResourceLoader.forEach(t=>this.add(t)),this}},U=class extends L{static{r(this,"CreatePlugins")}constructor({env:e="development",mode:t=""}){super({env:e,mode:t})}useDefaultEnvPlugin(e){let{frameworkEnv:t={},extEnv:s={},env:n={}}=e??{};return this.add(tt({frameworkEnv:t,extEnv:s,env:n})),this}useCopyPlugin(){return this.env==="production"&&this.add(new j.CopyRspackPlugin({patterns:[{context:ye(T,"public"),from:"./",noErrorOnMissing:!0,globOptions:{ignore:["**/index.html",".*"]}}]})),this}useHtmlPlugin(e){return this.add(new j.HtmlRspackPlugin({template:e??ye(T,"index.html")})),this}},$=class{static{r(this,"CreateMpaAssets")}constructor({pages:e,enablePages:t}){this.pages=e,this.enablePages=t,this.getEnablePages()}create(){let e={},t=[];return Object.keys(this.pages).forEach(s=>{e[s]={import:this.pages[s].entry,library:this.pages[s].library},t.push(new j.HtmlRspackPlugin({template:this.pages[s].html,filename:`${s}.html`,chunks:[s],scriptLoading:"blocking",...this.pages[s].options}))}),{entry:e,plugins:t}}getEnablePages(){let{warning:e,emitEvent:t}=v();if(!Ce(this.pages)&&xe(this.enablePages)){let s={},n=[];if(this.enablePages.forEach(l=>{this.pages[l]?s[l]=this.pages[l]:n.push(l)}),n.length&&t(e({text:`\u5F53\u524D\u8BBE\u7F6E\u9875\u9762${n.join()}\u4E0D\u5B58\u5728`,onlyText:!0})),Ce(s))return;this.pages=s}}},tt=r(({frameworkEnv:o={},extEnv:e={},env:t={}})=>{let s=Object.assign({},z(e,t)),n=Object.fromEntries(Object.entries(s).map(([p,m])=>[`import.meta.env.${p}`,JSON.stringify(m)])),l=Object.fromEntries(Object.entries({...n,...o}).map(([p,m])=>[p,m]));return new j.DefinePlugin(l)},"createEnvPlugin");import{rspack as st}from"@rspack/core";import b from"chalk";import ot from"ora";import nt from"node:os";import _ from"pretty-bytes";import rt from"easy-table";import it from"cli-cursor";import at from"node:path";import be from"node:process";import{isArray as lt}from"radash";var Pe={name:Q,version:O},x="@rspack/ikaros-stats-plugin",Ee=b.hex("#222222"),w=class{constructor(e){this.startCompileHrtime=void 0;this.userConfig=e,this.ora=ot({color:"cyan",prefixText:"",hideCursor:!1})}static{r(this,"StatsPlugin")}apply(e){this.compiler=e,this.isDev=e.options.mode==="development",new st.ProgressPlugin(this.progressHandler.bind(this)).apply(e),it.hide(),this.isDev?this.initDevHook():this.initProdHook()}progressHandler(e,t,...s){let n=`${(e*100).toFixed(2)}%`;n+=` ${t} `,n+=b.gray(s?.join(" ")),this.lastProgressText!==n&&(this.lastProgressText=n,this.isDev?this.ora.text=`${n}
|
|
2
|
-
`:console.log(n))}updateStartCompileTime(){this.startCompileHrtime=be.hrtime()}getCurrentEndCompileTime(){let e=be.hrtime(this.startCompileHrtime);return(e[0]*1e9+e[1])/1e6}getError(e){let{errors:t,errorsCount:s=0}=e;if(!(!t||s===0))return t.map(n=>`${Ee.bgRed(" ERROR ")} ${n.message.trim()}`).join(`
|
|
1
|
+
import{Option as e,program as t}from"commander";import n from"chalk";import{rspack as r}from"@rspack/core";import{RsdoctorRspackPlugin as i}from"@rsdoctor/rspack-plugin";import a from"compression-webpack-plugin";import{ModuleFederationPlugin as o}from"@module-federation/enhanced/rspack";import{isArray as s,isEmpty as c,isFunction as l,isObject as u,isString as d}from"radashi";import{RspackDevServer as f}from"@rspack/dev-server";import p,{dirname as m,extname as h,join as g,resolve as _}from"node:path";import{detect as v}from"detect-port";import{createRequire as y}from"node:module";import b,{join as x}from"path";import ee from"node:fs";import S from"node:fs/promises";import C from"fs/promises";import{z as w}from"zod";import T,{pathToFileURL as E}from"node:url";import{parse as te}from"yaml";import D from"fs-extra";import{transform as ne}from"@swc/core";import{config as O}from"dotenv";import re from"ora";import ie from"node:os";import k from"pretty-bytes";import ae from"easy-table";import oe from"cli-cursor";import A from"node:process";var se=`@ikaros-cli/ikaros`,j=`1.2.0`;const M=(e,t)=>{for(let n in t)e[n]=u(t[n])&&n in e?M(e[n],t[n]):t[n];return e};async function N(e){try{let t=x(process.cwd(),`node_modules`,e);return await C.access(t,C.constants.F_OK),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}const ce=w.object({target:w.enum([`pc`,`mobile`]).optional().default(`pc`),pages:w.custom().optional(),enablePages:w.union([w.array(w.string()),w.boolean()]).optional().default(!1),moduleFederation:w.union([w.custom(),w.array(w.custom())]).optional(),plugins:w.union([w.custom(),w.array(w.custom())]).optional(),loaders:w.array(w.custom()).optional(),experiments:w.custom().optional(),cdnOptions:w.custom().optional(),server:w.object({port:w.number().int().min(1024).max(65535).optional(),proxy:w.custom().optional(),https:w.union([w.boolean(),w.record(w.any())]).optional().default(!1)}).optional(),css:w.object({lightningcssOptions:w.record(w.any()).optional(),sourceMap:w.boolean().optional(),lessOptions:w.record(w.unknown()).optional(),sassOptions:w.record(w.unknown()).optional(),stylusOptions:w.record(w.unknown()).optional()}).optional(),build:w.object({base:w.string().optional().default(`/`),assetsDir:w.string().optional(),gzip:w.boolean().optional().default(!1),sourceMap:w.boolean().optional().default(!1),outDirName:w.string().optional().default(`dist`),outReport:w.boolean().optional().default(!1),cache:w.boolean().optional().default(!1),dependencyCycleCheck:w.boolean().optional().default(!1)}).optional(),resolve:w.object({alias:w.record(w.string()).optional(),extensions:w.array(w.string()).optional()}).optional()});async function P(e,t){let{code:n}=await ne(e,{filename:e,sourceMaps:`inline`,jsc:{parser:{syntax:t?`typescript`:`ecmascript`,decorators:!0,dynamicImport:!0},target:`es2022`,loose:!0,keepClassNames:!0,externalHelpers:!0},minify:!1});return{code:n}}async function le(e,t){let n=`${e}.timestamp-${Date.now()}-${Math.random().toString(16).slice(2)}`,r=`${n}.mjs`,i=`${E(n)}.mjs`;await S.writeFile(r,t);try{let e=await import(i);return e.default}finally{await S.unlink(r)}}async function ue(e,t=!1){let{code:n}=await P(e,t);return le(e,n)}const F=new Map;F.set(`.mjs`,async e=>{let t=E(e),n=await import(t.href);return n.default}),F.set(`.ts`,async e=>await ue(e,!0)),F.set(`.json`,async e=>await D.readJson(e)),F.set(`.yaml`,async e=>{let t=await S.readFile(e,`utf8`);return te(t)});async function de({configFile:e}){let t,n=process.cwd(),r=`ikaros.config`,i=[`ts`,`mjs`,`json`,`yaml`].map(e=>`${g(n,r)}.${e}`),a=await Promise.all(i.map(e=>D.pathExists(e))),o=a.findIndex(Boolean);if(!(o<0)){if(t=h(i[o]),n=_(n,`${r}${t}`),e&&(n=m(e),t=h(e)),!F.has(t))throw Error(`No configuration file ! `);return F.get(t)(n)}}const I=[],L=()=>{let e=(e,t)=>{let r={DONE:n.bgGreen.white,ERROR:n.bgRed.white,OKAY:n.bgBlue.white,WARNING:n.bgYellow.white,INFO:n.bgCyan.white};return r[e](` ${e} `)+` ${t}`},t=({text:t,onlyText:n})=>{if(n)return e(`DONE`,t);console.log(e(`DONE`,t))},r=({text:t,onlyText:n})=>{if(n)return e(`ERROR`,t);console.error(e(`ERROR`,t))},i=({text:t,onlyText:n})=>{if(n)return e(`OKAY`,t);console.log(e(`OKAY`,t))},a=({text:t,onlyText:n})=>{if(n)return e(`WARNING`,t);console.warn(e(`WARNING`,t))},o=({text:t,onlyText:n})=>{if(n)return e(`INFO`,t);console.info(e(`INFO`,t))},s=e=>{let t=new Date().toLocaleTimeString(`en-US`,{hour12:!1}).split(` `)[0];I.push(`[${t}] ${e}`)},c=()=>{I.length=0};return{done:t,error:r,okay:i,warning:a,info:o,emitEvent:s,clearEventArray:c,eventArray:I}},R=e=>e?x(z,`env`,`.env.${e}`):x(z,`env`,`.env`),fe=async e=>{let{warning:t,emitEvent:n}=L(),r=await D.pathExists(x(z,`env`));if(!r)return n(t({text:`env folder not found`,onlyText:!0})),!1;if(e){let r=await D.pathExists(R(e));if(!r)return n(t({text:`.env.${e} file not found`,onlyText:!0})),!1}else{let e=await D.pathExists(R());return e?!0:(n(t({text:`.env file not found`,onlyText:!0})),!1)}return!0},z=process.cwd(),B=async e=>{let t=await fe(e);return t?e?O({path:R(e)}).parsed??{}:O({path:R()}).parsed??{}:{}};let V=function(e){return e.SERVER=`server`,e.BUILD=`build`,e}({});var pe=class{set env(e){this._env=e}get env(){return this._env}set contextPkg(e){this._contextPkg=e}get contextPkg(){return this._contextPkg}constructor(e){let{command:t,options:n,configFile:r}=e;this.command=t,this.options=n,this.configFile=r,this.context=x(process.cwd(),`./`),this.contextRequire=y(this.context),this.initialize()}async initialize(){await this.initContextPkg(),await this.initEnv(),await this.getUserConfig(),this.startCompile()}resolveContext(...e){return x(this.context,...e)}async initContextPkg(){let e=this.resolveContext(`package.json`);try{await S.access(e,ee.constants.F_OK)}catch{return}this.contextPkg=JSON.parse(await S.readFile(e,{encoding:`utf8`}))}async initEnv(){let{platform:e,mode:t}=this.options,n={PLATFORM:e,MODE:t},r=await B(t);this.env={...n,...r}}resolveContextModule(e){try{return this.contextRequire.resolve(e)}catch{return}}loadContextModule(e){return this.contextRequire(e)}async getUserConfig(){let{configFile:e}=this,t=await de({configFile:e}),n;if(t){if(l(t)){let e={PLATFORM:this.options.platform},r={mode:this.options.mode??``,env:Object.assign(e,this.env),command:this.command};n=await t(r)}u(t)&&(n=t),this.userConfig=ce.parse(n)}}startCompile(){switch(this.command){case V.SERVER:this.dev?.();break;case V.BUILD:this.build?.();break;default:break}}};const H=x(process.cwd(),`./`),me=[`...`,`.mjs`,`.jsx`,`.ts`,`.tsx`],he=x(H,`tsconfig.json`),U=T.fileURLToPath(new T.URL(`../`,import.meta.url)),ge=y(U),_e=(...e)=>x(U,...e),W=(e,t)=>({loader:e.includes(`builtin`)?e:ge.resolve(e),options:t}),ve=(e,t)=>{let{lightningcss:n,sourceMap:r}=t??{},i=W(`builtin:lightningcss-loader`,{...n}),a=(e,n)=>{let a=[i],o=t&&t[`${e}`];return e&&e!==`css`&&a.push(W(`${e}-loader`,Object.assign(o??{},n,{sourceMap:r}))),a};return{less:a(`less`),sass:a(`sass`,{sassOptions:{indentedSyntax:!0,api:`modern-compiler`}}),scss:a(`sass`,{sassOptions:{api:`modern-compiler`}}),stylus:a(`stylus`),styl:a(`stylus`),css:a(`css`)}},ye=(e,t)=>{let n=ve(e,t);return Object.entries(n).map(([e,t])=>({test:RegExp(`\\.${e}$`),use:t,type:`css/auto`}))};var G=class{constructor({env:e=`development`,mode:t=``}){this.list=[],this.env=`development`,this.mode=``,this.isDev=!0,this.env=e,this.mode=t,this.isDev=e===`development`}add(e){return e&&(s(e)?this.list=this.list.concat(e):this.list.push(e)),this}end(){return this.list}},be=class extends G{constructor({env:e=`development`,mode:t=``}){super({env:e,mode:t}),this.defaultScriptLoader=e=>({test:/\.m?[j]s$/,loader:`builtin:swc-loader`,options:{isModule:`unknown`,rspackExperiments:e},type:`javascript/auto`}),this.defaultResourceLoader=[{test:/\.(png|jpe?g|gif|svg|ico)(\?.*)?$/,type:`asset/resource`,generator:{filename:this.isDev?`[id][ext]`:`assets/img/[contenthash][ext]`}},{test:/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,type:`asset/resource`,generator:{filename:this.isDev?`[id][ext]`:`assets/media/[contenthash][ext]`}},{test:/\.(woff2?|eot|ttf|otf)(\?.*)?$/,type:`asset/resource`,generator:{filename:this.isDev?`[id][ext]`:`assets/fonts/[contenthash][ext]`}}]}useDefaultCssLoader(e){let t=ye(this.env,e);return t.forEach(e=>this.add(e)),this}useDefaultScriptLoader(e){return this.add(this.defaultScriptLoader(e)),this}useDefaultResourceLoader(){return this.defaultResourceLoader.forEach(e=>this.add(e)),this}},K=class extends G{constructor({env:e=`development`,mode:t=``}){super({env:e,mode:t})}useDefaultEnvPlugin(e){let{frameworkEnv:t={},extEnv:n={},env:r={}}=e??{};return this.add(Se({frameworkEnv:t,extEnv:n,env:r})),this}useCopyPlugin(){return this.env===`production`&&this.add(new r.CopyRspackPlugin({patterns:[{context:x(H,`public`),from:`./`,noErrorOnMissing:!0,globOptions:{ignore:[`**/index.html`,`.*`]}}]})),this}useHtmlPlugin(e){return this.add(new r.HtmlRspackPlugin({template:e??x(H,`index.html`)})),this}},xe=class{constructor({pages:e,enablePages:t}){this.pages=e,this.enablePages=t,this.getEnablePages()}create(){let e={},t=[];return Object.keys(this.pages).forEach(n=>{e[n]={import:this.pages[n].entry,library:this.pages[n].library},t.push(new r.HtmlRspackPlugin({template:this.pages[n].html,filename:`${n}.html`,chunks:[n],scriptLoading:`blocking`,...this.pages[n].options}))}),{entry:e,plugins:t}}getEnablePages(){let{warning:e,emitEvent:t}=L();if(!c(this.pages)&&s(this.enablePages)){let n={},r=[];if(this.enablePages.forEach(e=>{this.pages[e]?n[e]=this.pages[e]:r.push(e)}),c(r)&&t(e({text:`当前设置页面${r.join()}不存在`,onlyText:!0})),c(n))return;this.pages=n}}};const Se=({frameworkEnv:e={},extEnv:t={},env:n={}})=>{let i=Object.assign({},M(t,n)),a=Object.fromEntries(Object.entries(i).map(([e,t])=>[`import.meta.env.${e}`,JSON.stringify(t)])),o=Object.fromEntries(Object.entries({...a,...e}).map(([e,t])=>[e,t]));return new r.DefinePlugin(o)},q={name:se,version:j},J=`@rspack/ikaros-stats-plugin`,Y=n.hex(`#222222`);var Ce=class{constructor(e){this.startCompileHrtime=void 0,this.userConfig=e,this.ora=re({color:`cyan`,prefixText:``,hideCursor:!1})}apply(e){this.compiler=e,this.isDev=e.options.mode===`development`,new r.ProgressPlugin(this.progressHandler.bind(this)).apply(e),oe.hide(),this.isDev?this.initDevHook():this.initProdHook()}progressHandler(e,t,...r){let i=`${(e*100).toFixed(2)}%`;i+=` ${t} `,i+=n.gray(r?.join(` `)),this.lastProgressText!==i&&(this.lastProgressText=i,this.isDev?this.ora.text=`${i}\n`:console.log(i))}updateStartCompileTime(){this.startCompileHrtime=A.hrtime()}getCurrentEndCompileTime(){let e=A.hrtime(this.startCompileHrtime);return(e[0]*1e9+e[1])/1e6}getError(e){let{errors:t,errorsCount:n=0}=e;if(!(!t||n===0))return t.map(e=>`${Y.bgRed(` ERROR `)} ${e.message.trim()}`).join(`
|
|
3
2
|
|
|
4
|
-
`)}getWarn(e){let{warnings:t,warningsCount:
|
|
3
|
+
`)}getWarn(e){let{warnings:t,warningsCount:n=0}=e;if(!(!t||n===0))return t.map(e=>`${Y.bgYellow(` WARN `)} ${e.message.trim()}`).join(`
|
|
5
4
|
|
|
6
|
-
`)}getEndTips(e,t){let{gray:
|
|
7
|
-
`)),console.log());let{name:
|
|
8
|
-
|
|
9
|
-
`;for(let P of s)g+=n(` ${P}
|
|
10
|
-
`);console.log(p(g))}console.log(this.getEndTips(i,this.getCurrentEndCompileTime())),console.log()},"call")})}initProdHook(){let{compiler:e}=this,t;e.hooks.environment.intercept({name:x,call:r(()=>{console.log(b.gray("start build...")),this.updateStartCompileTime()},"call")}),e.hooks.done.intercept({name:x,call:r(s=>{t=s.toJson({preset:"normal",colors:!0,assetsSort:"size"})},"call")}),e.cache.hooks.shutdown.intercept({name:x,done:r(()=>{let{errorsCount:s=0,warningsCount:n=0}=t;console.log(),s>0?(console.log(this.getError(t)),console.log()):(n>0&&(console.log(this.getWarn(t)),console.log()),console.log(this.getTableInfo(t)),console.log()),console.log(this.getEndTips(t,this.getCurrentEndCompileTime()))},"done")})}};import{rspack as pt}from"@rspack/core";import{createRequire as ct}from"node:module";import ut from"chalk";import Re from"path";var K="@rspack/ikaros-cdn-plugin",mt="https://unpkg.com/:name@:version/:path",dt=":name/:path",we=/:([a-z]+)/gi,k=class{constructor(e){this.isDev=!1;this.options={prodUrl:mt,devUrl:dt,crossOrigin:!1,sri:!1,...e}}static{r(this,"CdnPlugin")}apply(e){this.compiler=e,this.isDev=e.options.mode==="development",this.handleExternals(),e.hooks.compilation.tap(K,t=>{pt.HtmlRspackPlugin.getCompilationHooks(t).alterAssetTags.tapAsync(K,(n,l)=>{try{this.injectResources(n),l(null,n)}catch(p){l(p)}})})}handleExternals(){let e=this.compiler.options.externals||{};this.options.modules.filter(t=>!t.cssOnly).forEach(t=>{e[t.name]=t.var||t.name}),this.compiler.options.externals=e}injectResources(e){let t=this.options.modules,s=[];t.forEach(n=>{this.getStyles(n).forEach(p=>{s.push({tagName:"link",voidTag:!0,attributes:{rel:"stylesheet",href:p,...this.options.crossOrigin&&{crossorigin:this.options.crossOrigin}}})})}),t.filter(n=>!n.cssOnly).forEach(n=>{this.getScripts(n).forEach(p=>{s.push({tagName:"script",voidTag:!0,attributes:{src:p,...this.options.crossOrigin&&{crossorigin:this.options.crossOrigin}}})})}),e.assetTags&&(e.assetTags.styles.unshift(...s.filter(n=>n.tagName==="link")),e.assetTags.scripts.unshift(...s.filter(n=>n.tagName==="script")))}getStyles(e){let t=[...e.styles||[]];return e.style&&t.unshift(e.style),t.map(s=>this.generateUrl(e,s))}getScripts(e){let t=[...e.paths||[]];return e.path&&t.unshift(e.path),t.map(s=>this.generateUrl(e,s))}joinUrl(e,t){return e=e.replace(/\/+$/,""),t=t.replace(/^\/+/,""),`${e}/${t}`}generateUrl(e,t){let s=this.isDev?e.devUrl||this.options.devUrl:e.prodUrl||this.options.prodUrl;return s.match(we)?s.replace(we,(n,l)=>{switch(l){case"name":return e.name;case"version":return e.version||this.getModuleVersion(e.name);case"path":return t;default:return n}}):this.joinUrl(s,t)}getModuleVersion(e){try{return ct(Re.join(process.cwd(),"node_modules"))(Re.join(e,"package.json")).version}catch{return console.warn(ut.yellow(`[${K}] \u65E0\u6CD5\u83B7\u53D6\u6A21\u5757 "${e}" \u7684\u7248\u672C\u4FE1\u606F`)),"latest"}}};var{error:Pt}=v(),F=class extends S{constructor(){super(...arguments);this.isVue=!1;this.isReact=!1}static{r(this,"WebCompileService")}async dev(){await this.initPreConfig(),await this.createRspackBuilder({isLive:!0})}async build(){await this.initPreConfig(),await this.createRspackBuilder()}async initPreConfig(){await Promise.all([this.initUserConfig(),this.initBrowserslist(),this.initOtherConfig()]),await this.createRspackConfig()}async initUserConfig(){let t=this.command==="server",s=this.userConfig;if(this.base=s?.build?.base??"/",t&&Oe(this.base)&&/^https?:/.test(this.base)){let n=ft.cyan("build.base");Pt({text:`\u672C\u5730\u5F00\u53D1\u65F6 ${n} \u4E0D\u5E94\u8BE5\u4E3A\u5916\u90E8 Host!`}),process.exit(0)}this.target=s?.target??"pc",this.pages=s?.pages??{index:{html:this.resolveContext("index.html"),entry:this.resolveContext("src/index")}},this.port=s?.server?.port??await bt("8080")}async initBrowserslist(){let t=this.target==="mobile",s=["defaults"];t?s.push("IOS >= 10","Chrome >= 56"):s.push(">0.2%","Chrome >= 56","Safari >= 10","last 2 versions","not dead"),this.browserslist=s.join(",")}async initOtherConfig(){try{let[t,s]=await Promise.all([V("react"),V("vue")]);this.isVue=s,this.isReact=t}catch{}}joinAssetsDir(...t){let s=this.userConfig?.build?.assetsDir??"";return De(s,...t).replaceAll("\\","/")}getOutDirPath(){let t=this.userConfig?.build?.outDirName;return Oe(t)?this.resolveContext(t):this.resolveContext("dist")}async createRspackConfig(){let t=this.command==="server",s=t?"development":"production",{userConfig:n,context:l,browserslist:p,pages:m,contextPkg:i,port:c,base:u}=this,d=new M({env:s,mode:this.options.mode}),f=new U({env:s,mode:this.options.mode}),h=new $({pages:m,enablePages:n?.enablePages}),{entry:g,plugins:P}=h.create(),{env:Le,noParse:Me}=this.createVueOrReactConfig(),Ue=d.useDefaultResourceLoader().useDefaultScriptLoader(n?.experiments).useDefaultCssLoader(n?.css).add(n?.loaders).end(),$e=f.useDefaultEnvPlugin({extEnv:{...n?.define},frameworkEnv:Le,env:this.env}).useCopyPlugin().add(P).add(new w).add(this.createSourceMapPlugin()).add(this.createCssExtractPlugin()).add(this.createDoctorPlugin()).add(this.createGzipPlugin()).add(this.createCdnPlugin()).add(this.createModuleFederationPlugin()).add(this.createDependencyCyclePlugin()).add(n?.plugins).end();this.rspackConfig={mode:s,target:["web","es5",`browserslist:${p}`],context:l,entry:g,resolve:{alias:{"@":this.resolveContext("src"),...n?.resolve?.alias},extensions:n?.resolve?.extensions||me,modules:["node_modules",this.resolveContext("node_modules"),fe("node_modules")]},output:{clean:!0,path:this.getOutDirPath(),publicPath:u,filename:t?"[id].js":this.joinAssetsDir("assets/js/[contenthash].js"),chunkLoadingGlobal:`${i?.name||"ikaros"}_chunk`,pathinfo:!1},optimization:this.createOptimization(),stats:"none",watchOptions:{aggregateTimeout:500,ignored:/node_modules/},module:{rules:Ue,noParse:Me},plugins:$e,devServer:{hot:!0,port:c,server:(()=>{let A=n?.server?.https;return A?A===!0?"https":{type:"https",options:A}:"http"})(),allowedHosts:"all",proxy:n?.server?.proxy,historyApiFallback:{rewrites:[{from:new RegExp(`^${u}`),to:De(u,"index.html")}]},headers:{"Access-Control-Allow-Origin":"*"},static:{directory:this.resolveContext("public"),publicPath:u},client:{logging:"none",overlay:{errors:!0,warnings:!1,runtimeErrors:!1},webSocketURL:`auto://0.0.0.0:${c}/ws`}},experiments:{css:!0},...this.createCacheConfig()}}createSourceMapPlugin(){let{userConfig:t,command:s}=this;if(s==="server")return new y.EvalSourceMapDevToolPlugin({columns:!1,module:!0});if(t?.build?.sourceMap??!1)return new y.SourceMapDevToolPlugin({test:[/.js/,/.mjs/],filename:"[file].map[query]"})}createCssExtractPlugin(){if(this.command!=="server")return new y.CssExtractRspackPlugin({filename:this.joinAssetsDir("assets/css/[contenthash].css"),ignoreOrder:!0})}createDoctorPlugin(){if(this.command!=="server"&&this.userConfig?.build?.outReport)return new ht}createGzipPlugin(){if(this.command!=="server"&&this.userConfig?.build?.gzip)return new vt}createOptimization(){return this.command==="server"?{minimize:!1,removeAvailableModules:!1,removeEmptyChunks:!1,splitChunks:!1}:{minimize:!0,minimizer:[new y.LightningCssMinimizerRspackPlugin,new y.SwcJsMinimizerRspackPlugin],splitChunks:{chunks:"all",minSize:2e4,minChunks:2,maxAsyncRequests:30,maxInitialRequests:30,cacheGroups:{defaultVendors:{test:/[/\\]node_modules[/\\]/,priority:-10,reuseExistingChunk:!0},default:{minChunks:2,priority:-20,reuseExistingChunk:!0}}}}}createCacheConfig(){if(this.command!=="server"&&this.userConfig?.build?.cache)return{cache:!0,experiments:{cache:{type:"persistent"}}}}createVueOrReactConfig(){return this.isVue?{noParse:/^(vue|vue-router|vuex|vuex-router-sync)$/,env:{__VUE_OPTIONS_API__:!0,__VUE_PROD_DEVTOOLS__:!1,__VUE_PROD_HYDRATION_MISMATCH_DETAILS__:!1}}:this.isReact?{noParse:r(t=>/(react|react-dom|react-is)\.production\.min\.js$/.test(t),"noParse"),env:{REACT_APP_ENABLE_DEVTOOLS:!1}}:{env:void 0,noParse:void 0}}createCdnPlugin(){let{cdnOptions:t}=this.userConfig??{};if(!(!t||yt(t.modules)))return new k(t)}createModuleFederationPlugin(){let t=this.userConfig?.moduleFederation;if(t)return Ct(t)?t.map(s=>new ke(s)):new ke(t)}createDependencyCyclePlugin(){if(this.command!=="server"&&this.userConfig?.build?.dependencyCycleCheck)return new y.CircularDependencyRspackPlugin({exclude:/node_modules/,failOnError:!1})}createRspackBuilder(t){let{isLive:s=!1}=t||{};return new Promise((n,l)=>{let p=y(this.rspackConfig);if(s){new xt(this.rspackConfig.devServer,p).startCallback(c=>{if(c)return l(c);n(void 0)});return}let m="";p.run((i,c)=>{p.close(u=>i||u?(console.error(i||u),l(i||u)):c?.hasErrors()?(m+=`Build failed with errors.
|
|
11
|
-
`,c.toString({chunks:!1,colors:!0}).split(/\r?\n/).forEach(d=>{m+=` ${d}
|
|
12
|
-
`}),l(new Error(m))):n(c?.toString({chunks:!1,colors:!0})))})})}};var N={WEB:"web"},Et=[new Se("-m, --mode <name>","Environment variable"),new Se("-p, --platform <type>","build platform type").default(N.WEB).choices(Object.values(N))],Te=r(o=>{switch(o.options.platform){case N.WEB:{new F(o);break}default:{let e=Object.values(N).join(",");console.error(`No corresponding compilation service was found, platform: ${e}`),process.exit(1)}}},"startCompile"),je=r(o=>{let e=o.command("server",{isDefault:!0}).description("Start local develop serve").action(s=>{Te({command:"server",options:s})}),t=o.command("build").description("Start build").action(s=>{Te({command:"build",options:s})});for(let s of Et)e.addOption(s),t.addOption(s)},"commander");var Co=r(o=>o,"defineConfig");import wt from"chalk";var kt=Number(process.versions.node.split(".")[0]);if(kt<18){let o=wt.bgRed.white(" ERROR ");console.error(o+" The Node.js version is greater than v18!"),console.log(),process.exit(1)}Z.version(O,"-v, --version");je(Z);Z.parse();export{Co as defineConfig};
|
|
5
|
+
`)}getEndTips(e,t){let{gray:r,cyan:i,red:a,green:o,yellow:s}=n,{errorsCount:c=-1,warningsCount:l=-1}=e,u=(t/1e3).toFixed(2);return r(c>0?`${i(q.name)} compiled with${a(` ${c} error`)}`:l>0?`compile ${o(`success`)} and with ${s(`${l} warning`)}, time: ${u}s`:`compile ${o(`success`)}, time: ${u}s.`)}getTableInfo(e){let{assets:t}=e;if(!t||t.length===0)return;let r=new ae,i=this.userConfig?.build?.gzip??!1,a=0,o=0,c=!1;for(let e=0;e<t.length;e++){let{name:n,size:l,related:u,info:d}=t[e];if(d.development)continue;let f=i&&s(u)?u.find(e=>e.type===`gzipped`).size:0;if(a+=l,o+=f,t.length>20&&e>=4&&e<t.length-1-4){c||(c=!0,r.cell(`name`,`....`),r.cell(`size`,`....`),i&&r.cell(`gzip`,`....`),r.newRow());continue}r.cell(`name`,n),r.cell(`size`,k(l)),i&&r.cell(`gzip`,k(f)),r.newRow()}return r.pushDelimeter(),r.cell(`name`,`There are ${t.length} files`),r.cell(`size`,k(a)),i&&r.cell(`gzip`,k(o)),r.newRow(),n.cyan.dim(r.toString().trim())}getHostList(){let{userConfig:e,compiler:t}=this,{devServer:n}=t.options,r=n?.server===`https`||typeof n?.server==`object`,i=Number(n?.port),a=[],o=``,s=Object.values(ie.networkInterfaces());if(e){o=e.build?.base??``,(!o||o===`auto`)&&(o=`/`);let t=Object.keys(e?.pages||{})[0];t&&t!==`index`?o=p.join(o,`${t}.html`):o.endsWith(`/`)||(o+=`/`)}for(let e of s){let{address:t}=e?.find(e=>e.family===`IPv4`)||{};if(!t)continue;a.push(t)}a.sort((e,t)=>{let n=e.split(`.`),r=t.split(`.`);for(let[t]of n.entries()){if(e[t]===r[t])continue;return Number(r[t])-Number(e[t])}return 0});let c=a.indexOf(`127.0.0.1`);return c!==-1&&(a.splice(c,1),a.unshift(`localhost`)),a=a.map(e=>{r?(e=`https://${e}`,i!==443&&(e=e+`:`+i)):(e=`http://`+e,i!==80&&(e=e+`:`+i));let t=new URL(o,e);return t.href}),a}initDevHook(){let{compiler:e,ora:t}=this,r=this.getHostList(),{blue:i,cyan:a,gray:o}=n;e.hooks.environment.intercept({name:J,call(){t.start(`Preparing resource files....`)}}),e.hooks.watchRun.intercept({name:J,call:()=>{t.isSpinning||console.clear(),t.start(),this.updateStartCompileTime()}}),e.hooks.done.intercept({name:J,call:e=>{t.stop(),console.clear();let n=e.toJson({preset:`errors-warnings`,colors:!0}),{eventArray:s}=L(),{errorsCount:c=0,warningsCount:l=0}=n;if(c>0)console.log(this.getError(n)),console.log();else{l>0&&(console.log(this.getWarn(n)),console.log()),s.length>0&&(console.log(s.map(e=>e).join(`
|
|
6
|
+
`)),console.log());let{name:e,version:t}=q,c=`${a(`${e} v${t}`)} entry address:\n\n`;for(let e of r)c+=i(` ${e}\n`);console.log(o(c))}console.log(this.getEndTips(n,this.getCurrentEndCompileTime())),console.log()}})}initProdHook(){let{compiler:e}=this,t;e.hooks.environment.intercept({name:J,call:()=>{console.log(n.gray(`start build...`)),this.updateStartCompileTime()}}),e.hooks.done.intercept({name:J,call:e=>{t=e.toJson({preset:`normal`,colors:!0,assetsSort:`size`})}}),e.cache.hooks.shutdown.intercept({name:J,done:()=>{let{errorsCount:e=0,warningsCount:n=0}=t;console.log(),e>0?(console.log(this.getError(t)),console.log()):(n>0&&(console.log(this.getWarn(t)),console.log()),console.log(this.getTableInfo(t)),console.log()),console.log(this.getEndTips(t,this.getCurrentEndCompileTime()))}})}};const X=`@rspack/ikaros-cdn-plugin`,we=`https://unpkg.com/:name@:version/:path`,Te=`:name/:path`,Z=/:([a-z]+)/gi;var Ee=class{constructor(e){this.isDev=!1,this.options={prodUrl:we,devUrl:Te,crossOrigin:!1,...e}}apply(e){this.compiler=e,this.isDev=e.options.mode===`development`,this.handleExternals(),e.hooks.compilation.tap(X,e=>{let t=r.HtmlRspackPlugin.getCompilationHooks(e);t.alterAssetTags.tapAsync(X,(e,t)=>{try{this.injectResources(e),t(null,e)}catch(e){t(e)}})})}handleExternals(){let e=this.compiler.options.externals||{};this.options.modules.filter(e=>!e.cssOnly).forEach(t=>{e[t.name]=t.var||t.name}),this.compiler.options.externals=e}injectResources(e){let t=this.options.modules,n=[];t.forEach(e=>{let t=this.getStyles(e);t.forEach(e=>{n.push({tagName:`link`,voidTag:!0,attributes:{rel:`stylesheet`,href:e,...this.options.crossOrigin&&{crossorigin:this.options.crossOrigin}}})})}),t.filter(e=>!e.cssOnly).forEach(e=>{let t=this.getScripts(e);t.forEach(e=>{n.push({tagName:`script`,voidTag:!0,attributes:{src:e,...this.options.crossOrigin&&{crossorigin:this.options.crossOrigin}}})})}),e.assetTags&&(e.assetTags.styles.unshift(...n.filter(e=>e.tagName===`link`)),e.assetTags.scripts.unshift(...n.filter(e=>e.tagName===`script`)))}getStyles(e){let t=[...e.styles||[]];return e.style&&t.unshift(e.style),t.map(t=>this.generateUrl(e,t))}getScripts(e){let t=[...e.paths||[]];return e.path&&t.unshift(e.path),t.map(t=>this.generateUrl(e,t))}joinUrl(e,t){return e=e.replace(/\/+$/,``),t=t.replace(/^\/+/,``),`${e}/${t}`}generateUrl(e,t){let n=this.isDev?e.devUrl||this.options.devUrl:e.prodUrl||this.options.prodUrl;return n.match(Z)?n.replace(Z,(n,r)=>{switch(r){case`name`:return e.name;case`version`:return e.version||this.getModuleVersion(e.name);case`path`:return t;default:return n}}):this.joinUrl(n,t)}getModuleVersion(e){try{return y(b.join(process.cwd(),`node_modules`))(b.join(e,`package.json`)).version}catch{return console.warn(n.yellow(`[${X}] 无法获取模块 "${e}" 的版本信息`)),`latest`}}};const{error:De}=L();var Oe=class extends pe{constructor(...e){super(...e),this.isVue=!1,this.isReact=!1}async dev(){await this.initPreConfig(),await this.createRspackBuilder({isLive:!0})}async build(){await this.initPreConfig(),await this.createRspackBuilder()}async initPreConfig(){await Promise.all([this.initUserConfig(),this.initBrowserslist(),this.initOtherConfig()]),await this.createRspackConfig()}async initUserConfig(){let e=this.command===V.SERVER,t=this.userConfig;if(this.base=t?.build?.base??`/`,e&&d(this.base)&&/^https?:/.test(this.base)){let e=n.cyan(`build.base`);De({text:`本地开发时 ${e} 不应该为外部 Host!`}),process.exit(0)}this.target=t?.target??`pc`,this.pages=t?.pages??{index:{html:this.resolveContext(`index.html`),entry:this.resolveContext(`src/index`)}},this.port=t?.server?.port??await v(`8080`)}async initBrowserslist(){let e=this.target===`mobile`,t=[`defaults`];e?t.push(`IOS >= 10`,`Chrome >= 56`):t.push(`>0.2%`,`Chrome >= 56`,`Safari >= 10`,`last 2 versions`,`not dead`),this.browserslist=t.join(`,`)}async initOtherConfig(){try{let[e,t]=await Promise.all([N(`react`),N(`vue`)]);this.isVue=t,this.isReact=e}catch{}}joinAssetsDir(...e){let t=this.userConfig?.build?.assetsDir??``;return g(t,...e).replaceAll(`\\`,`/`)}getOutDirPath(){let e=this.userConfig?.build?.outDirName;return d(e)?this.resolveContext(e):this.resolveContext(`dist`)}async createRspackConfig(){let e=this.command===V.SERVER,t=e?`development`:`production`,{userConfig:n,context:r,browserslist:i,pages:a,contextPkg:o,port:s,base:c}=this,l=new be({env:t,mode:this.options.mode}),u=new K({env:t,mode:this.options.mode}),d=new xe({pages:a,enablePages:n?.enablePages}),{entry:f,plugins:p}=d.create(),{env:m,noParse:h}=this.createVueOrReactConfig(),_=l.useDefaultResourceLoader().useDefaultScriptLoader(n?.experiments).useDefaultCssLoader(n?.css).add(n?.loaders).end(),v=u.useDefaultEnvPlugin({extEnv:{...n?.define},frameworkEnv:m,env:this.env}).useCopyPlugin().add(p).add(new Ce).add(this.createSourceMapPlugin()).add(this.createCssExtractPlugin()).add(this.createDoctorPlugin()).add(this.createGzipPlugin()).add(this.createCdnPlugin()).add(this.createModuleFederationPlugin()).add(this.createDependencyCyclePlugin()).add(n?.plugins).end();this.rspackConfig={mode:t,target:[`web`,`es5`,`browserslist:${i}`],context:r,entry:f,resolve:{alias:{"@":this.resolveContext(`src`),...n?.resolve?.alias},extensions:n?.resolve?.extensions||me,modules:[`node_modules`,this.resolveContext(`node_modules`),_e(`node_modules`)]},output:{clean:!0,path:this.getOutDirPath(),publicPath:c,filename:e?`[id].js`:this.joinAssetsDir(`assets/js/[contenthash].js`),chunkLoadingGlobal:`${o?.name||`ikaros`}_chunk`,pathinfo:!1},optimization:this.createOptimization(),stats:`none`,watchOptions:{aggregateTimeout:500,ignored:/node_modules/},module:{rules:_,noParse:h},plugins:v,devServer:{hot:!0,port:s,server:(()=>{let e=n?.server?.https;return e?e===!0?`https`:{type:`https`,options:e}:`http`})(),allowedHosts:`all`,proxy:n?.server?.proxy,historyApiFallback:{rewrites:[{from:RegExp(`^${c}`),to:g(c,`index.html`)}]},headers:{"Access-Control-Allow-Origin":`*`},static:{directory:this.resolveContext(`public`),publicPath:c},client:{logging:`none`,overlay:{errors:!0,warnings:!1,runtimeErrors:!1},webSocketURL:`auto://0.0.0.0:${s}/ws`}},experiments:{css:!0},...this.createCacheConfig()}}createSourceMapPlugin(){let{userConfig:e,command:t}=this,n=t===V.SERVER;if(n)return new r.EvalSourceMapDevToolPlugin({columns:!1,module:!0});if(e?.build?.sourceMap??!1)return new r.SourceMapDevToolPlugin({test:[/.js/,/.mjs/],filename:`[file].map[query]`})}createCssExtractPlugin(){if(this.command!==V.SERVER)return new r.CssExtractRspackPlugin({filename:this.joinAssetsDir(`assets/css/[contenthash].css`),ignoreOrder:!0})}createDoctorPlugin(){if(this.command!==V.SERVER&&this.userConfig?.build?.outReport)return new i}createGzipPlugin(){if(this.command!==V.SERVER&&this.userConfig?.build?.gzip)return new a}createOptimization(){return this.command===V.SERVER?{minimize:!1,removeAvailableModules:!1,removeEmptyChunks:!1,splitChunks:!1}:{minimize:!0,minimizer:[new r.LightningCssMinimizerRspackPlugin,new r.SwcJsMinimizerRspackPlugin],splitChunks:{chunks:`all`,minSize:2e4,minChunks:2,maxAsyncRequests:30,maxInitialRequests:30,cacheGroups:{defaultVendors:{test:/[/\\]node_modules[/\\]/,priority:-10,reuseExistingChunk:!0},default:{minChunks:2,priority:-20,reuseExistingChunk:!0}}}}}createCacheConfig(){if(this.command!==V.SERVER&&this.userConfig?.build?.cache)return{cache:!0,experiments:{cache:{type:`persistent`}}}}createVueOrReactConfig(){return this.isVue?{noParse:/^(vue|vue-router|vuex|vuex-router-sync)$/,env:{__VUE_OPTIONS_API__:!0,__VUE_PROD_DEVTOOLS__:!1,__VUE_PROD_HYDRATION_MISMATCH_DETAILS__:!1}}:this.isReact?{noParse:e=>/(react|react-dom|react-is)\.production\.min\.js$/.test(e),env:{REACT_APP_ENABLE_DEVTOOLS:!1}}:{env:void 0,noParse:void 0}}createCdnPlugin(){let{cdnOptions:e}=this.userConfig??{};if(!(!e||c(e.modules)))return new Ee(e)}createModuleFederationPlugin(){let e=this.userConfig?.moduleFederation;if(e)return s(e)?e.map(e=>new o(e)):new o(e)}createDependencyCyclePlugin(){if(this.command!==V.SERVER&&this.userConfig?.build?.dependencyCycleCheck)return new r.CircularDependencyRspackPlugin({exclude:/node_modules/,failOnError:!1})}createRspackBuilder(e){let{isLive:t=!1}=e||{};return new Promise((e,n)=>{let i=r(this.rspackConfig);if(t){let t=new f(this.rspackConfig.devServer,i);t.startCallback(t=>{if(t)return n(t);e(void 0)});return}let a=``;i.run((t,r)=>{i.close(i=>t||i?(console.error(t||i),n(t||i)):r?.hasErrors()?(a+=`Build failed with errors.
|
|
7
|
+
`,r.toString({chunks:!1,colors:!0}).split(/\r?\n/).forEach(e=>{a+=` ${e}\n`}),n(Error(a))):e(r?.toString({chunks:!1,colors:!0})))})})}};const Q={WEB:`web`},ke=[new e(`-m, --mode <name>`,`Environment variable`),new e(`-p, --platform <type>`,`build platform type`).default(Q.WEB).choices(Object.values(Q))],$=e=>{switch(e.options.platform){case Q.WEB:new Oe(e);break;default:{let e=Object.values(Q).join(`,`);console.error(`No corresponding compilation service was found, platform: ${e}`),process.exit(1)}}},Ae=e=>{let t=e.command(V.SERVER,{isDefault:!0}).description(`Start local develop serve`).action(e=>{$({command:V.SERVER,options:e})}),n=e.command(V.BUILD).description(`Start build`).action(e=>{$({command:V.BUILD,options:e})});for(let e of ke)t.addOption(e),n.addOption(e)},je=e=>e,Me=Number(process.versions.node.split(`.`)[0]);if(Me<18){let e=n.bgRed.white(` ERROR `);console.error(e+` The Node.js version is greater than v18!`),console.log(),process.exit(1)}t.version(j,`-v, --version`),Ae(t),t.parse();export{je as defineConfig};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ikaros-cli/ikaros",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"url": "https://github.com/umbrella22/ikaros/issues"
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
|
-
"dev": "
|
|
19
|
-
"dts": "
|
|
20
|
-
"build": "
|
|
18
|
+
"dev": "tsdown --watch",
|
|
19
|
+
"dts": "tsdown --dts",
|
|
20
|
+
"build": "tsdown"
|
|
21
21
|
},
|
|
22
22
|
"keywords": [
|
|
23
23
|
"vue",
|
|
@@ -43,8 +43,9 @@
|
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@module-federation/enhanced": "^0.8.12",
|
|
45
45
|
"@rsdoctor/rspack-plugin": "^0.4.13",
|
|
46
|
-
"@rspack/core": "^1.3.
|
|
46
|
+
"@rspack/core": "^1.3.8",
|
|
47
47
|
"@rspack/dev-server": "^1.1.1",
|
|
48
|
+
"@swc/core": "^1.11.24",
|
|
48
49
|
"chalk": "^5.4.1",
|
|
49
50
|
"cli-cursor": "^5.0.0",
|
|
50
51
|
"commander": "^13.1.0",
|
|
@@ -62,16 +63,16 @@
|
|
|
62
63
|
"ora": "^8.2.0",
|
|
63
64
|
"picocolors": "^1.1.1",
|
|
64
65
|
"pretty-bytes": "^6.1.1",
|
|
65
|
-
"
|
|
66
|
+
"radashi": "^12.4.0",
|
|
66
67
|
"sass-loader": "^16.0.5",
|
|
67
68
|
"stylus-loader": "^8.1.1",
|
|
68
69
|
"vue-style-loader": "^4.1.3",
|
|
69
70
|
"yaml": "^2.7.1",
|
|
70
|
-
"zod": "^3.24.
|
|
71
|
+
"zod": "^3.24.3"
|
|
71
72
|
},
|
|
72
73
|
"devDependencies": {
|
|
73
74
|
"@types/fs-extra": "^11.0.4",
|
|
74
75
|
"@types/minimist": "^1.2.5",
|
|
75
|
-
"vitest": "^3.1.
|
|
76
|
+
"vitest": "^3.1.2"
|
|
76
77
|
}
|
|
77
|
-
}
|
|
78
|
+
}
|