@thingjs-x4/xplugin-plugin
Version:
xplugin相关插件包,完成插件执行的相关辅助功能
1 lines • 5.33 kB
JavaScript
const s=require("path"),a=require("webpack-merge").merge,r=require("terser-webpack-plugin"),l=require("filemanager-webpack-plugin"),e=require("vue-loader").VueLoaderPlugin,t=require("html-webpack-plugin"),i=require("clean-webpack-plugin").CleanWebpackPlugin,u=require("webpack-obfuscator"),n=require("@thingjs-x4/xplugin-plugin"),c=require("@thingjs-x4/xplugin-plugin/dist/plugin/FramePlugin"),p=require("@thingjs-x4/xplugin-plugin/dist/XLogger").DONE;var o={entry:{frame:s.resolve(__dirname,"./index.js"),bundle:s.resolve(__dirname,"./index.bundle.js")},output:{publicPath:"./",path:s.join(__dirname,"/dist"),filename:"[name].js",globalObject:"this",libraryTarget:"umd",library:"[name]",libraryExport:"default"},module:{rules:[{test:/\.(ts|js)x?$/,exclude:/node_modules/,use:{loader:"babel-loader",options:{presets:["@babel/preset-env","@babel/preset-react","@babel/preset-typescript"]}}},{test:/\.d\.ts$/,loader:"ignore-loader"},{test:/\.vue$/,loader:"vue-loader",options:{}},{test:/\.(css|less)$/,use:[{loader:"style-loader"},{loader:"css-loader"},{loader:"postcss-loader"},{loader:"less-loader"}]},{test:/\.s[ac]ss$/i,use:["style-loader","css-loader","postcss-loader","sass-loader"]},{test:/\.(jpg|png|jpeg|gif|svg)$/,type:"asset",parser:{dataUrlCondition:{maxSize:4194304}},generator:{filename:"./resources/[name][hash:8][ext]"}},{test:/\.(woff2?|eot|ttf|otf)(\?.*)?$/,type:"asset/resource",generator:{filename:"fonts/[name].[hash:8].[ext]"}}]},plugins:[],optimization:{minimize:!0,runtimeChunk:"single",minimizer:[e=>{new r({extractComments:!1,parallel:!0,minify:r.uglifyJsMinify,terserOptions:{output:{beautify:!1,comments:!1},compress:{dead_code:!0,drop_console:!1,drop_debugger:!0,pure_funcs:["THINGX.Debugger.setLevel","console.info","console.log"],passes:5,toplevel:!0},mangle:{toplevel:!0}}}).apply(e)}]},performance:{hints:"warning",maxEntrypointSize:512e5,maxAssetSize:512e5,assetFilter:function(e){return e.endsWith(".js")}},resolve:{extensions:[".js",".json",".vue",".d.ts",".ts",".sass",".scss",".less",".css"],alias:{}},externals:{}};module.exports=class{#config=o;#archive=!1;#stats=!1;constructor(e,s,t){var r={mode:e||"production",devtool:t};t||delete r.devtool,"debugger"===e&&(r.mode="production"),"production"==e?this.#setPluginsProduction():this.#setPluginsDevelopment(),this.#config=a(this.#config,r),this.#archive=s}#setPluginsDevelopment(){this.mergePlugin(new e),this.mergePlugin(new l({events:{onEnd:{copy:[{source:"./src/*{core,expand,layer,control,panel}/resources/**/**",destination:"./dist/resources",options:{flat:!0,overwrite:!0}},{source:"./src/resources/**",destination:"./dist/resources",options:{flat:!1,overwrite:!0}},{source:s.resolve(__dirname,"../static/**"),destination:"./dist/static",options:{flat:!1,overwrite:!0}}]}},runTasksInSeries:!1,runOnceInWatchMode:!1})),this.mergePlugin(new n(!0))}#setPluginsProduction(){this.#config.optimization.runtimeChunk=!1,this.mergePlugin(new i),this.mergePlugin(new e),this.mergePlugin(new l({events:{onEnd:{copy:[{source:"./src/*{core,expand,layer,control,panel}/resources/**/**",destination:"./dist/resources",options:{flat:!0,overwrite:!0}},{source:"./src/resources/**",destination:"./dist/resources",options:{flat:!1,overwrite:!0}}]}},runTasksInSeries:!1,runOnceInWatchMode:!1})),this.mergePlugin(new n)}setArchive(e){this.#archive=e}setStats(e){this.#stats=e}get config(){return this.#config}get stats(){if(!this.#stats)return!1}mergeKeyValue(e,s){this.#config=a(this.#config,{key:s})}mergePlugin(e){this.#config=a(this.#config,{plugins:[e]})}mergeSceneServer(e){"development"==this.#config.mode&&(this.mergePlugin(new t({filename:"./index.frame.html",template:s.resolve(__dirname,"../template/index.frame.html"),inject:"body",templateParameters:{debugger:e.debugger},hash:!0})),this.mergePlugin(new t({filename:"./index.html",template:s.resolve(__dirname,"../template/index.html"),inject:"body",templateParameters:{debugger:e.debugger},excludeChunks:["frame","bundle"],hash:!0})))}mergeDevServer(e){"development"==this.#config.mode&&(this.#config=a(this.#config,{devServer:e}))}mergeExternals(e){this.#config=a(this.#config,{externals:e})}overwriteTerserOptions(s){let t={output:{beautify:!1,comments:!1},compress:{dead_code:!0,drop_console:!1,drop_debugger:!0,pure_funcs:["THINGX.Debugger.setLevel"],passes:5,toplevel:!0},mangle:{toplevel:!0}};console.log(a(t,s||{})),this.#config.optimization.minimizer[0]=e=>{new r({extractComments:!1,parallel:!0,minify:r.uglifyJsMinify,terserOptions:a(t,s||{})}).apply(e)}}buildConfig({rootpath:e,buildpath:s,framepath:t,bundlepath:r,archivepath:i},n){var o=[],n=(o.push(new c),"production"===this.#config.mode&&n&&o.push(new u({compact:!0},[])),this.#archive&&o.push(new l({events:{onEnd:{copy:[{source:"./src/*{core,expand,layer,control,panel}/resources/**/**",destination:"./dist/resources",options:{flat:!0,overwrite:!0}},{source:"./src/resources/**",destination:"./dist/resources",options:{flat:!1,overwrite:!0}}],delete:[i],archive:[{source:s,destination:i}]}},runTasksInSeries:!1,runOnceInWatchMode:!1})),o.push(e=>{e.hooks.afterEmit.tap("XPlugin",e=>{console.log(""),p("XPlugin resource compilation || package execution completed."),console.log("")})}),{stats:{all:this.stats},entry:{frame:t,bundle:r},output:{publicPath:e,path:s},plugins:o});return this.#config=a(this.#config,n),this.#config}};