webpack学习笔记

基本配置

const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');
// 封装css相关的一些loader,因为对css文件和less文件的处理中有重复
const commonCssLoader = [
    // 'style-loader',
    // 取代style-loader,提取js中的css为单独文件,使用这个插件处理的话,css就不是以style标签插入而已以link标签插入,不会闪屏
    MiniCssExtractPlugin.loader,
    'css-loader',
    // css兼容性处理:postcss --> postcss-loader postcss-preset-env
    // 帮postcss找到package.json中browserslist里的配置,通过配置加载指定的css兼容性样式
    // 默认设置的生产环境,设置开发环境要改变node环境变量:process.env.NODE_ENV = 'development';
    {
        loader: 'postcss-loader',
        options: {
            ident: 'postcss',
            plugins: () => [
                require('postcss-preset-env')()
            ]
        }
    }
]

module.exports = {
    // 入口
    entry: './src/index.js',
    // 输出
    output: {
        filename: 'build.js',
        // resolve拼接绝对路径
        path: resolve(__dirname, 'build')
    },
    // loader
    module: {
        rules: [{
            // 处理less文件
            test: /\.less$/,
            use: [
                ...commonCssLoader,
                'less-loader'
            ]
        },
        {
            // 处理css文件
            test: /\.css$/,
            use: [...commonCssLoader]
        },
        {
            // 处理图片文件
            test: /\.(jpg|png|gif)$/,
            loader: 'url-loader',
            options: {
                // 小于8k的图片会转换成base64
                limit: 8 * 1024,
                // 重命名
                name: '[hash:10].[ext]',
                // 由于html-loader遵循的是commonjs,这里要关掉es6
                esModule: false
            }
        },
        {
            // 处理HTML中的img图片
            test: /\.html$/,
            loader: 'html-loader'
        },
        {
            // 处理其他文件
            exclude: /\.(html|js|css|less|jpg|png|gif)/,
            loader: 'file-loader',
            options: {
                name: '[hash:10].[ext]'
            }
        },
        {
            test: /\.js$/,
            exclude: /node_modules/,
            // 同一个文件适用多个loader的时候,enforce让其优先执行,避免一些错误
            // enforce: 'pre',
            use: [{
                // 语法检查:需要eslint-loader eslint
                // 只检查自己写的源代码
                // 设置检查规则去package.json中的eslintConfig
                // 为了使用airbnb规则,还需要eslint-config-airbnb-base和eslint-plugin-import
                loader: 'eslint-loader',
                options: {
                    // 自动修复
                    fix: true
                }
            },
            {
                // js兼容性处理:babel-loader @babel/core
                // 1. 基本兼容性处理,只能转换基础语法 --> @babel/preset-env
                // 2. 全部js兼容性处理,直接在源代码引入 --> @babel/polyfill
                // 但是这种方法提导致文件体积太大
                // 3. 按需加载 ,此时不能引入@babel/polyfill --> corejs
                loader: 'babel-loader',
                options: {
                    // 预设,指示babel做怎样的兼容性处理
                    presets: [
                        [
                            '@babel/preset-env',
                            {
                                // 按需下载
                                useBuiltIns: 'usage',
                                // 指定core-js版本
                                corejs: {
                                    version: 3
                                },
                                // 指定兼容性做到哪个版本的浏览器
                                targets: {
                                    chrome: '60',
                                    firefox: '50',
                                    ie: '9',
                                    safari: '10',
                                    edge: '17'
                                }
                            }
                        ]
                    ]
                }
            }]
            
        }]
    },
    plugins: [
        new HtmlWebpackPlugin({
            // 内容
            template: './src/index.html',
            // 压缩HTML代码
            minify: {
                // 折叠空格
                collapseWhitespace: true,
                // 移除注释
                removeComments: true
            }
        }),
        new MiniCssExtractPlugin({
            // 对输出的文件重命名
            filename: 'build.css'
        }),
        // 压缩css
        new OptimizeCssAssetsWebpackPlugin()
    ],
    // 模式为production时自动压缩js代码
    mode: 'development',
    devServer: {
        // 热更新
        contentBase: resolve(__dirname, 'build'),
        compress: true,
        port: 3000,
        open: true
    }
}

性能优化

开发环境性能优化

  • 优化打包构建速度 HMR
  • 优化代码调试 source-map

生产环境性能优化

  • 优化打包构建速度
  • 优化代码运行的性能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值