edon-service
Version:
一个开箱即用的前端构建工具,基于Webpack封装,简化了前端项目的开发与构建流程。无论是开发环境的热更新、资源处理,还是生产环境的代码优化、打包部署,都能提供便捷的配置和稳定的性能
19 lines (18 loc) • 21.8 kB
JavaScript
;var je=Object.create;var $=Object.defineProperty;var Te=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var Me=Object.getPrototypeOf,Ae=Object.prototype.hasOwnProperty;var _e=(e,t)=>{for(var o in t)$(e,o,{get:t[o],enumerable:!0})},J=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Fe(t))!Ae.call(e,s)&&s!==o&&$(e,s,{get:()=>t[s],enumerable:!(r=Te(t,s))||r.enumerable});return e};var u=(e,t,o)=>(o=e!=null?je(Me(e)):{},J(t||!e||!e.__esModule?$(o,"default",{value:e,enumerable:!0}):o,e)),ze=e=>J($({},"__esModule",{value:!0}),e);var Ue={};_e(Ue,{default:()=>We});module.exports=ze(Ue);var V=u(require("webpack")),Se=u(require("webpack-dev-server")),Re=require("webpack-merge");var Oe=u(require("fs-extra")),q=u(require("portfinder")),Q=require("edon-helper"),G=require("url"),Le={};function n(){return process.env.NODE_ENV==="production"}var K=async(e,t)=>{let o=3e3,r=await(0,Q.getDotEnvObject)(e);if(r.PORT&&(o=+JSON.parse(r.PORT)),t&&(o=t),o===80)return 80;try{return await q.default.getPortPromise({port:o,stopPort:o+10})}catch(s){throw new Error((s==null?void 0:s.message)||"No open ports found")}},X=()=>{if(typeof __filename<"u")return __filename;try{let e=Le.url;if(!e)throw new Error("\u8BF7\u5728 ESM \u73AF\u5883\u4E0B\u4F20\u5165 import.meta");return(0,G.fileURLToPath)(e)}catch{return typeof __filename<"u"?__filename:""}};var Y=require("ts-node"),Z=require("edon-define"),b=require("edon-helper");(0,Y.register)({compilerOptions:{module:"CommonJS"}});var D={entryPath:(0,b.joinRoot)("src/index.tsx"),outputPath:(0,b.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,b.joinRoot)("node_modules",".cache","webpack"),statsDirectory:(0,b.joinRoot)("node_modules",".edon"),nodePolyfill:!1,legacy:{targets:{chrome:"53",safari:"10"},corejs:"3.24"},svgmin:!0,html:{template:(0,b.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"}},S=async()=>{let e=await(0,Z.getDefineConfig)({});return{...D,...e,rem:{...D.rem,...e.rem},html:{...D.html,...e.html},legacy:{...D.legacy,...e.legacy}}};var P=u(require("path")),De=u(require("webpack-chain"));var se=u(require("mini-css-extract-plugin"));var ne=u(require("html-webpack-plugin")),ie=require("clean-webpack-plugin");var f=u(require("chalk")),ee=u(require("webpack")),F=u(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=F.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=F.default.relative(process.cwd(),r);console.log(f.default.gray(` - ${s}`))}),console.log(`
`)))}),new ee.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}]`}},oe=M;var ae=u(require("@pmmmwh/react-refresh-webpack-plugin")),le=u(require("copy-webpack-plugin"));var p=u(require("chalk")),re=u(require("webpack")),R=require("edon-helper"),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 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{1F528} ${p.default.blue("\u6784\u5EFA\u4E2D")} ${i} ${p.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(p.default.red(`
\u274C \u6784\u5EFA\u5931\u8D25\uFF0C\u5B58\u5728\u9519\u8BEF:`)),(c=o.toJson().errors)==null||c.forEach((m,d)=>{console.log(p.default.red(`
\u9519\u8BEF ${d+1}:`)),console.log(p.default.red(` ${m.message}`)),m.stack&&console.log(p.default.gray(` \u5806\u6808: ${m.stack.substring(0,200)}...`))}),console.log(p.default.red(`
\u8BF7\u4FEE\u590D\u4E0A\u8FF0\u9519\u8BEF\u540E\u91CD\u65B0\u6784\u5EFA\u3002`));return}o.hasWarnings()&&(console.log(p.default.yellow(`
\u26A0\uFE0F \u6784\u5EFA\u5B58\u5728\u8B66\u544A:`)),(a=o.toJson().warnings)==null||a.forEach((m,d)=>{console.log(p.default.yellow(` ${d+1}. ${m.message.substring(0,150)}`))}));let i=this.displayBuildStats(o);console.log(p.default.green(`
\u2705 \u6784\u5EFA\u6210\u529F\uFF01`)),console.log(p.default.gray(`\u603B\u8BA1: ${i}`)),console.log(p.default.gray(`\u603B\u8017\u65F6: ${s.toFixed(2)}s`)),console.log(p.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(p.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(` ${p.default.gray("-")} ${p.default.white(l.name.padEnd(45," "))} ${p.default.green((0,R.convertBytesSize)(l.size))}`)}),s&&console.log(` ${p.default.gray("-")} \u5176\u4ED6\u7701\u7565...`);let a=r.reduce((l,m)=>l+(m.size||0),0);return(0,R.convertBytesSize)(a)}},te=A;var I=require("edon-helper"),ce=require("vue-loader"),ue=u(require("unplugin-auto-import/webpack")),me=u(require("unplugin-vue-components/webpack")),_=require("unplugin-vue-components/resolvers"),pe=u(require("webpack")),de=(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(ce.VueLoaderPlugin).end(),d&&(e.plugin("auto-import").use((0,ue.default)({resolvers:[(0,_.ElementPlusResolver)()],dts:`${(a==null?void 0:a.dtsDir)||"./types"}/auto-import.d.ts`})),e.plugin("components").use((0,me.default)({resolvers:[(0,_.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(te),e.plugin("mini-css-extract").use(se.default,[{filename:"assets/css/[name].[contenthash:8].css",chunkFilename:"assets/css/[name].[contenthash:8].chunk.css"}])):(e.plugin("clean").use(ie.CleanWebpackPlugin),e.plugin("compile-info").use(oe),m&&e.plugin("react-refresh").use(ae.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,I.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(pe.default.DefinePlugin,[{"process.env":o,env:o}]),e.plugin("html").use(ne.default,[{template:(r==null?void 0:r.template)||(0,I.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(le.default,[{patterns:[{from:(0,I.joinRoot)("public"),to:e.output.get("path"),globOptions:{ignore:["**/index.html","**/.DS_Store","**/unused-*","**/large-assets/**/*"]},noErrorOnMissing:!0}]}]),e};var z=require("edon-helper"),fe=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(z.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(z.safeRequire.resolve("url-loader")).options({limit:10*1024,name:`assets/svgs/${n()?"[name].[contenthash:8][ext]":"[name].[hash:8][ext]"}`}),e};var O=u(require("mini-css-extract-plugin"));var h=require("edon-helper"),ge=u(require("autoprefixer")),he=u(require("postcss-pxtorem")),k=(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 E,H;return d.use("css-loader").loader(h.safeRequire.resolve("css-loader")).options({importLoaders:2,sourceMap:a,modules:{auto:Ie=>/\.module\.(css|less)$/.test(Ie),localIdentName:n()?"[local]-[hash:base64:8]":"[local]-[hash:base64:5]"}}).end().use("postcss-loader").loader(h.safeRequire.resolve("postcss-loader")).options({postcssOptions:{parser:"postcss-safe-parser",plugins:[(0,ge.default)(),s!=null&&s.enable?(0,he.default)((0,h.isEmpty)((E=r==null?void 0:r.rem)==null?void 0:E.options)?{rootValue:10,propList:["*"],selectorBlackList:["ignore-","#root","html"],replace:!0,mediaQuery:!1,minPixelValue:1}:(H=r==null?void 0:r.rem)==null?void 0:H.options):!1].filter(Boolean)},sourceMap:a}).end()};return i?(m(c.oneOf("vue-sfc-style").resourceQuery(/\?vue/).use("vue-style-loader").loader(h.safeRequire.resolve("vue-style-loader")).options({sourceMap:a}).end()),m(c.oneOf("vue-normal-style").use("style-loader").loader(n()?O.default.loader:h.safeRequire.resolve("style-loader")).when(Object.keys(l).length>0,d=>d.options(l)).end())):m(c.use("style-loader").loader(n()?O.default.loader:h.safeRequire.resolve("style-loader")).when(Object.keys(l).length>0,d=>d.options(l)).end()),c};var y=require("edon-helper"),ye=u(require("os")),ve=(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 fe(e),k(e,"css",/\.css$/,{rem:r,isVue:s}),k(e,"less",/\.less$/,{rem:r,isVue:s}).use("less-loader").loader(y.safeRequire.resolve("less-loader")).options({lessOptions:{javascriptEnabled:!0,math:"always"},sourceMap:!n()}),k(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"}}),k(e,"stylus",/\.styl$/,{rem:r,isVue:s}).use("stylus-loader").loader(y.safeRequire.resolve("stylus-loader")).options({sourceMap:!n()}),e};var L=require("esbuild-loader"),be=(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(L.EsbuildPlugin,[{target:s?"es2016":"es2015",css:!1,minify:!0,legalComments:"none",drop:["console","debugger"]}]),e.optimization.minimizer("css").use(L.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 we=u(require("path")),Ce=u(require("fs-extra")),B=u(require("mini-css-extract-plugin")),ke=u(require("speed-measure-webpack-plugin")),xe=require("edon-helper"),Pe=require("webpack-bundle-analyzer"),Ee=(e,t,o)=>{var i,c,a;let{statsDirectory:r}=t,s=we.default.join(r||(0,xe.joinRoot)("node_modules",".edon"),"webpack.config.js");if(Ce.default.writeFileSync(s,`module.exports = ${e.toString()}`,{encoding:"utf8"}),o.analyzer&&e.plugin("analyzer").use(Pe.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(E=>!(E instanceof B.default));l.plugins=[...m];let d=new ke.default().wrap(l);return(a=(c=d==null?void 0:d.plugins)==null?void 0:c.push)==null||a.call(c,new B.default({})),d}return e};var x=require("edon-helper"),$e=(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,x.joinRoot)("public"),watch:{poll:300,ignored:/node_modules/}},headers:{"Access-Control-Allow-Origin":"*"}}),e.merge({cache:{type:"filesystem",buildDependencies:{config:[X()],tsconfig:[(0,x.joinRoot)("tsconfig.json")],packagejson:[(0,x.joinRoot)("package.json")]},name:"development-cache",version:"1.0.0",cacheDirectory:s||(0,x.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 W=u(require("fs-extra")),v=require("edon-helper"),Be=async(e,t)=>{let o=new De.default,r=await(0,v.getDotEnvObject)(e.mode);await(0,v.generateEnvTypes)("edon-service",r);let s=await S(),i=e.mode==="prod"?"production":"development";process.env.NODE_ENV=i,s.cacheDirectory&&W.default.ensureDirSync(s.cacheDirectory),s.statsDirectory&&W.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,v.joinRoot)("src/index.tsx")).end(),o.output.path(a||(0,v.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",P.default.resolve(process.cwd(),"src")).set("assets",(0,v.joinRoot)("public/assets")).end(),s.framework==="react"?o.resolve.alias.set("react",P.default.resolve(process.cwd(),"node_modules/react")).set("react-dom",P.default.resolve(process.cwd(),"node_modules/react-dom")).end():s.framework==="vue"&&o.resolve.alias.set("vue",P.default.resolve(process.cwd(),"node_modules/vue")).end(),o.resolve.symlinks(!0).end(),o.performance.hints(!1),de(o,s,r),ve(o,s),be(o,s),l&&await l(o,{isProd:n(),dotEnv:r,mode:e.mode}),n()||$e(o,s,t);let m=Ee(o,s,e);return e.speed?m:o.toConfig()},U=Be;var g=u(require("chalk")),j={padding:0,margin:0,borderStyle:"round",borderColor:"blue"},T=async()=>{let{default:e}=await import("boxen");return e},w={info:async(e,t={})=>{if(t.simple){console.log(g.default.blue(`\u2139\uFE0F ${e}`));return}let o=await T();console.log(o(g.default.blue(e),{...j,...t,borderColor:t.borderColor||"blue"}))},success:async(e,t={})=>{if(t.simple){console.log(g.default.green(`\u2705 ${e}`));return}let o=await T();console.log(o(g.default.green(e),{...j,...t,borderColor:t.borderColor||"green"}))},error:async(e,t={})=>{if(t.simple){console.error(g.default.red(`\u274C ${e}`));return}let o=await T();console.error(o(g.default.red(e),{...j,...t,borderColor:t.borderColor||"red"}))},warning:async(e,t={})=>{if(t.simple){console.warn(g.default.yellow(`\u26A0\uFE0F ${e}`));return}let o=await T();console.warn(o(g.default.yellow(e),{...j,...t,borderColor:t.borderColor||"yellow"}))},progress:async e=>{console.log(g.default.cyan(`\u{1F504} ${e}`))}};var C=require("edon-helper"),N=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 K(t.mode,t.port),r=(0,C.getLocalIPs)(),s=await U(t,{port:o}),i=(0,V.default)(s),c=await S(),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 Se.default((0,Re.merge)(a,(c==null?void 0:c.devServer)||{}),i);if(await w.success("\u5F00\u53D1\u670D\u52A1\u5668\u542F\u52A8\u5728:",{simple:!0}),await w.success(`- \u672C\u5730\u8BBF\u95EE: http://localhost:${o}`,{simple:!0}),r.ipv4.length>0)if(r.ipv4.length===1)await w.success(`- IP\u8BBF\u95EE: http://${r.ipv4[0]}:${o}`,{simple:!0});else{await w.success("- \u7F51\u7EDC\u8BBF\u95EE (IPv4):",{simple:!0});for(let m of r.ipv4)await w.success(` http://${m}:${o}`,{simple:!0})}await l.start()}async build(t){this.setEnv(t.mode==="prod"?"production":"development");let o=await U(t),r=(0,V.default)(o);r==null||r.run(()=>{})}},We=new N;