UNPKG

@thingjs/xplugin-cli

Version:

UINO ThingJS-X 零代码平台插件二次开发脚手架,用于生成插件模板开发代码

175 lines (167 loc) 6.86 kB
const TerserPlugin = require("terser-webpack-plugin"); const path = require('path'); const FileManagerPlugin = require('filemanager-webpack-plugin'); //引入清除文件插件 const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const WebpackObfuscator = require('webpack-obfuscator'); const config = { target: "node", mode: process.env.NODE_ENV,// 仅使用生产打包 entry: { 'create': './action/create.js', }, output: { publicPath: './', path: path.join(__dirname, "/dist"), filename: '[name].js', // globalObject: 'this', libraryTarget: 'commonjs',//commonjs \ umd library: '[name]', libraryExport: 'create' }, 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: /\.m?js$/, exclude: /(node_modules)/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'], plugins: ['@babel/plugin-transform-runtime'] } } }, ], }, plugins: [ new CleanWebpackPlugin(), new WebpackObfuscator({ // 压缩代码 compact: true, // 是否启用控制流扁平化(降低1.5倍的运行速度) // controlFlowFlattening: false, // // 应用概率;在较大的代码库中,建议降低此值,因为大量的控制流转换可能会增加代码的大小并降低代码的速度。 // controlFlowFlatteningThreshold: 0.75, // // // 随机的死代码块(增加了混淆代码的大小) // deadCodeInjection: true, // // // 死代码块的影响概率 // deadCodeInjectionThreshold: 0.4, // // // 此选项几乎不可能使用开发者工具的控制台选项卡 // debugProtection: false, // // // 如果选中,则会在“控制台”选项卡上使用间隔强制调试模式,从而更难使用“开发人员工具”的其他功能。 // debugProtectionInterval: 0, // // // 通过用空函数替换它们来禁用console.log,console.info,console.error和console.warn。这使得调试器的使用更加困难。 // disableConsoleOutput: false,//非常重要 // // // 标识符的混淆方式 hexadecimal(十六进制) mangled(短标识符) // identifierNamesGenerator: 'hexadecimal', // log: false, // // // // numbersToExpressions: true, // // // 是否启用全局变量和函数名称的混淆 // renameGlobals: false, // // // 混淆后的代码,不能使用代码美化,同时需要配置 cpmpat:true; // selfDefending: true, // simplify: true, // splitStrings: true, // splitStringsChunkLength: 10, // // // 删除字符串文字并将它们放在一个特殊的数组中 // stringArray: true, // stringArrayCallsTransform: true, // stringArrayCallsTransformThreshold: 0.75, // // stringArrayEncoding: ['base64'], // stringArrayIndexShift: true, // stringArrayRotate: true, // stringArrayShuffle: true, // stringArrayWrappersCount: 2, // stringArrayWrappersChainedCalls: true, // stringArrayWrappersParametersMaxCount: 4, // stringArrayWrappersType: 'variable',//variable function // stringArrayThreshold: 1, // // 是否启用混淆对象键 // transformObjectKeys: true, // // 允许启用/禁用字符串转换为unicode转义序列。Unicode转义序列大大增加了代码大小,并且可以轻松地将字符串恢复为原始视图。建议仅对小型源代码启用此选项。 // unicodeEscapeSequence: true, }, []), // new FileManagerPlugin({ // events: { // onStart: { // }, // onEnd: { // copy: [ // { source: './src/core/5701/preview.png', destination: './dist/5701/' } // ], // mkdir: [path.resolve(__dirname, 'template')], // }, // }, // runTasksInSeries: false, // runOnceInWatchMode: false, // }), ], optimization: { minimize: true, minimizer: [ (compiler) => { new TerserPlugin({ // test: /\.js(\?.*)?$/i, extractComments: false, parallel: true,//使用多进程并发运行以提高构建速度。 并发运行的默认数量: os.cpus().length - 1 。 // minify: TerserPlugin.uglifyJsMinify, terserOptions: { output: { beautify: false, comments: false }, compress: { drop_console: false, drop_debugger: true, passes: 5, toplevel: true, }, mangle: { toplevel: true } } }).apply(compiler); } ], }, //警告 webpack 的性能提示 performance: { hints: 'warning', //入口起点的最大体积 maxEntrypointSize: 1048576, //生成文件的最大体积 maxAssetSize: 1048576, //只给出 js 文件的性能提示 assetFilter: function (assetFilename) { return assetFilename.endsWith('.js'); } }, resolve: { extensions: ['.js', '.vue', '.json', '.d.ts'],// alias: { } } }; module.exports = () => { return config; };