bruce-cli
Version:
A JS/React App automation build scaffolding with zero-configuration and out-of-the-box
1 lines • 7.52 kB
JavaScript
var x=this&&this.__awaiter||function(e,s,t,o){return new(t||(t=Promise))((function(r,n){function i(e){try{a(o.next(e))}catch(e){n(e)}}function l(e){try{a(o.throw(e))}catch(e){n(e)}}function a(e){var s;e.done?r(e.value):(s=e.value,s instanceof t?s:new t((function(e){e(s)}))).then(i,l)}a((o=o.apply(e,s||[])).next())}))},D=this&&this.__rest||function(e,s){var t={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&s.indexOf(o)<0&&(t[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(o=Object.getOwnPropertySymbols(e);r<o.length;r++)s.indexOf(o[r])<0&&Object.prototype.propertyIsEnumerable.call(e,o[r])&&(t[o[r]]=e[o[r]])}return t};import{dirname as o}from"node:path";import{stdout as M}from"node:process";import{fileURLToPath as n}from"node:url";import Y from"@tailwindcss/postcss";import{AbsPath as E,AsyncTo as G,IsEmptyObject as J}from"@yangzw/bruce-us/dist/node.js";import T from"compression-webpack-plugin";import q from"copy-webpack-plugin";import K from"css-minimizer-webpack-plugin";import Q from"dayjs";import X from"eslint-formatter-pretty";import k from"eslint-webpack-plugin";import Z from"html-webpack-plugin";import ee from"html-webpack-tags-plugin";import se from"mini-css-extract-plugin";import te from"postcss-import";import R from"postcss-preset-env";import U from"stylelint-formatter-pretty";import I from"stylelint-webpack-plugin";import oe from"terser-webpack-plugin";import re from"webpack";import ne from"webpackbar";import{BundleAnalyzerPlugin as ie}from"webpack-bundle-analyzer";import le from"webpack-notifier";import{ACTION_TEXT as m}from"../langs/index.js";import{BROWSERS_ES5 as ae,BROWSERS_ES6 as ce,JudgeFile as L}from"../utils/index.js";import W from"./parse-config.js";export default function pe(e){return x(this,void 0,void 0,(function*(){var s,t;const r=o(n(import.meta.url)),{alias:i,browsers:l,copyFiles:a,eslintIgnores:c,eslintRules:p,linkAssets:u,publicPath:d,scriptAssets:f,style:b,stylelintIgnores:g,stylelintRules:h,transpileDeps:y}=yield W(),{mode:w,polyfill:x,useAnalyzer:v,useCompressor:j,useCsslint:_,useHash:O,useJslint:$,useTimer:z}=e,S={babelrc:!1,cacheDirectory:!0,cwd:E("../..",r)},C={custom:{loader:"babel-loader",options:Object.assign(Object.assign({},S),{plugins:[["@babel/plugin-transform-runtime",{corejs:3}]],presets:[["@babel/preset-env",{corejs:3,targets:{browsers:l},useBuiltIns:"usage"}],"@babel/preset-typescript","@babel/preset-react"]})},dynamic:{loader:"babel-loader",options:Object.assign(Object.assign({},S),{presets:["@babel/preset-typescript","@babel/preset-react"]})},es5:{loader:"babel-loader",options:Object.assign(Object.assign({},S),{plugins:[["@babel/plugin-transform-runtime",{corejs:3}]],presets:[["@babel/preset-env",{corejs:3,targets:{browsers:ae},useBuiltIns:"usage"}],"@babel/preset-typescript","@babel/preset-react"]})},es6:{loader:"babel-loader",options:Object.assign(Object.assign({},S),{plugins:[["@babel/plugin-transform-runtime",{corejs:3}]],presets:[["@babel/preset-env",{corejs:3,targets:{browsers:ce},useBuiltIns:"usage"}],"@babel/preset-typescript","@babel/preset-react"]})}}[x],P={loader:"css-loader",options:{importLoaders:2}},N={loader:"resolve-url-loader"},B={loader:"postcss-loader",options:{postcssOptions:{plugins:[te(),R({browsers:l}),Y()]}}},F={loader:se.loader},A=`dist/${w}${z?Q().format("-YYYYMMDD-HHmmss"):""}`,H="function"==typeof a?a(w):a,V={devtool:"test"===w&&"source-map",entry:{index:L("src")},mode:"production",module:{rules:[{include:[E("src"),...y.map((e=>E(`node_modules/${e}`)))],test:/\.(jsx?|tsx?)$/,use:[C]},{include:/(node_modules|src)/,test:/\.css$/,use:[F,P,B]},{exclude:/node_modules/,include:/src/,test:/\.less$/,use:[F,P,B,N,{loader:"less-loader"}]},{exclude:/node_modules/,include:/src/,test:/\.scss$/,use:[F,P,B,N,{loader:"sass-loader",options:{api:"modern",sassOptions:{fiber:!1},sourceMap:!0}}]},{exclude:/node_modules/,generator:{filename:"img/[name].[contenthash:8][ext]"},include:/src/,parser:{dataUrlCondition:{maxSize:10240}},test:/\.(gif|jpe?g|png|webp)$/,type:"asset"},{exclude:/node_modules/,generator:{filename:"font/[name].[contenthash:8][ext]"},include:/src/,test:/\.(eot|otf|ttf|woff2?)$/,type:"asset/resource"},{exclude:/node_modules/,include:/src/,test:/\.md$/,use:[{loader:"html-loader"},{loader:"markdown-loader"}]},{exclude:/node_modules/,generator:{filename:"media/[name].[contenthash:8][ext]"},include:/src/,test:/\.(wv|aac|ape|mp3|ogg|wav|alac|flac|opus|rm|3gb|asf|asx|avi|dat|flv|m4v|mkv|mov|mp4|vob|wmv|rmvb|pdf)$/,type:"asset/resource"},{exclude:/node_modules/,include:/src/,test:/\.txt/,type:"asset/source"},{exclude:/node_modules/,include:/src/,test:/\.svg$/,type:"asset/inline"}]},optimization:{minimizer:[new K,new oe({extractComments:!1,terserOptions:{compress:{drop_console:"test"!==w},format:{comments:!1}}})],runtimeChunk:{name:"manifest"},splitChunks:{cacheGroups:{common:{minChunks:2,name:"common",priority:5,reuseExistingChunk:!0,test:/src/},vendor:{chunks:"initial",name:"vendor",priority:10,test:/node_modules/}},chunks:"all"}},output:{filename:`js/[name].bundle${O?".[contenthash:8]":""}.js`,path:E(A),publicPath:"function"==typeof d?d(w):d},performance:{assetFilter:e=>"vendor.bundle.js"!==e&&!/\.map$/.test(e),maxAssetSize:512e3,maxEntrypointSize:1024e3},plugins:[new re.DefinePlugin({RUN_ENV:JSON.stringify(w),"process.env.NODE_ENV":JSON.stringify("production"),"process.env.RUN_ENV":JSON.stringify(w)}),new ne({name:"Webpack Build"}),v?new ie:null,j?new T({test:/\.(css|js)$/,threshold:10240}):null,H.length?new q({patterns:H.filter((e=>e.from.startsWith("src"))).map((e=>({from:e.from,to:e.to})))}):null,$?new k({cacheLocation:E("node_modules/.cache/eslint-webpack-plugin/.eslintcache"),context:E("src"),exclude:["node_modules",...c].map((e=>E(e))),extensions:["js","ts","jsx","tsx"],formatter:X,overrideConfig:{rules:p},overrideConfigFile:E("../../node_modules/@yangzw/bruce-std/dist/eslint.config.js",r)}):null,new Z({chunks:["manifest","vendor","index"],chunksSortMode:"manual",favicon:E("src/assets/img/favicon.ico"),filename:"index.html",inject:"body",template:E("src/index.html")}),new ee({links:("function"==typeof u?u(w):u).map((e=>{const{href:s}=e;return{attributes:D(e,["href"]),path:s}})),scripts:["dynamic"===x?{append:!1,path:"https://polyfill.alicdn.com/polyfill.min.js"}:"",...("function"==typeof f?f(w):f).map((e=>{const{src:s}=e;return{append:!1,attributes:D(e,["src"]),path:s}}))].filter(Boolean),usePublicPath:!1}),new se({filename:`css/[name].bundle${O?".[contenthash:8]":""}.css`,ignoreOrder:!0}),new le({title:m.build}),_?new I(Object.assign({cacheLocation:E("node_modules/.cache/stylelint-webpack-plugin/.stylelintcache"),configFile:E("../../node_modules/@yangzw/bruce-std/dist/stylelint.config.js",r),context:E("src"),customSyntax:`postcss-${b}`,exclude:["node_modules",...g].map((e=>E(e))),extensions:["css","scss","less"],formatter:U},J(h)?{}:{config:{rules:h}})):null].filter(Boolean),resolve:{alias:Object.assign({"@":E("src")},i),extensions:[".js",".ts",".jsx",".tsx",".json",".vue"],mainFields:["module","jsnext","jsnext:main","browser","main"],modules:[E("node_modules"),E("../../node_modules",r)]},resolveLoader:{modules:[E("../../node_modules",r)]}},pe=null!==(t=null===(s=V.output)||void 0===s?void 0:s.path)&&void 0!==t?t:"",me=new Promise(((e,s)=>{re(V,((t,o)=>{!t&&o?(M.write(o.toString({children:!1,chunkModules:!1,chunks:!1,colors:!0,modules:!1})+"\n\n"),e({dist:pe,flag:!o.hasErrors()})):s(new Error("error"))}))})),[ue,de]=yield G(me);return ue?{dist:pe,flag:!1}:de}))}