UNPKG

edon-service

Version:

一个开箱即用的前端构建工具,基于Webpack封装,简化了前端项目的开发与构建流程。无论是开发环境的热更新、资源处理,还是生产环境的代码优化、打包部署,都能提供便捷的配置和稳定的性能

20 lines (19 loc) 22 kB
#!/usr/bin/env node var L=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+o+'" is not supported')});import{Command as Oe}from"commander";import te from"webpack";import Fe from"webpack-dev-server";import{merge as Te}from"webpack-merge";import We from"fs-extra";import ne from"portfinder";import{getDotEnvObject as ie}from"edon-helper";import{fileURLToPath as ae}from"url";function n(){return process.env.NODE_ENV==="production"}var B=async(o,t)=>{let e=3e3,r=await ie(o);if(r.PORT&&(e=+JSON.parse(r.PORT)),t&&(e=t),e===80)return 80;try{return await ne.getPortPromise({port:e,stopPort:e+10})}catch(s){throw new Error((s==null?void 0:s.message)||"No open ports found")}},W=()=>{if(typeof __filename<"u")return __filename;try{let o=import.meta.url;if(!o)throw new Error("\u8BF7\u5728 ESM \u73AF\u5883\u4E0B\u4F20\u5165 import.meta");return ae(o)}catch{return typeof __filename<"u"?__filename:""}};import{register as le}from"ts-node";import{getDefineConfig as ce}from"edon-define";import{joinRoot as v}from"edon-helper";le({compilerOptions:{module:"CommonJS"}});var x={entryPath:v("src/index.tsx"),outputPath:v("dist"),assetsPath:"assets",publicPath:"/",cdnAddress:"",antdDayjs:!1,autoTypingEnvTypeFile:!0,swagger:[],errorOverlay:!1,extraIncludes:[],forkTSChecker:!1,zipPassword:"123456",devServer:{},http2:!1,limit:10*1024,rem:{enable:!1},styleLoader:!1,cacheDirectory:v("node_modules",".cache","webpack"),statsDirectory:v("node_modules",".edon"),nodePolyfill:!1,legacy:{targets:{chrome:"53",safari:"10"},corejs:"3.24"},svgmin:!0,html:{template:v("public/index.html"),filename:"index.html",hash:n(),inject:"body",minify:{removeComments:n(),collapseWhitespace:n(),removeRedundantAttributes:n(),useShortDoctype:n(),removeEmptyAttributes:n(),removeStyleLinkTypeAttributes:n(),keepClosingSlash:n(),minifyJS:n(),minifyCSS:n(),minifyURLs:n()},chunksSortMode:"auto"}},P=async()=>{let o=await ce({});return{...x,...o,rem:{...x.rem,...o.rem},html:{...x.html,...o.html},legacy:{...x.legacy,...o.legacy}}};import $ from"path";import Re from"webpack-chain";import ue from"mini-css-extract-plugin";import de from"html-webpack-plugin";import{CleanWebpackPlugin as fe}from"clean-webpack-plugin";import d from"chalk";import pe from"webpack";import U from"path";var R=class{constructor(){this.lastPercent=0;this.startTime=Date.now();this.lastUpdate=Date.now();this.changedFiles=[];this.isRunning=!1}apply(t){t.hooks.watchRun.tap("EnhancedProgressPlugin",e=>{e.modifiedFiles&&(this.changedFiles=Array.from(e.modifiedFiles)),this.isRunning||(this.isRunning=!0,this.lastPercent=0,this.startTime=Date.now(),this.lastUpdate=Date.now(),console.log(d.cyan(` \u{1F504} \u5F00\u59CB\u7F16\u8BD1...`))),this.changedFiles.length>0&&(this.changedFiles.length===1?this.changedFiles.forEach(r=>{let s=U.relative(process.cwd(),r);console.log(` ${d.yellow("\u{1F4DD} \u53D8\u66F4\u6587\u4EF6: ")}${d.gray(`${s}`)} `)}):(console.log(d.yellow(` \u{1F4DD} \u53D8\u66F4\u6587\u4EF6:`)),this.changedFiles.forEach(r=>{let s=U.relative(process.cwd(),r);console.log(d.gray(` - ${s}`))}),console.log(` `)))}),new pe.ProgressPlugin(e=>{if(!this.isRunning)return;let r=Date.now();if(r-this.lastUpdate<100)return;let s=Math.floor(e*100);if(s>=this.lastPercent){process.stdout.clearLine(0),process.stdout.cursorTo(0);let i=this.generateProgressBar(s);process.stdout.write(`\u{1F680} ${d.cyan("\u7F16\u8BD1")} ${i} ${d.green(s+"%")}`),this.lastPercent=s,this.lastUpdate=r}}).apply(t),t.hooks.done.tap("EnhancedProgressPlugin",e=>{var c,a;let s=(Date.now()-this.startTime)/1e3;this.isRunning=!1,process.stdout.clearLine(0),process.stdout.cursorTo(0);let i=this.generateProgressBar(100);if(process.stdout.write(`\u{1F680} ${d.cyan("\u7F16\u8BD1")} ${i} ${d.green("100%")} `),e.hasErrors()||e.hasWarnings()){let l=e.toJson();e.hasErrors()&&(console.log(d.red(` \u274C \u7F16\u8BD1\u9519\u8BEF:`)),(c=l.errors)==null||c.forEach(p=>{console.log(d.red(` - ${p.message}`))})),e.hasWarnings()&&(console.log(d.yellow(` \u26A0\uFE0F \u7F16\u8BD1\u8B66\u544A:`)),(a=l.warnings)==null||a.forEach(p=>{console.log(d.yellow(` - ${p.message}`))}))}console.log(d.green(` \u2705 \u7F16\u8BD1\u5B8C\u6210\uFF01\u231B \u8017\u65F6: ${s.toFixed(2)}s `))})}generateProgressBar(t){let r=Math.floor(20*t/100),s=20-r,i;return t===100?i="#".repeat(r-1)+"-".repeat(s):i="#".repeat(r)+"\u{1F680}"+"-".repeat(Math.max(0,s-1)),`[${i}]`}},V=R;import ge from"@pmmmwh/react-refresh-webpack-plugin";import he from"copy-webpack-plugin";import m from"chalk";import me from"webpack";import{convertBytesSize as j}from"edon-helper";var A=class{constructor(){this.startTime=0;this.lastPercent=0;this.lastUpdate=0;this.isRunning=!1}apply(t){t.hooks.beforeRun.tap("BuildCompilePlugin",()=>{this.startTime=Date.now(),this.lastPercent=0,this.lastUpdate=Date.now(),this.isRunning=!0}),new me.ProgressPlugin(e=>{if(!this.isRunning)return;let r=Date.now();if(r-this.lastUpdate<100)return;let s=Math.floor(e*100);if(s!==this.lastPercent){process.stdout.clearLine(0),process.stdout.cursorTo(0);let i=this.generateProgressBar(s);process.stdout.write(`\u{1F528} ${m.blue("\u6784\u5EFA\u4E2D")} ${i} ${m.green(s+"%")}`),this.lastPercent=s,this.lastUpdate=r}}).apply(t),t.hooks.done.tap("BuildCompilePlugin",e=>{var c,a;this.isRunning=!1;let s=(Date.now()-this.startTime)/1e3;if(process.stdout.clearLine(0),process.stdout.cursorTo(0),e.hasErrors()){console.log(m.red(` \u274C \u6784\u5EFA\u5931\u8D25\uFF0C\u5B58\u5728\u9519\u8BEF:`)),(c=e.toJson().errors)==null||c.forEach((p,u)=>{console.log(m.red(` \u9519\u8BEF ${u+1}:`)),console.log(m.red(` ${p.message}`)),p.stack&&console.log(m.gray(` \u5806\u6808: ${p.stack.substring(0,200)}...`))}),console.log(m.red(` \u8BF7\u4FEE\u590D\u4E0A\u8FF0\u9519\u8BEF\u540E\u91CD\u65B0\u6784\u5EFA\u3002`));return}e.hasWarnings()&&(console.log(m.yellow(` \u26A0\uFE0F \u6784\u5EFA\u5B58\u5728\u8B66\u544A:`)),(a=e.toJson().warnings)==null||a.forEach((p,u)=>{console.log(m.yellow(` ${u+1}. ${p.message.substring(0,150)}`))}));let i=this.displayBuildStats(e);console.log(m.green(` \u2705 \u6784\u5EFA\u6210\u529F\uFF01`)),console.log(m.gray(`\u603B\u8BA1: ${i}`)),console.log(m.gray(`\u603B\u8017\u65F6: ${s.toFixed(2)}s`)),console.log(m.gray(`\u5B8C\u6210\u65F6\u95F4: ${new Date().toLocaleTimeString()} `))})}generateProgressBar(t){let r=Math.floor(20*t/100),s=20-r,i;return t===100?i="#".repeat(r-1)+"-".repeat(s):i="#".repeat(r)+"\u{1F680}"+"-".repeat(Math.max(0,s-1)),`[${i}]`}displayBuildStats(t){let r=t.toJson().assets||[];if(r.length===0)return j(0);let s=r.length>10,i=s?`\uFF08\u5171${r.length}\u4EFD\u6587\u4EF6\uFF0C\u53EA\u663E\u793A\u524D10\u4EFD\uFF09`:"";console.log(m.cyan(` \u{1F4CA} \u6784\u5EFA\u7ED3\u679C\u7EDF\u8BA1${i}:`)),[...r].sort((l,p)=>(p.size||0)-(l.size||0)).filter(l=>!l.name.includes("/images/")).slice(0,10).forEach(l=>{l.name&&l.size&&console.log(` ${m.gray("-")} ${m.white(l.name.padEnd(45," "))} ${m.green(j(l.size))}`)}),s&&console.log(` ${m.gray("-")} \u5176\u4ED6\u7701\u7565...`);let a=r.reduce((l,p)=>l+(p.size||0),0);return j(a)}},N=A;import{joinRoot as z}from"edon-helper";import{VueLoaderPlugin as be}from"vue-loader";import ve from"unplugin-auto-import/webpack";import ye from"unplugin-vue-components/webpack";import{ElementPlusResolver as H}from"unplugin-vue-components/resolvers";import we from"webpack";var q=(o,t,e)=>{let{html:r,forkTSChecker:s,framework:i,uiFramework:c,elementPlusOptions:a}=t,l=i==="vue",p=i==="react",u=c==="element-plus";return l&&o.plugin("vue-loader-plugin").use(be).end(),u&&(o.plugin("auto-import").use(ve({resolvers:[H()],dts:`${(a==null?void 0:a.dtsDir)||"./types"}/auto-import.d.ts`})),o.plugin("components").use(ye({resolvers:[H({importStyle:(a==null?void 0:a.importStyle)||"css"})],dts:`${(a==null?void 0:a.dtsDir)||"./types"}/components.d.ts`,include:[/\.vue$/,/\.vue\?vue/,/\.[tj]sx?$/],exclude:[/[\\/]node_modules[\\/]/]}))),n()?(o.plugin("build-compile-info").use(N),o.plugin("mini-css-extract").use(ue,[{filename:"assets/css/[name].[contenthash:8].css",chunkFilename:"assets/css/[name].[contenthash:8].chunk.css"}])):(o.plugin("clean").use(fe),o.plugin("compile-info").use(V),p&&o.plugin("react-refresh").use(ge).tap(()=>[{overlay:!1,include:/\.(jsx|tsx)$/,exclude:[/node_modules/,/\.test\.(js|ts)x?$/]}]),s&&o.plugin("fork-ts-checker").use(L.resolve("fork-ts-checker-webpack-plugin"),[{typescript:{configFile:z("tsconfig.json"),memoryLimit:4096},async:!0,issue:{include:[{file:"**/*.{ts,tsx,vue}"},{file:"**/*.{js,jsx,vue}"}],exclude:[{file:"**/node_modules/**/*"}]}}])),o.plugin("define").use(we.DefinePlugin,[{"process.env":e,env:e}]),o.plugin("html").use(de,[{template:(r==null?void 0:r.template)||z("public/index.html"),filename:(r==null?void 0:r.filename)||"index.html",inject:(r==null?void 0:r.inject)==="body"?"body":(r==null?void 0:r.inject)==="head"?"head":!0,minify:n()?{...r==null?void 0:r.minify,collapseWhitespace:!0,removeComments:!0}:!1}]),o.plugin("copy-public").use(he,[{patterns:[{from:z("public"),to:o.output.get("path"),globOptions:{ignore:["**/index.html","**/.DS_Store","**/unused-*","**/large-assets/**/*"]},noErrorOnMissing:!0}]}]),o};import{safeRequire as J}from"edon-helper";var Q=o=>{let t=o.module.rule("images").test(/\.(png|jpe?g|gif|webp)$/i);return t.set("type","asset"),t.set("generator",{filename:`assets/images/${n()?"[name].[contenthash:8][ext]":"[name].[hash:8][ext]"}`}),t.set("parser",{dataUrlCondition:{maxSize:n()?4*1024:10*1024}}),o.module.rule("svg-resource").test(/\.svg$/).exclude.add(/\.inline\.svg$/).add(/src\/icons\/svg\//).end().set("type","asset/resource").set("generator",{filename:`assets/svgs/${n()?"[name].[contenthash:8][ext]":"[name].[hash:8][ext]"}`}),o.module.rule("svg-component").test(/(\.inline\.svg$|src\/icons\/svg\/.*\.svg$)/).use("@svgr/webpack").loader(J.resolve("@svgr/webpack")).options({svgo:n(),svgoConfig:n()?{plugins:[{name:"removeViewBox",active:!1},{name:"removeEmptyAttrs",active:!0},{name:"cleanupIds",active:!0},{name:"removeUselessDefs",active:!0}]}:{plugins:[{name:"removeViewBox",active:!1}]},icon:!0,dimensions:!1}).end().use("url-loader").loader(J.resolve("url-loader")).options({limit:10*1024,name:`assets/svgs/${n()?"[name].[contenthash:8][ext]":"[name].[hash:8][ext]"}`}),o};import G from"mini-css-extract-plugin";import{isEmpty as ke,safeRequire as y}from"edon-helper";import Ce from"autoprefixer";import xe from"postcss-pxtorem";var w=(o,t,e,r)=>{let{rem:s={},isVue:i=!1}=r||{},c=o.module.rule(t).test(e),a=!n(),l=n()?{}:{injectType:"styleTag",esModule:!0},p=u=>{var C,O;return u.use("css-loader").loader(y.resolve("css-loader")).options({importLoaders:2,sourceMap:a,modules:{auto:se=>/\.module\.(css|less)$/.test(se),localIdentName:n()?"[local]-[hash:base64:8]":"[local]-[hash:base64:5]"}}).end().use("postcss-loader").loader(y.resolve("postcss-loader")).options({postcssOptions:{parser:"postcss-safe-parser",plugins:[Ce(),s!=null&&s.enable?xe(ke((C=r==null?void 0:r.rem)==null?void 0:C.options)?{rootValue:10,propList:["*"],selectorBlackList:["ignore-","#root","html"],replace:!0,mediaQuery:!1,minPixelValue:1}:(O=r==null?void 0:r.rem)==null?void 0:O.options):!1].filter(Boolean)},sourceMap:a}).end()};return i?(p(c.oneOf("vue-sfc-style").resourceQuery(/\?vue/).use("vue-style-loader").loader(y.resolve("vue-style-loader")).options({sourceMap:a}).end()),p(c.oneOf("vue-normal-style").use("style-loader").loader(n()?G.loader:y.resolve("style-loader")).when(Object.keys(l).length>0,u=>u.options(l)).end())):p(c.use("style-loader").loader(n()?G.loader:y.resolve("style-loader")).when(Object.keys(l).length>0,u=>u.options(l)).end()),c};import{safeRequire as b}from"edon-helper";import Pe from"os";var K=(o,t)=>{let{framework:e,rem:r}=t,s=e==="vue",i=e==="react";s&&o.module.rule("vue").test(/\.vue$/).use("vue-loader").loader(b.resolve("vue-loader")).options({cacheDirectory:!n(),cacheIdentifier:`vue-loader-${n()?"prod":"dev"}`});let c=o.module.rule("compile").test(/\.[jt]sx?$/).exclude.add(/node_modules/).end().resourceQuery({not:[/vue/]});n()||c.use("thread-loader").loader(b.resolve("thread-loader")).options({workers:Math.max(2,Math.min(Pe.cpus().length-1,4))}).end();try{let a={jsc:{parser:{syntax:"typescript",tsx:!0,jsx:!0},target:n()?"es2015":"es2020",externalHelpers:n(),transform:{}},cacheDirectory:!n(),cacheCompression:n(),sourceMaps:!n(),isModule:!0};i&&(a.jsc.transform.react={refresh:!n(),runtime:"automatic",development:!n()}),c.use("swc-loader").loader(b.resolve("swc-loader")).options({...a})}catch{c.use("babel-loader").loader(b.resolve("babel-loader")).options({presets:["@babel/preset-env","@babel/preset-typescript","@babel/preset-react"],plugins:[n()&&"@babel/plugin-transform-runtime",!n()&&"react-refresh/babel"].filter(Boolean),cacheDirectory:!0})}return Q(o),w(o,"css",/\.css$/,{rem:r,isVue:s}),w(o,"less",/\.less$/,{rem:r,isVue:s}).use("less-loader").loader(b.resolve("less-loader")).options({lessOptions:{javascriptEnabled:!0,math:"always"},sourceMap:!n()}),w(o,"scss",/\.s[ac]ss$/,{rem:r,isVue:s}).use("sass-loader").loader(b.resolve("sass-loader")).options({sourceMap:!n(),sassOptions:{outputStyle:n()?"compressed":"expanded"}}),w(o,"stylus",/\.styl$/,{rem:r,isVue:s}).use("stylus-loader").loader(b.resolve("stylus-loader")).options({sourceMap:!n()}),o};import{EsbuildPlugin as X}from"esbuild-loader";var Y=(o,t)=>{let{framework:e,uiFramework:r}=t,s=e==="vue",i=e==="react",c=r==="antd",a=r==="element-plus";return o.optimization.splitChunks({chunks:"all",minSize:2e4,maxSize:7e4,minChunks:2,maxAsyncRequests:30,maxInitialRequests:30,cacheGroups:{vendors:{test:/[\\/]node_modules[\\/]/,priority:-10,reuseExistingChunk:!0},...i&&{react:{test:/[\\/]node_modules[\\/](react|react-dom|react-router)[\\/]/,name:"react-vendor",priority:20,reuseExistingChunk:!0}},...s&&{vue:{test:/[\\/]node_modules[\\/](vue|vue-router|pinia)[\\/]/,name:"vue-vendor",priority:20,reuseExistingChunk:!0}},...c&&{antd:{test:/[\\/]node_modules[\\/]antd[\\/]/,name:"antd-vendor",priority:15,reuseExistingChunk:!0}},...a&&{elementPlus:{test:/[\\/]node_modules[\\/]element-plus[\\/]/,name:"element-vendor",priority:15,reuseExistingChunk:!0}}}}).runtimeChunk("multiple"),n()?(o.optimization.minimizer("js").use(X,[{target:s?"es2016":"es2015",css:!1,minify:!0,legalComments:"none",drop:["console","debugger"]}]),o.optimization.minimizer("css").use(X,[{target:"es2015",minify:!0,css:!0}]),o.optimization.usedExports(!0).concatenateModules(!0)):o.optimization.removeAvailableModules(!1).removeEmptyChunks(!1).splitChunks({chunks:"all",minSize:1/0}).minimize(!1),o};import Ee from"path";import $e from"fs-extra";import Z from"mini-css-extract-plugin";import De from"speed-measure-webpack-plugin";import{joinRoot as Se}from"edon-helper";import{BundleAnalyzerPlugin as Ie}from"webpack-bundle-analyzer";var ee=(o,t,e)=>{var i,c,a;let{statsDirectory:r}=t,s=Ee.join(r||Se("node_modules",".edon"),"webpack.config.js");if($e.writeFileSync(s,`module.exports = ${o.toString()}`,{encoding:"utf8"}),e.analyzer&&o.plugin("analyzer").use(Ie,[{analyzerMode:"server",analyzerHost:"localhost",analyzerPort:8888,reportFilename:"bundle-report.html",defaultSizes:"gzip",openAnalyzer:!0,generateStatsFile:!0,statsFilename:"stats.json",statsOptions:{source:!1,modules:!0,chunks:!0,assets:!0},excludeAssets:[/\.map$/],logLevel:"info"}]),e.speed){let l=o.toConfig(),p=(i=l==null?void 0:l.plugins)==null?void 0:i.filter(C=>!(C instanceof Z));l.plugins=[...p];let u=new De().wrap(l);return(a=(c=u==null?void 0:u.plugins)==null?void 0:c.push)==null||a.call(c,new Z({})),u}return o};import{joinRoot as E}from"edon-helper";var oe=(o,t,e)=>{let{errorOverlay:r,cacheDirectory:s}=t;return o.devServer.hot(!0).open(!0).port((e==null?void 0:e.port)||3e3).host((e==null?void 0:e.host)||"0.0.0.0").historyApiFallback(!0).merge({client:{logging:"none",overlay:{errors:r??!0,warnings:!1},progress:!0,webSocketTransport:"ws"},devMiddleware:{stats:{all:!1,errors:!0,warnings:!0,timings:!0},writeToDisk:!0},watchFiles:{paths:["src/**/*","public/**/*"],options:{aggregateTimeout:100,poll:300,followSymlinks:!1,ignored:/node_modules/}},static:{directory:E("public"),watch:{poll:300,ignored:/node_modules/}},headers:{"Access-Control-Allow-Origin":"*"}}),o.merge({cache:{type:"filesystem",buildDependencies:{config:[W()],tsconfig:[E("tsconfig.json")],packagejson:[E("package.json")]},name:"development-cache",version:"1.0.0",cacheDirectory:s||E("node_modules",".cache","webpack"),compression:n()?"gzip":!1,maxAge:864e5},infrastructureLogging:{level:"none",debug:!1},stats:{logging:"none",loggingDebug:!1,loggingTrace:!1}}),o};import re from"fs-extra";import{generateEnvTypes as je,getDotEnvObject as Ae,joinRoot as F}from"edon-helper";var ze=async(o,t)=>{let e=new Re,r=await Ae(o.mode);await je("edon-service",r);let s=await P(),i=o.mode==="prod"?"production":"development";process.env.NODE_ENV=i,s.cacheDirectory&&re.ensureDirSync(s.cacheDirectory),s.statsDirectory&&re.ensureDirSync(s.statsDirectory);let{entryPath:c,outputPath:a,chainWebpack:l}=s;e.mode(i),e.set("target",["web",n()?"es5":void 0].filter(Boolean)),e.entry("index").add(c||F("src/index.tsx")).end(),e.output.path(a||F("dist")).publicPath("/").filename(`assets/js/[name]${n()?".[contenthash:8]":""}.js`).pathinfo(!n()),n()?o.sourceMap?e.devtool("hidden-source-map").end():e.devtool(!1).end():e.devtool("eval-cheap-module-source-map").end(),e.resolve.extensions.merge([".tsx",".ts",".json",".js",".jsx",".vue"]).end(),e.resolve.alias.set("src",$.resolve(process.cwd(),"src")).set("assets",F("public/assets")).end(),s.framework==="react"?e.resolve.alias.set("react",$.resolve(process.cwd(),"node_modules/react")).set("react-dom",$.resolve(process.cwd(),"node_modules/react-dom")).end():s.framework==="vue"&&e.resolve.alias.set("vue",$.resolve(process.cwd(),"node_modules/vue")).end(),e.resolve.symlinks(!0).end(),e.performance.hints(!1),q(e,s,r),K(e,s),Y(e,s),l&&await l(e,{isProd:n(),dotEnv:r,mode:o.mode}),n()||oe(e,s,t);let p=ee(e,s,o);return o.speed?p:e.toConfig()},T=ze;import h from"chalk";var D={padding:0,margin:0,borderStyle:"round",borderColor:"blue"},S=async()=>{let{default:o}=await import("boxen");return o},g={info:async(o,t={})=>{if(t.simple){console.log(h.blue(`\u2139\uFE0F ${o}`));return}let e=await S();console.log(e(h.blue(o),{...D,...t,borderColor:t.borderColor||"blue"}))},success:async(o,t={})=>{if(t.simple){console.log(h.green(`\u2705 ${o}`));return}let e=await S();console.log(e(h.green(o),{...D,...t,borderColor:t.borderColor||"green"}))},error:async(o,t={})=>{if(t.simple){console.error(h.red(`\u274C ${o}`));return}let e=await S();console.error(e(h.red(o),{...D,...t,borderColor:t.borderColor||"red"}))},warning:async(o,t={})=>{if(t.simple){console.warn(h.yellow(`\u26A0\uFE0F ${o}`));return}let e=await S();console.warn(e(h.yellow(o),{...D,...t,borderColor:t.borderColor||"yellow"}))},progress:async o=>{console.log(h.cyan(`\u{1F504} ${o}`))}};import{getLocalIPs as Me,joinRoot as M}from"edon-helper";var _=class{setEnv(t){process.env.NODE_ENV=t}checkArgv(t,e){t.mode||(e(),process.exit(1))}async start(t){this.setEnv(t.mode==="prod"?"production":"development");let e=await B(t.mode,t.port),r=Me(),s=await T(t,{port:e}),i=te(s),c=await P(),a={port:e,hot:!0,liveReload:!1,open:!1,compress:!0,host:"0.0.0.0",server:c.http2?"spdy":"http",historyApiFallback:!0,setupExitSignals:!1,allowedHosts:"all",static:{directory:M("public","source"),watch:!0},devMiddleware:{stats:"errors-only",writeToDisk:!1},client:{logging:"warn",overlay:c.errorOverlay,progress:!0,reconnect:!0},watchFiles:{paths:[M("src"),M("public")],options:{followSymlinks:!0,ignored:["**/node_modules/**","**/.git/**","**/dist/**"],usePolling:!1,interval:100,aggregateTimeout:300,awaitWriteFinish:{stabilityThreshold:200,pollInterval:50}}}};if(!i)return Promise.reject(new Error("compiler is null"));let l=new Fe(Te(a,(c==null?void 0:c.devServer)||{}),i);if(await g.success("\u5F00\u53D1\u670D\u52A1\u5668\u542F\u52A8\u5728:",{simple:!0}),await g.success(`- \u672C\u5730\u8BBF\u95EE: http://localhost:${e}`,{simple:!0}),r.ipv4.length>0)if(r.ipv4.length===1)await g.success(`- IP\u8BBF\u95EE: http://${r.ipv4[0]}:${e}`,{simple:!0});else{await g.success("- \u7F51\u7EDC\u8BBF\u95EE (IPv4):",{simple:!0});for(let p of r.ipv4)await g.success(` http://${p}:${e}`,{simple:!0})}await l.start()}async build(t){this.setEnv(t.mode==="prod"?"production":"development");let e=await T(t),r=te(e);r==null||r.run(()=>{})}},k=new _;var I="1.0.4-beta.36";var f=new Oe;f.name("edon-service");f.version(I,"-v, --version","\u663E\u793A\u5F53\u524D\u7248\u672C\u53F7").action(()=>{g.info(`\u5F53\u524D\u7248\u672C\u53F7\uFF1Av${I}`,{simple:!0})});f.command("start [root]").description("Start the development server").option("-m, --mode <mode>","Set the environment mode (mock|dev|stage|uat|prod)","dev").option("--speed","Enable speed measurement for webpack").option("-p, --port <port>","Set the port number for the server").option("-f, --force","Force rebuild without cache").option("--analyzer","\u542F\u7528\u6253\u5305\u5206\u6790").action(async(o,t)=>{k.checkArgv(t,f.helpInformation.bind(f)),await k.start(t)});f.command("build [root]").description("\u6784\u5EFA\u751F\u4EA7\u73AF\u5883\u4EE3\u7801").option("-m, --mode <mode>","\u8BBE\u7F6E\u73AF\u5883\u6A21\u5F0F (stage|uat|prod)","prod").option("--speed","\u542F\u7528 webpack \u901F\u5EA6\u6D4B\u91CF").option("-f, --force","\u5F3A\u5236\u91CD\u65B0\u6784\u5EFA\uFF0C\u4E0D\u4F7F\u7528\u7F13\u5B58").option("--analyzer","\u542F\u7528\u6253\u5305\u5206\u6790").action(async(o,t)=>{try{k.checkArgv(t,f.helpInformation.bind(f)),await k.build(t)}catch(e){await g.error(`\u6784\u5EFA\u51FA\u9519: ${e}`,{simple:!0}),process.exit(1)}});f.command("version").description("\u663E\u793A\u5F53\u524D\u7248\u672C\u53F7").action(()=>{g.info(`\u5F53\u524D\u7248\u672C\u53F7: ${I}`,{simple:!0})});f.showHelpAfterError("(add --help for additional information)");f.parse(process.argv);