edon-service
Version:
一个开箱即用的前端构建工具,基于Webpack封装,简化了前端项目的开发与构建流程。无论是开发环境的热更新、资源处理,还是生产环境的代码优化、打包部署,都能提供便捷的配置和稳定的性能
20 lines (19 loc) • 23.2 kB
JavaScript
;var Fe=Object.create;var Q=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Oe=Object.prototype.hasOwnProperty;var Le=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Me(t))!Oe.call(e,s)&&s!==o&&Q(e,s,{get:()=>t[s],enumerable:!(r=Te(t,s))||r.enumerable});return e};var p=(e,t,o)=>(o=e!=null?Fe(_e(e)):{},Le(t||!e||!e.__esModule?Q(o,"default",{value:e,enumerable:!0}):o,e));var Ae=require("commander");var H=p(require("webpack")),Re=p(require("webpack-dev-server")),je=require("webpack-merge");var Be=p(require("fs-extra")),G=p(require("portfinder")),K=require("edon-helper"),X=require("url"),We={};function n(){return process.env.NODE_ENV==="production"}var Y=async(e,t)=>{let o=3e3,r=await(0,K.getDotEnvObject)(e);if(r.PORT&&(o=+JSON.parse(r.PORT)),t&&(o=t),o===80)return 80;try{return await G.default.getPortPromise({port:o,stopPort:o+10})}catch(s){throw new Error((s==null?void 0:s.message)||"No open ports found")}},Z=()=>{if(typeof __filename<"u")return __filename;try{let e=We.url;if(!e)throw new Error("\u8BF7\u5728 ESM \u73AF\u5883\u4E0B\u4F20\u5165 import.meta");return(0,X.fileURLToPath)(e)}catch{return typeof __filename<"u"?__filename:""}};var ee=require("ts-node"),oe=require("edon-define"),k=require("edon-helper");(0,ee.register)({compilerOptions:{module:"CommonJS"}});var S={entryPath:(0,k.joinRoot)("src/index.tsx"),outputPath:(0,k.joinRoot)("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:(0,k.joinRoot)("node_modules",".cache","webpack"),statsDirectory:(0,k.joinRoot)("node_modules",".edon"),nodePolyfill:!1,legacy:{targets:{chrome:"53",safari:"10"},corejs:"3.24"},svgmin:!0,html:{template:(0,k.joinRoot)("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"}},I=async()=>{let e=await(0,oe.getDefineConfig)({});return{...S,...e,rem:{...S.rem,...e.rem},html:{...S.html,...e.html},legacy:{...S.legacy,...e.legacy}}};var E=p(require("path")),Ie=p(require("webpack-chain"));var ie=p(require("mini-css-extract-plugin"));var ae=p(require("html-webpack-plugin")),le=require("clean-webpack-plugin");var f=p(require("chalk")),re=p(require("webpack")),T=p(require("path")),M=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",o=>{o.modifiedFiles&&(this.changedFiles=Array.from(o.modifiedFiles)),this.isRunning||(this.isRunning=!0,this.lastPercent=0,this.startTime=Date.now(),this.lastUpdate=Date.now(),console.log(f.default.cyan(`
\u{1F504} \u5F00\u59CB\u7F16\u8BD1...`))),this.changedFiles.length>0&&(this.changedFiles.length===1?this.changedFiles.forEach(r=>{let s=T.default.relative(process.cwd(),r);console.log(`
${f.default.yellow("\u{1F4DD} \u53D8\u66F4\u6587\u4EF6: ")}${f.default.gray(`${s}`)}
`)}):(console.log(f.default.yellow(`
\u{1F4DD} \u53D8\u66F4\u6587\u4EF6:`)),this.changedFiles.forEach(r=>{let s=T.default.relative(process.cwd(),r);console.log(f.default.gray(` - ${s}`))}),console.log(`
`)))}),new re.default.ProgressPlugin(o=>{if(!this.isRunning)return;let r=Date.now();if(r-this.lastUpdate<100)return;let s=Math.floor(o*100);if(s>=this.lastPercent){process.stdout.clearLine(0),process.stdout.cursorTo(0);let i=this.generateProgressBar(s);process.stdout.write(`\u{1F680} ${f.default.cyan("\u7F16\u8BD1")} ${i} ${f.default.green(s+"%")}`),this.lastPercent=s,this.lastUpdate=r}}).apply(t),t.hooks.done.tap("EnhancedProgressPlugin",o=>{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} ${f.default.cyan("\u7F16\u8BD1")} ${i} ${f.default.green("100%")}
`),o.hasErrors()||o.hasWarnings()){let l=o.toJson();o.hasErrors()&&(console.log(f.default.red(`
\u274C \u7F16\u8BD1\u9519\u8BEF:`)),(c=l.errors)==null||c.forEach(m=>{console.log(f.default.red(` - ${m.message}`))})),o.hasWarnings()&&(console.log(f.default.yellow(`
\u26A0\uFE0F \u7F16\u8BD1\u8B66\u544A:`)),(a=l.warnings)==null||a.forEach(m=>{console.log(f.default.yellow(` - ${m.message}`))}))}console.log(f.default.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}]`}},te=M;var ce=p(require("@pmmmwh/react-refresh-webpack-plugin")),pe=p(require("copy-webpack-plugin"));var u=p(require("chalk")),se=p(require("webpack")),R=require("edon-helper"),_=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 se.default.ProgressPlugin(o=>{if(!this.isRunning)return;let r=Date.now();if(r-this.lastUpdate<100)return;let s=Math.floor(o*100);if(s!==this.lastPercent){process.stdout.clearLine(0),process.stdout.cursorTo(0);let i=this.generateProgressBar(s);process.stdout.write(`\u{1F528} ${u.default.blue("\u6784\u5EFA\u4E2D")} ${i} ${u.default.green(s+"%")}`),this.lastPercent=s,this.lastUpdate=r}}).apply(t),t.hooks.done.tap("BuildCompilePlugin",o=>{var c,a;this.isRunning=!1;let s=(Date.now()-this.startTime)/1e3;if(process.stdout.clearLine(0),process.stdout.cursorTo(0),o.hasErrors()){console.log(u.default.red(`
\u274C \u6784\u5EFA\u5931\u8D25\uFF0C\u5B58\u5728\u9519\u8BEF:`)),(c=o.toJson().errors)==null||c.forEach((m,d)=>{console.log(u.default.red(`
\u9519\u8BEF ${d+1}:`)),console.log(u.default.red(` ${m.message}`)),m.stack&&console.log(u.default.gray(` \u5806\u6808: ${m.stack.substring(0,200)}...`))}),console.log(u.default.red(`
\u8BF7\u4FEE\u590D\u4E0A\u8FF0\u9519\u8BEF\u540E\u91CD\u65B0\u6784\u5EFA\u3002`));return}o.hasWarnings()&&(console.log(u.default.yellow(`
\u26A0\uFE0F \u6784\u5EFA\u5B58\u5728\u8B66\u544A:`)),(a=o.toJson().warnings)==null||a.forEach((m,d)=>{console.log(u.default.yellow(` ${d+1}. ${m.message.substring(0,150)}`))}));let i=this.displayBuildStats(o);console.log(u.default.green(`
\u2705 \u6784\u5EFA\u6210\u529F\uFF01`)),console.log(u.default.gray(`\u603B\u8BA1: ${i}`)),console.log(u.default.gray(`\u603B\u8017\u65F6: ${s.toFixed(2)}s`)),console.log(u.default.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(0,R.convertBytesSize)(0);let s=r.length>10,i=s?`\uFF08\u5171${r.length}\u4EFD\u6587\u4EF6\uFF0C\u53EA\u663E\u793A\u524D10\u4EFD\uFF09`:"";console.log(u.default.cyan(`
\u{1F4CA} \u6784\u5EFA\u7ED3\u679C\u7EDF\u8BA1${i}:`)),[...r].sort((l,m)=>(m.size||0)-(l.size||0)).filter(l=>!l.name.includes("/images/")).slice(0,10).forEach(l=>{l.name&&l.size&&console.log(` ${u.default.gray("-")} ${u.default.white(l.name.padEnd(45," "))} ${u.default.green((0,R.convertBytesSize)(l.size))}`)}),s&&console.log(` ${u.default.gray("-")} \u5176\u4ED6\u7701\u7565...`);let a=r.reduce((l,m)=>l+(m.size||0),0);return(0,R.convertBytesSize)(a)}},ne=_;var j=require("edon-helper"),me=require("vue-loader"),ue=p(require("unplugin-auto-import/webpack")),de=p(require("unplugin-vue-components/webpack")),O=require("unplugin-vue-components/resolvers"),fe=p(require("webpack")),ge=(e,t,o)=>{let{html:r,forkTSChecker:s,framework:i,uiFramework:c,elementPlusOptions:a}=t,l=i==="vue",m=i==="react",d=c==="element-plus";return l&&e.plugin("vue-loader-plugin").use(me.VueLoaderPlugin).end(),d&&(e.plugin("auto-import").use((0,ue.default)({resolvers:[(0,O.ElementPlusResolver)()],dts:`${(a==null?void 0:a.dtsDir)||"./types"}/auto-import.d.ts`})),e.plugin("components").use((0,de.default)({resolvers:[(0,O.ElementPlusResolver)({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()?(e.plugin("build-compile-info").use(ne),e.plugin("mini-css-extract").use(ie.default,[{filename:"assets/css/[name].[contenthash:8].css",chunkFilename:"assets/css/[name].[contenthash:8].chunk.css"}])):(e.plugin("clean").use(le.CleanWebpackPlugin),e.plugin("compile-info").use(te),m&&e.plugin("react-refresh").use(ce.default).tap(()=>[{overlay:!1,include:/\.(jsx|tsx)$/,exclude:[/node_modules/,/\.test\.(js|ts)x?$/]}]),s&&e.plugin("fork-ts-checker").use(require.resolve("fork-ts-checker-webpack-plugin"),[{typescript:{configFile:(0,j.joinRoot)("tsconfig.json"),memoryLimit:4096},async:!0,issue:{include:[{file:"**/*.{ts,tsx,vue}"},{file:"**/*.{js,jsx,vue}"}],exclude:[{file:"**/node_modules/**/*"}]}}])),e.plugin("define").use(fe.default.DefinePlugin,[{"process.env":o,env:o}]),e.plugin("html").use(ae.default,[{template:(r==null?void 0:r.template)||(0,j.joinRoot)("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}]),e.plugin("copy-public").use(pe.default,[{patterns:[{from:(0,j.joinRoot)("public"),to:e.output.get("path"),globOptions:{ignore:["**/index.html","**/.DS_Store","**/unused-*","**/large-assets/**/*"]},noErrorOnMissing:!0}]}]),e};var L=require("edon-helper"),he=e=>{let t=e.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}}),e.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]"}`}),e.module.rule("svg-component").test(/(\.inline\.svg$|src\/icons\/svg\/.*\.svg$)/).use("@svgr/webpack").loader(L.safeRequire.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(L.safeRequire.resolve("url-loader")).options({limit:10*1024,name:`assets/svgs/${n()?"[name].[contenthash:8][ext]":"[name].[hash:8][ext]"}`}),e};var B=p(require("mini-css-extract-plugin"));var v=require("edon-helper"),be=p(require("autoprefixer")),ve=p(require("postcss-pxtorem")),x=(e,t,o,r)=>{let{rem:s={},isVue:i=!1}=r||{},c=e.module.rule(t).test(o),a=!n(),l=n()?{}:{injectType:"styleTag",esModule:!0},m=d=>{var D,J;return d.use("css-loader").loader(v.safeRequire.resolve("css-loader")).options({importLoaders:2,sourceMap:a,modules:{auto:ze=>/\.module\.(css|less)$/.test(ze),localIdentName:n()?"[local]-[hash:base64:8]":"[local]-[hash:base64:5]"}}).end().use("postcss-loader").loader(v.safeRequire.resolve("postcss-loader")).options({postcssOptions:{parser:"postcss-safe-parser",plugins:[(0,be.default)(),s!=null&&s.enable?(0,ve.default)((0,v.isEmpty)((D=r==null?void 0:r.rem)==null?void 0:D.options)?{rootValue:10,propList:["*"],selectorBlackList:["ignore-","#root","html"],replace:!0,mediaQuery:!1,minPixelValue:1}:(J=r==null?void 0:r.rem)==null?void 0:J.options):!1].filter(Boolean)},sourceMap:a}).end()};return i?(m(c.oneOf("vue-sfc-style").resourceQuery(/\?vue/).use("vue-style-loader").loader(v.safeRequire.resolve("vue-style-loader")).options({sourceMap:a}).end()),m(c.oneOf("vue-normal-style").use("style-loader").loader(n()?B.default.loader:v.safeRequire.resolve("style-loader")).when(Object.keys(l).length>0,d=>d.options(l)).end())):m(c.use("style-loader").loader(n()?B.default.loader:v.safeRequire.resolve("style-loader")).when(Object.keys(l).length>0,d=>d.options(l)).end()),c};var y=require("edon-helper"),ye=p(require("os")),we=(e,t)=>{let{framework:o,rem:r}=t,s=o==="vue",i=o==="react";s&&e.module.rule("vue").test(/\.vue$/).use("vue-loader").loader(y.safeRequire.resolve("vue-loader")).options({cacheDirectory:!n(),cacheIdentifier:`vue-loader-${n()?"prod":"dev"}`});let c=e.module.rule("compile").test(/\.[jt]sx?$/).exclude.add(/node_modules/).end().resourceQuery({not:[/vue/]});n()||c.use("thread-loader").loader(y.safeRequire.resolve("thread-loader")).options({workers:Math.max(2,Math.min(ye.default.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(y.safeRequire.resolve("swc-loader")).options({...a})}catch{c.use("babel-loader").loader(y.safeRequire.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 he(e),x(e,"css",/\.css$/,{rem:r,isVue:s}),x(e,"less",/\.less$/,{rem:r,isVue:s}).use("less-loader").loader(y.safeRequire.resolve("less-loader")).options({lessOptions:{javascriptEnabled:!0,math:"always"},sourceMap:!n()}),x(e,"scss",/\.s[ac]ss$/,{rem:r,isVue:s}).use("sass-loader").loader(y.safeRequire.resolve("sass-loader")).options({sourceMap:!n(),sassOptions:{outputStyle:n()?"compressed":"expanded"}}),x(e,"stylus",/\.styl$/,{rem:r,isVue:s}).use("stylus-loader").loader(y.safeRequire.resolve("stylus-loader")).options({sourceMap:!n()}),e};var W=require("esbuild-loader"),ke=(e,t)=>{let{framework:o,uiFramework:r}=t,s=o==="vue",i=o==="react",c=r==="antd",a=r==="element-plus";return e.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()?(e.optimization.minimizer("js").use(W.EsbuildPlugin,[{target:s?"es2016":"es2015",css:!1,minify:!0,legalComments:"none",drop:["console","debugger"]}]),e.optimization.minimizer("css").use(W.EsbuildPlugin,[{target:"es2015",minify:!0,css:!0}]),e.optimization.usedExports(!0).concatenateModules(!0)):e.optimization.removeAvailableModules(!1).removeEmptyChunks(!1).splitChunks({chunks:"all",minSize:1/0}).minimize(!1),e};var Ce=p(require("path")),xe=p(require("fs-extra")),U=p(require("mini-css-extract-plugin")),Pe=p(require("speed-measure-webpack-plugin")),Ee=require("edon-helper"),$e=require("webpack-bundle-analyzer"),De=(e,t,o)=>{var i,c,a;let{statsDirectory:r}=t,s=Ce.default.join(r||(0,Ee.joinRoot)("node_modules",".edon"),"webpack.config.js");if(xe.default.writeFileSync(s,`module.exports = ${e.toString()}`,{encoding:"utf8"}),o.analyzer&&e.plugin("analyzer").use($e.BundleAnalyzerPlugin,[{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"}]),o.speed){let l=e.toConfig(),m=(i=l==null?void 0:l.plugins)==null?void 0:i.filter(D=>!(D instanceof U.default));l.plugins=[...m];let d=new Pe.default().wrap(l);return(a=(c=d==null?void 0:d.plugins)==null?void 0:c.push)==null||a.call(c,new U.default({})),d}return e};var P=require("edon-helper"),Se=(e,t,o)=>{let{errorOverlay:r,cacheDirectory:s}=t;return e.devServer.hot(!0).open(!0).port((o==null?void 0:o.port)||3e3).host((o==null?void 0:o.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:(0,P.joinRoot)("public"),watch:{poll:300,ignored:/node_modules/}},headers:{"Access-Control-Allow-Origin":"*"}}),e.merge({cache:{type:"filesystem",buildDependencies:{config:[Z()],tsconfig:[(0,P.joinRoot)("tsconfig.json")],packagejson:[(0,P.joinRoot)("package.json")]},name:"development-cache",version:"1.0.0",cacheDirectory:s||(0,P.joinRoot)("node_modules",".cache","webpack"),compression:n()?"gzip":!1,maxAge:864e5},infrastructureLogging:{level:"none",debug:!1},stats:{logging:"none",loggingDebug:!1,loggingTrace:!1}}),e};var V=p(require("fs-extra")),w=require("edon-helper"),Ue=async(e,t)=>{let o=new Ie.default,r=await(0,w.getDotEnvObject)(e.mode);await(0,w.generateEnvTypes)("edon-service",r);let s=await I(),i=e.mode==="prod"?"production":"development";process.env.NODE_ENV=i,s.cacheDirectory&&V.default.ensureDirSync(s.cacheDirectory),s.statsDirectory&&V.default.ensureDirSync(s.statsDirectory);let{entryPath:c,outputPath:a,chainWebpack:l}=s;o.mode(i),o.set("target",["web",n()?"es5":void 0].filter(Boolean)),o.entry("index").add(c||(0,w.joinRoot)("src/index.tsx")).end(),o.output.path(a||(0,w.joinRoot)("dist")).publicPath("/").filename(`assets/js/[name]${n()?".[contenthash:8]":""}.js`).pathinfo(!n()),n()?e.sourceMap?o.devtool("hidden-source-map").end():o.devtool(!1).end():o.devtool("eval-cheap-module-source-map").end(),o.resolve.extensions.merge([".tsx",".ts",".json",".js",".jsx",".vue"]).end(),o.resolve.alias.set("src",E.default.resolve(process.cwd(),"src")).set("assets",(0,w.joinRoot)("public/assets")).end(),s.framework==="react"?o.resolve.alias.set("react",E.default.resolve(process.cwd(),"node_modules/react")).set("react-dom",E.default.resolve(process.cwd(),"node_modules/react-dom")).end():s.framework==="vue"&&o.resolve.alias.set("vue",E.default.resolve(process.cwd(),"node_modules/vue")).end(),o.resolve.symlinks(!0).end(),o.performance.hints(!1),ge(o,s,r),we(o,s),ke(o,s),l&&await l(o,{isProd:n(),dotEnv:r,mode:e.mode}),n()||Se(o,s,t);let m=De(o,s,e);return e.speed?m:o.toConfig()},N=Ue;var h=p(require("chalk")),A={padding:0,margin:0,borderStyle:"round",borderColor:"blue"},z=async()=>{let{default:e}=await import("boxen");return e},b={info:async(e,t={})=>{if(t.simple){console.log(h.default.blue(`\u2139\uFE0F ${e}`));return}let o=await z();console.log(o(h.default.blue(e),{...A,...t,borderColor:t.borderColor||"blue"}))},success:async(e,t={})=>{if(t.simple){console.log(h.default.green(`\u2705 ${e}`));return}let o=await z();console.log(o(h.default.green(e),{...A,...t,borderColor:t.borderColor||"green"}))},error:async(e,t={})=>{if(t.simple){console.error(h.default.red(`\u274C ${e}`));return}let o=await z();console.error(o(h.default.red(e),{...A,...t,borderColor:t.borderColor||"red"}))},warning:async(e,t={})=>{if(t.simple){console.warn(h.default.yellow(`\u26A0\uFE0F ${e}`));return}let o=await z();console.warn(o(h.default.yellow(e),{...A,...t,borderColor:t.borderColor||"yellow"}))},progress:async e=>{console.log(h.default.cyan(`\u{1F504} ${e}`))}};var C=require("edon-helper"),q=class{setEnv(t){process.env.NODE_ENV=t}checkArgv(t,o){t.mode||(o(),process.exit(1))}async start(t){this.setEnv(t.mode==="prod"?"production":"development");let o=await Y(t.mode,t.port),r=(0,C.getLocalIPs)(),s=await N(t,{port:o}),i=(0,H.default)(s),c=await I(),a={port:o,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:(0,C.joinRoot)("public","source"),watch:!0},devMiddleware:{stats:"errors-only",writeToDisk:!1},client:{logging:"warn",overlay:c.errorOverlay,progress:!0,reconnect:!0},watchFiles:{paths:[(0,C.joinRoot)("src"),(0,C.joinRoot)("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 Re.default((0,je.merge)(a,(c==null?void 0:c.devServer)||{}),i);if(await b.success("\u5F00\u53D1\u670D\u52A1\u5668\u542F\u52A8\u5728:",{simple:!0}),await b.success(`- \u672C\u5730\u8BBF\u95EE: http://localhost:${o}`,{simple:!0}),r.ipv4.length>0)if(r.ipv4.length===1)await b.success(`- IP\u8BBF\u95EE: http://${r.ipv4[0]}:${o}`,{simple:!0});else{await b.success("- \u7F51\u7EDC\u8BBF\u95EE (IPv4):",{simple:!0});for(let m of r.ipv4)await b.success(` http://${m}:${o}`,{simple:!0})}await l.start()}async build(t){this.setEnv(t.mode==="prod"?"production":"development");let o=await N(t),r=(0,H.default)(o);r==null||r.run(()=>{})}},$=new q;var F="1.0.4-beta.36";var g=new Ae.Command;g.name("edon-service");g.version(F,"-v, --version","\u663E\u793A\u5F53\u524D\u7248\u672C\u53F7").action(()=>{b.info(`\u5F53\u524D\u7248\u672C\u53F7\uFF1Av${F}`,{simple:!0})});g.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(e,t)=>{$.checkArgv(t,g.helpInformation.bind(g)),await $.start(t)});g.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(e,t)=>{try{$.checkArgv(t,g.helpInformation.bind(g)),await $.build(t)}catch(o){await b.error(`\u6784\u5EFA\u51FA\u9519: ${o}`,{simple:!0}),process.exit(1)}});g.command("version").description("\u663E\u793A\u5F53\u524D\u7248\u672C\u53F7").action(()=>{b.info(`\u5F53\u524D\u7248\u672C\u53F7: ${F}`,{simple:!0})});g.showHelpAfterError("(add --help for additional information)");g.parse(process.argv);