nodejs 010:Webpack 可视化分析插件 webpack-bundle-analyzer的使用

安装

  • yarn add --dev webpack-bundle-analyzer

原始webpack.config.js

  • webpack.config.js代码定义了 Webpack 的配置,主要任务是将 JavaScript 和 CSS 文件打包,并将 CSS 提取到单独的文件中,配置了对 Electron 应用的支持,同时还将 React 相关的模块映射到 Preact,以减小打包体积。
// 引入 Node.js 的 path 模块,用于处理文件和目录路径
const path = require('path');
// 引入webpack的 ExtractTextPlugin 插件,用于将 CSS 提取到单独的文件中
// 打包样式有两种方法,一种是使用style-loader自动将css代码放到生成的style标签中,并且插入到head标签里。另一种就是使用extract-text-webpack-plugin插件,将样式文件单独打包,打包输出的文件由配置文件中的output属性指定。然后我们在入口HTML页面写个link标签引入这个打包后的样式文件
// extract-text-webpack-plugin用法 https://segmentfault.com/a/1190000018134652
const ExtractTextPlugin = require('extract-text-webpack-plugin');

// 实例化 ExtractTextPlugin 插件,配置 CSS 文件的输出路径和名称
const extractCSSPlugin = new ExtractTextPlugin({
    filename: 'css/[name].css', // CSS 文件将被输出到 'css' 目录下,文件名与入口文件名称相同
    allChunks: true, // 提取所有的 CSS,包括异步加载的 CSS
});

module.exports = {
    // 指定 Webpack 的入口文件,Webpack 将从这个文件开始构建依赖图
    entry: path.resolve(__dirname, 'src', 'ui', 'index.js'), // 入口文件路径为 'src/ui/index.js'
    
    output: {
        // 配置 Webpack 打包后的输出文件
        filename: 'js/bundle.js', // 输出的 JavaScript 文件名称为 'bundle.js',存放在 'js' 目录下
        path: path.resolve(__dirname, 'src', 'static'), // 输出目录为 'src/static'
    },
    
    target: 'electron', // 指定构建目标为 Electron 应用

    module: {
        // 配置如何处理不同类型的模块
        rules: [
            {
                test: /\.(js|jsx)$/, // 匹配所有 JavaScript 和 JSX 文件
                loader: 'babel-loader', // 使用 babel-loader 处理这些文件
                include: [
                    path.resolve(__dirname, 'src', 'ui'), // 仅处理 'src/ui' 目录下的文件
                ],
            },
            {
                test: /\.(css|scss)$/, // 匹配所有 CSS 和 SCSS 文件
                loader: extractCSSPlugin.extract({
                    use: [
                        {
                            loader: 'css-loader', // 使用 css-loader 解析 CSS 文件
                            options: {
                                modules: true, // 启用 CSS 模块化,允许在 CSS 文件中使用局部作用域
                                importLoaders: 2, // 在处理 CSS 文件时,前两个加载器也会被使用
                                localIdentName: '[name]--[local]___[hash:base64:5]', // CSS 类名的命名规则
                            },
                        },
                    ],
                }),
            },
        ],
    },
    
    resolve: {
        // 配置模块解析规则
        alias: {
            'react': 'preact-compat', // 将 'react' 映射到 'preact-compat',以便使用 Preact 替代 React
            'react-dom': 'preact-compat', // 将 'react-dom' 映射到 'preact-compat'
        },
        modules: [
            path.resolve(__dirname, 'node_modules'), // 解析模块时首先从 'node_modules' 查找
            path.resolve(__dirname, 'src', 'ui'), // 然后从 'src/ui' 查找
            path.resolve(__dirname, 'src', 'electron'), // 还可以从 'src/electron' 查找
        ],
        extensions: ['.js', '.jsx', '.json'], // 解析模块时支持的文件扩展名
    },
    
    plugins: [extractCSSPlugin], // 使用 ExtractTextPlugin 插件来提取 CSS
};

使用webpack-bundle-analyzer

const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const extractCSSPlugin = new ExtractTextPlugin({
    filename: 'css/[name].css',
    allChunks: true,
});
// 1.引入webpack的 BundleAnalyzerPlugin 插件
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const bundleAnalyzerPlugin = new BundleAnalyzerPlugin();


module.exports = {
    entry: path.resolve(__dirname, 'src', 'ui', 'index.js'),
    output: {
        filename: 'js/bundle.js',
        path: path.resolve(__dirname, 'src', 'static'),
    },
    target: 'electron',
    module: {
        rules: [
            {
                test: /\.(js|jsx)$/,
                loader: 'babel-loader',
                include: [
                    path.resolve(__dirname, 'src', 'ui'),
                ],
            },
            {
                test: /\.(css|scss)$/,
                loader: extractCSSPlugin.extract({
                    use: [
                        {
                            loader: 'css-loader',
                            options: {
                                modules: true,
                                importLoaders: 2,
                                localIdentName: '[name]--[local]___[hash:base64:5]',
                            },
                        },
                    ],
                }),
            },
        ],
    },
    resolve: {
        alias: {
            'react': 'preact-compat',
            'react-dom': 'preact-compat',
        },
        modules: [
            path.resolve(__dirname, 'node_modules'),
            path.resolve(__dirname, 'src', 'ui'),
            path.resolve(__dirname, 'src', 'electron'),
        ],
        extensions: ['.js', '.jsx', '.json'],
    },
    plugins: [extractCSSPlugin,bundleAnalyzerPlugin], // 2.注册BundleAnalyzerPlugin插件
};

可视化结果

PS C:\Users\kingchuxing\Documents\IPFS\party\Partyshare-master> npx webpack
…………
Webpack Bundle Analyzer is started at http://127.0.0.1:8888
Use Ctrl+C to close it

nodejs 010:Webpack 可视化分析插件 webpack-bundle-analyzer的使用_第1张图片

你可能感兴趣的:(服务化&架构,webpack,前端,node.js)