93 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
const path = require('path');
 | 
						||
const TerserPlugin = require('terser-webpack-plugin')
 | 
						||
const htmlWebpackPlugin = require('html-webpack-plugin');
 | 
						||
module.exports = {
 | 
						||
    mode: 'production',
 | 
						||
    name: 'yhdesigner-userDefineModule',
 | 
						||
    entry: {
 | 
						||
        "designer": './src/index.ts',
 | 
						||
        "preview": './src/preview.ts'
 | 
						||
    },
 | 
						||
    output: {
 | 
						||
        filename: '[name].js',
 | 
						||
        path: path.resolve(__dirname, './dist')
 | 
						||
    },
 | 
						||
    module: {
 | 
						||
        unknownContextCritical: false,
 | 
						||
        rules: [
 | 
						||
            {
 | 
						||
                test: /\.tsx?$/,
 | 
						||
                use: ['ts-loader'],
 | 
						||
                exclude: /node_modules/
 | 
						||
            }, {
 | 
						||
                test: /\.css$/,
 | 
						||
                use: ['style-loader', 'css-loader']
 | 
						||
            },
 | 
						||
            {
 | 
						||
                test: /\.less$/,
 | 
						||
                use: ['style-loader', 'css-loader', 'less-loader']
 | 
						||
            },
 | 
						||
            {
 | 
						||
                test: /\.(gif|png|jpeg|eot|woff|ttf|svg|pdf)$/,
 | 
						||
                use: ['file-loader']
 | 
						||
            }
 | 
						||
        ]
 | 
						||
    },
 | 
						||
    resolve: {
 | 
						||
        extensions: ['.tsx', '.ts', ".js"],
 | 
						||
        alias: {
 | 
						||
            'vue$': 'vue/dist/vue.esm.js'
 | 
						||
        }
 | 
						||
    },
 | 
						||
    optimization: {
 | 
						||
        minimize: true,
 | 
						||
        minimizer: [
 | 
						||
            new TerserPlugin({
 | 
						||
                terserOptions: {
 | 
						||
                    ecma: 5,
 | 
						||
                    parse: {},
 | 
						||
                    warnings: false,
 | 
						||
                    keep_classnames: true,
 | 
						||
                    keep_fnames: true,
 | 
						||
                    compress: {
 | 
						||
                        drop_console: true,
 | 
						||
                        drop_debugger: true,
 | 
						||
                        pure_funcs: ['console.log'] // 移除console
 | 
						||
                    },
 | 
						||
 | 
						||
                },
 | 
						||
                extractComments: false
 | 
						||
            }),
 | 
						||
        ]
 | 
						||
    },
 | 
						||
    performance: {
 | 
						||
        hints: 'warning',
 | 
						||
        //入口起点的最大体积 整数类型(以字节为单位)
 | 
						||
        maxEntrypointSize: 50000000,
 | 
						||
        //生成文件的最大体积 整数类型(以字节为单位 300k)
 | 
						||
        maxAssetSize: 30000000,
 | 
						||
        //只给出 js 文件的性能提示
 | 
						||
        assetFilter: function (assetFilename) {
 | 
						||
            return assetFilename.endsWith('.css') || assetFilename.endsWith('.js');
 | 
						||
        }
 | 
						||
    },
 | 
						||
    plugins: [
 | 
						||
        new htmlWebpackPlugin({
 | 
						||
            template: './src/index.html',
 | 
						||
            filename: 'index.html',
 | 
						||
            inject: 'body',
 | 
						||
            chunks: ['designer']
 | 
						||
        }),
 | 
						||
        new htmlWebpackPlugin({
 | 
						||
            template: './src/preview.html',
 | 
						||
            filename: 'preview.html',
 | 
						||
            inject: 'body',
 | 
						||
            chunks: ['preview']
 | 
						||
        }),
 | 
						||
    ],
 | 
						||
    externals: {
 | 
						||
        jquery: "$",
 | 
						||
        lodash: "_",
 | 
						||
        echarts: "echarts",
 | 
						||
    }
 | 
						||
} |