@ikaros-cli/ikaros 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin.mjs +2 -2
- package/dist/index.d.mts +13 -13
- package/dist/index.mjs +9 -9
- package/package.json +2 -2
package/bin.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import "./dist/index.mjs";
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "./dist/index.mjs";
|
package/dist/index.d.mts
CHANGED
|
@@ -3,19 +3,19 @@ import * as _rspack_dev_server from '@rspack/dev-server';
|
|
|
3
3
|
import * as _rspack_core from '@rspack/core';
|
|
4
4
|
import { LightningcssLoaderOptions, ModuleFederationPluginOptions, DefinePluginOptions, Plugin, Loader } from '@rspack/core';
|
|
5
5
|
|
|
6
|
-
interface ImportMetaBaseEnv {
|
|
7
|
-
/** 命令行所指定的 mode (-m, --mode) */
|
|
8
|
-
MODE?: string
|
|
9
|
-
/** 路径前缀 */
|
|
10
|
-
BASE?: string
|
|
11
|
-
/** 平台 */
|
|
12
|
-
PLATFORM: 'web'
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
type ImportMetaEnv =
|
|
16
|
-
|
|
17
|
-
interface ImportMeta {
|
|
18
|
-
readonly env: Readonly<ImportMetaEnv & ImportMetaBaseEnv>
|
|
6
|
+
interface ImportMetaBaseEnv {
|
|
7
|
+
/** 命令行所指定的 mode (-m, --mode) */
|
|
8
|
+
MODE?: string
|
|
9
|
+
/** 路径前缀 */
|
|
10
|
+
BASE?: string
|
|
11
|
+
/** 平台 */
|
|
12
|
+
PLATFORM: 'web'
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type ImportMetaEnv = Record<string, any>
|
|
16
|
+
|
|
17
|
+
interface ImportMeta {
|
|
18
|
+
readonly env: Readonly<ImportMetaEnv & ImportMetaBaseEnv>
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/** 命令 */
|
package/dist/index.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
var
|
|
2
|
-
`+ne.bgRed.white(" ERROR ")+" "+
|
|
3
|
-
`+ne.bgYellow.white(" WARNING ")+" "+
|
|
4
|
-
`:console.log(
|
|
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 G}from"commander";var K="@ikaros-cli/ikaros",k="1.1.0";import{Option as De}from"commander";import ft from"chalk";import{rspack as b}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 Re,isArray as Ct}from"radash";import{RspackDevServer as xt}from"@rspack/dev-server";import{join as Oe}from"node:path";import{detect as bt}from"detect-port";import{createRequire as Ye}from"node:module";import{join as le}from"path";import Ke from"node:fs";import pe from"node:fs/promises";import{isObject as Fe}from"radash";import Z from"fs/promises";import{z as i}from"zod";import{join as Ie}from"path";var A=r((o,e)=>{for(let t in e)o[t]=Fe(e[t])&&t in o?A(o[t],e[t]):e[t];return o},"mergeUserConfig");async function N(o){try{let e=Ie(process.cwd(),"node_modules",o);return await Z.access(e,Z.constants.F_OK),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}r(N,"checkDependency");var X=i.object({target:i.enum(["pc","mobile"]).optional().default("pc"),pages:i.custom().optional(),enablePages:i.union([i.array(i.string()),i.boolean()]).optional().default(!1),moduleFederation:i.union([i.custom(),i.array(i.custom())]).optional(),plugins:i.union([i.custom(),i.array(i.custom())]).optional(),loaders:i.array(i.custom()).optional(),experiments:i.custom().optional(),cdnOptions:i.custom().optional(),server:i.object({port:i.number().int().min(1024).max(65535).optional(),proxy:i.custom().optional(),https:i.union([i.boolean(),i.record(i.any())]).optional().default(!1)}).optional(),css:i.object({lightningcssOptions:i.record(i.any()).optional(),sourceMap:i.boolean().optional(),lessOptions:i.record(i.unknown()).optional(),sassOptions:i.record(i.unknown()).optional(),stylusOptions:i.record(i.unknown()).optional()}).optional(),build:i.object({base:i.string().optional().default("/"),assetsDir:i.string().optional(),gzip:i.boolean().optional().default(!1),sourceMap:i.boolean().optional().default(!1),outDirName:i.string().optional().default("dist"),outReport:i.boolean().optional().default(!1),cache:i.boolean().optional().default(!1)}).optional(),resolve:i.object({alias:i.record(i.string()).optional(),extensions:i.array(i.string()).optional()}).optional()});import{dirname as Ae,extname as z,isAbsolute as Ne,join as ze,resolve as ee}from"node:path";import{pathToFileURL as V}from"node:url";import{createRequire as Ve}from"node:module";import{parse as He}from"yaml";import Q from"node:fs";import te from"node:fs/promises";import se 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 a=l.path;if(!a.startsWith(".")&&!Ne(a))return{external:!0}})}}]}),{text:s}=t.outputFiles[0];return{code:s,dependencies:t.metafile?Object.keys(t.metafile.inputs):[]}}r(qe,"transformConfig");var P=Ve(V(ee()));async function Je(o,e,t=!1){if(t){let u=`${o}.timestamp-${Date.now()}-${Math.random().toString(16).slice(2)}`,m=`${u}.mjs`,p=`${V(u)}.mjs`;await te.writeFile(m,e);try{return(await import(p)).default}finally{Q.unlink(m,()=>{})}}let s=z(o),n=Q.realpathSync(o),l=s in P.extensions?s:".js",a=P.extensions[l];P.extensions[l]=(u,m)=>{m===n?u._compile(e,m):a(u,m)},delete I.cache[I.resolve(o)];let c=P(o);return P.extensions[l]=a,c.__esModule?c.default:c}r(Je,"requireConfig");async function We(o,e=!1){let{code:t}=await qe(o,e);return Je(o,t,e)}r(We,"resultConfig");var v=new Map;v.set(".mjs",async o=>(await import(V(o).href)).default);v.set(".ts",async o=>await We(o,!0));v.set(".json",async o=>await se.readJson(o));v.set(".yaml",async o=>{let e=await te.readFile(o,"utf8");return He(e)});async function oe({configFile:o}){let e,t=process.cwd(),s="ikaros.config",n=["ts","mjs","json","yaml"].map(c=>`${ze(t,s)}.${c}`),a=(await Promise.all(n.map(c=>se.pathExists(c)))).findIndex(Boolean);if(!(a<0)){if(e=z(n[a]),t=ee(t,`${s}${e}`),o&&(t=Ae(o),e=z(o)),!v.has(e))throw new Error("No configuration file ! ");return v.get(e)(t)}}r(oe,"resolveConfig");import{isFunction as Ze,isObject as Xe}from"radash";import H from"fs-extra";import{join as B}from"path";import{config as re}from"dotenv";import ne from"chalk";var ie=r(o=>{console.log(`
|
|
2
|
+
`+ne.bgRed.white(" ERROR ")+" "+o)},"errorLog");var y=r(o=>{console.log(`
|
|
3
|
+
`+ne.bgYellow.white(" WARNING ")+" "+o)},"warningLog");var R=r(o=>o?B(q,"env",`.env.${o}`):B(q,"env",".env"),"getEnvPath"),Ge=r(async o=>{if(!await H.pathExists(B(q,"env")))return y("env folder not found"),!1;if(o){if(!await H.pathExists(R(o)))return y(`.env.${o} file not found`),!1}else return await H.pathExists(R())?!0:(y(".env file not found"),!1);return!0},"checkEnv"),q=process.cwd(),ae=r(async o=>await Ge(o)?o?re({path:R(o)}).parsed??{}:re({path:R()}).parsed??{}:{},"getEnv");var O=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=le(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 le(this.context,...e)}async initContextPkg(){let e=this.resolveContext("package.json");try{await pe.access(e,Ke.constants.F_OK)}catch{return}this.contextPkg=JSON.parse(await pe.readFile(e,{encoding:"utf8"}))}async initEnv(){let{platform:e,mode:t}=this.options,s={PLATFORM:e,MODE:t},n=await ae(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 oe({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=X.parse(s)}}startCompile(){switch(this.command){case"server":{this.dev?.();break}case"build":{this.build?.();break}default:break}}};import{join as J}from"path";import{createRequire as Qe}from"node:module";import ce from"node:url";var D=J(process.cwd(),"./"),ue=["...",".mjs",".jsx",".ts",".tsx"],ms=J(D,"tsconfig.json"),me=ce.fileURLToPath(new ce.URL("../",import.meta.url)),de=Qe(me),ge=r((...o)=>J(me,...o),"resolveCLI");import{rspack as j}from"@rspack/core";var fe=r((o,e)=>({loader:o.includes("builtin")?o:de.resolve(o),options:e}),"createLoader"),et=r((o,e)=>{let{lightningcss:t,sourceMap:s}=e??{},n=fe("builtin:lightningcss-loader",{...t}),l=r((a,c)=>{let u=[n],m=e&&e[`${a}`];return a&&a!=="css"&&u.push(fe(`${a}-loader`,Object.assign(m??{},c,{sourceMap:s}))),u},"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"),he=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 ve}from"path";import{isArray as Ce,isEmpty as ye}from"radash";var S=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 Ce(e)?this.list=this.list.concat(e):e&&this.list.push(e),this}end(){return this.list}},L=class extends S{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 he(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}},T=class extends S{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:ve(D,"public"),from:"./",noErrorOnMissing:!0,globOptions:{ignore:["**/index.html",".*"]}}]})),this}useHtmlPlugin(e){return this.add(new j.HtmlRspackPlugin({template:e??ve(D,"index.html")})),this}},M=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(){if(!ye(this.pages)&&Ce(this.enablePages)){let e={},t=[];if(this.enablePages.forEach(s=>{this.pages[s]?e[s]=this.pages[s]:t.push(s)}),t.length&&y(`\u5F53\u524D\u8BBE\u7F6E\u9875\u9762${t.join()}\u4E0D\u5B58\u5728`),ye(e))return;this.pages=e}}},tt=r(({frameworkEnv:o={},extEnv:e={},env:t={}})=>{let s=Object.assign({},A(e,t)),n=Object.fromEntries(Object.entries(s).map(([a,c])=>[`import.meta.env.${a}`,JSON.stringify(c)])),l=Object.fromEntries(Object.entries({...n,...o}).map(([a,c])=>[a,c]));return new j.DefinePlugin(l)},"createEnvPlugin");import{rspack as st}from"@rspack/core";import x from"chalk";import ot from"ora";import nt from"node:os";import U from"pretty-bytes";import it from"easy-table";import rt from"cli-cursor";import at from"node:path";import xe from"node:process";import{isArray as lt}from"radash";var be={name:K,version:k},C="@rspack/ikaros-stats-plugin",Pe=x.hex("#222222"),E=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),rt.hide(),this.isDev?this.initDevHook():this.initProdHook()}progressHandler(e,t,...s){let n=`${(e*100).toFixed(2)}%`;n+=` ${t} `,n+=x.gray(s?.join(" ")),this.lastProgressText!==n&&(this.lastProgressText=n,this.isDev?this.ora.text=`${n}
|
|
4
|
+
`:console.log(n))}updateStartCompileTime(){this.startCompileHrtime=xe.hrtime()}getCurrentEndCompileTime(){let e=xe.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=>`${Pe.bgRed(" ERROR ")} ${n.message.trim()}`).join(`
|
|
5
5
|
|
|
6
|
-
`)}getWarn(e){let{warnings:t,warningsCount:s=0}=e;if(!(!t||s===0))return t.map(
|
|
6
|
+
`)}getWarn(e){let{warnings:t,warningsCount:s=0}=e;if(!(!t||s===0))return t.map(n=>`${Pe.bgYellow(" WARN ")} ${n.message.trim()}`).join(`
|
|
7
7
|
|
|
8
|
-
`)}getEndTips(e,t){let{gray:s,cyan:
|
|
8
|
+
`)}getEndTips(e,t){let{gray:s,cyan:n,red:l,green:a,yellow:c}=x,{errorsCount:u=-1,warningsCount:m=-1}=e,p=(t/1e3).toFixed(2);return u>0?s(`${n(be.name)} compiled with${l(` ${u} error`)}`):m>0?s(`compile ${a("success")} and with ${c(`${m} warning`)}, time: ${p}s`):s(`compile ${a("success")}, time: ${p}s.`)}getTableInfo(e){let{assets:t}=e;if(!t||t.length===0)return;let s=new it,n=this.userConfig?.build?.gzip??!1,l=0,a=0,c=!1;for(let u=0;u<t.length;u++){let{name:m,size:p,related:d,info:h}=t[u];if(h.development)continue;let g=n&<(d)?d.find(f=>f.type==="gzipped").size:0;if(l+=p,a+=g,t.length>20&&u>=4&&u<t.length-1-4){c||(c=!0,s.cell("name","...."),s.cell("size","...."),n&&s.cell("gzip","...."),s.newRow());continue}s.cell("name",m),s.cell("size",U(p)),n&&s.cell("gzip",U(g)),s.newRow()}return s.pushDelimeter(),s.cell("name",`There are ${t.length} files`),s.cell("size",U(l)),n&&s.cell("gzip",U(a)),s.newRow(),x.cyan.dim(s.toString().trim())}getHostList(){let{userConfig:e,compiler:t}=this,{devServer:s}=t.options,n=s?.server==="https"||typeof s?.server=="object",l=Number(s?.port),a=[],c="",u=Object.values(nt.networkInterfaces());if(e){c=e.build?.base??"",(!c||c==="auto")&&(c="/");let p=Object.keys(e?.pages||{})[0];p&&p!=="index"?c=at.join(c,`${p}.html`):c.endsWith("/")||(c+="/")}for(let p of u){let{address:d}=p?.find(h=>h.family==="IPv4")||{};d&&a.push(d)}a.sort((p,d)=>{let h=p.split("."),g=d.split(".");for(let[f]of h.entries())if(p[f]!==g[f])return Number(g[f])-Number(p[f]);return 0});let m=a.indexOf("127.0.0.1");return m!==-1&&(a.splice(m,1),a.unshift("localhost")),a=a.map(p=>(n?(p=`https://${p}`,l!==443&&(p=p+":"+l)):(p="http://"+p,l!==80&&(p=p+":"+l)),new URL(c,p).href)),a}initDevHook(){let{compiler:e,ora:t}=this,s=this.getHostList(),{blue:n,cyan:l,gray:a}=x;e.hooks.environment.intercept({name:C,call(){t.start("Preparing resource files....")}}),e.hooks.watchRun.intercept({name:C,call:r(()=>{t.isSpinning||console.clear(),t.start(),this.updateStartCompileTime()},"call")}),e.hooks.done.intercept({name:C,call:r(c=>{t.stop(),console.clear();let u=c.toJson({preset:"errors-warnings",colors:!0}),{errorsCount:m=0,warningsCount:p=0}=u;if(m>0)console.log(this.getError(u)),console.log();else{p>0&&(console.log(this.getWarn(u)),console.log());let{name:d,version:h}=be,g=`${l(`${d} v${h}`)} entry address:
|
|
9
9
|
|
|
10
|
-
`;for(let f of s)g+=
|
|
11
|
-
`);console.log(a(g))}console.log(this.getEndTips(u,this.getCurrentEndCompileTime())),console.log()},"call")})}initProdHook(){let{compiler:e}=this,t;e.hooks.environment.intercept({name:C,call:
|
|
10
|
+
`;for(let f of s)g+=n(` ${f}
|
|
11
|
+
`);console.log(a(g))}console.log(this.getEndTips(u,this.getCurrentEndCompileTime())),console.log()},"call")})}initProdHook(){let{compiler:e}=this,t;e.hooks.environment.intercept({name:C,call:r(()=>{console.log(x.gray("start build...")),this.updateStartCompileTime()},"call")}),e.hooks.done.intercept({name:C,call:r(s=>{t=s.toJson({preset:"normal",colors:!0,assetsSort:"size"})},"call")}),e.cache.hooks.shutdown.intercept({name:C,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 Ee from"path";var W="@rspack/ikaros-cdn-plugin",mt="https://unpkg.com/:name@:version/:path",dt=":name/:path",we=/:([a-z]+)/gi,w=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(W,t=>{pt.HtmlRspackPlugin.getCompilationHooks(t).alterAssetTags.tapAsync(W,(n,l)=>{try{this.injectResources(n),l(null,n)}catch(a){l(a)}})})}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(a=>{s.push({tagName:"link",voidTag:!0,attributes:{rel:"stylesheet",href:a,...this.options.crossOrigin&&{crossorigin:this.options.crossOrigin}}})})}),t.filter(n=>!n.cssOnly).forEach(n=>{this.getScripts(n).forEach(a=>{s.push({tagName:"script",voidTag:!0,attributes:{src:a,...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(Ee.join(process.cwd(),"node_modules"))(Ee.join(e,"package.json")).version}catch{return console.warn(ut.yellow(`[${W}] \u65E0\u6CD5\u83B7\u53D6\u6A21\u5757 "${e}" \u7684\u7248\u672C\u4FE1\u606F`)),"latest"}}};var $=class extends O{constructor(){super(...arguments);this.isVue=!1;this.isReact=!1}static{r(this,"WebCompileService")}async dev(){await this.initPreConfig(),await this.createRspackBuilder({isLive:!0,config:this.rspackConfig})}async build(){await this.initPreConfig(),await this.createRspackBuilder({isLive:!1,config:this.rspackConfig})}async initPreConfig(){await this.initUserConfig(),await this.initBrowserslist(),await this.initOtherConfig(),this.rspackConfig=await this.createRspackConfig()}async initUserConfig(){let t=this.command==="server",s=this.userConfig;if(this.base=s?.build?.base??"/",t&&Re(this.base)&&/^https?:/.test(this.base)){let n=ft.cyan("build.base");ie(`\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([N("react"),N("vue")]);this.isVue=s,this.isReact=t}catch{}}joinAssetsDir(...t){let s=this.userConfig?.build?.assetsDir??"";return Oe(s,...t).replaceAll("\\","/")}getOutDirPath(){let t=this.userConfig?.build?.outDirName;return Re(t)?this.resolveContext(t):this.resolveContext("dist")}async createRspackConfig(){let t=this.command==="server",s=t?"development":"production",{userConfig:n,context:l,browserslist:a,pages:c,contextPkg:u,port:m,base:p}=this,d=new L({env:s,mode:this.options.mode}),h=new T({env:s,mode:this.options.mode}),g=new M({pages:c,enablePages:n?.enablePages}),{entry:f,plugins:Le}=g.create(),{env:Te,noParse:Me}=this.createVueOrReactConfig(),Ue=d.useDefaultResourceLoader().useDefaultScriptLoader(n?.experiments).useDefaultCssLoader(n?.css).add(n?.loaders).end(),$e=h.useDefaultEnvPlugin({extEnv:{...n?.define},frameworkEnv:Te,env:this.env}).useCopyPlugin().add(Le).add(new E).add(this.createSourceMapPlugin()).add(this.createCssExtractPlugin()).add(this.createDoctorPlugin()).add(this.createGzipPlugin()).add(this.createCdnPlugin()).add(this.createModuleFederationPlugin()).add(n?.plugins).end();return{mode:s,target:["web","es5",`browserslist:${a}`],context:l,entry:f,resolve:{alias:{"@":this.resolveContext("src"),...n?.resolve?.alias},extensions:n?.resolve?.extensions||ue,modules:["node_modules",this.resolveContext("node_modules"),ge("node_modules")]},output:{clean:!0,path:this.getOutDirPath(),publicPath:p,filename:t?"[id].js":this.joinAssetsDir("assets/js/[contenthash].js"),chunkLoadingGlobal:`${u?.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:m,server:(()=>{let F=n?.server?.https;return F?F===!0?"https":{type:"https",options:F}:"http"})(),allowedHosts:"all",proxy:n?.server?.proxy,historyApiFallback:{rewrites:[{from:new RegExp(`^${p}`),to:Oe(p,"index.html")}]},headers:{"Access-Control-Allow-Origin":"*"},static:{directory:this.resolveContext("public"),publicPath:p},client:{logging:"none",overlay:{errors:!0,warnings:!1,runtimeErrors:!1},webSocketURL:`auto://0.0.0.0:${m}/ws`}},experiments:{css:!0},...this.createCacheConfig()}}createSourceMapPlugin(){let{userConfig:t,command:s}=this;if(s==="server")return new b.EvalSourceMapDevToolPlugin({columns:!1,module:!0});if(t?.build?.sourceMap??!1)return new b.SourceMapDevToolPlugin({test:[/.js/,/.mjs/],filename:"[file].map[query]"})}createCssExtractPlugin(){if(this.command!=="server")return new b.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 b.LightningCssMinimizerRspackPlugin,new b.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 w(t)}createModuleFederationPlugin(){let t=this.userConfig?.moduleFederation;if(t)return Ct(t)?t.map(s=>new ke(s)):new ke(t)}createRspackBuilder({isLive:t,config:s}){return new Promise((n,l)=>{let a=b(s);if(t){new xt(s.devServer,a).startCallback(m=>{if(m)return l(m);n(void 0)});return}let c="";a.run((u,m)=>{a.close(p=>u||p?(console.error(u||p),l(u||p)):m?.hasErrors()?(c+=`Build failed with errors.
|
|
12
12
|
`,m.toString({chunks:!1,colors:!0}).split(/\r?\n/).forEach(d=>{c+=` ${d}
|
|
13
|
-
`}),l(new Error(c))):
|
|
13
|
+
`}),l(new Error(c))):n(m?.toString({chunks:!1,colors:!0})))})})}};var _={WEB:"web"},Pt=[new De("-m, --mode <name>","Environment variable"),new De("-p, --platform <type>","build platform type").default(_.WEB).choices(Object.values(_))],je=r(o=>{switch(o.options.platform){case _.WEB:{new $(o);break}default:{let e=Object.values(_).join(",");console.error(`No corresponding compilation service was found, platform: ${e}`),process.exit(1)}}},"startCompile"),Se=r(o=>{let e=o.command("server",{isDefault:!0}).description("Start local develop serve").action(s=>{je({command:"server",options:s})}),t=o.command("build").description("Start build").action(s=>{je({command:"build",options:s})});for(let s of Pt)e.addOption(s),t.addOption(s)},"commander");var vo=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)}G.version(k,"-v, --version");Se(G);G.parse();export{vo as defineConfig};
|
package/package.json
CHANGED