@thingjs/xplugin-cli
Version:
UINO ThingJS-X 零代码平台插件二次开发脚手架,用于生成插件模板开发代码
175 lines (167 loc) • 6.86 kB
JavaScript
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;
};