webpack

一.前端工程化与webpack
    1.前端工程化
        模块化:js 的模块化、css 的模块化、资源的模块化
        组件化:复用现有的UI结构、样式、行为
    2.webpack 的基本使用
        1.什么是webpack
            webpack 是前端项目工程化的具体解决方案
            主要功能:
                前端模块化开发
                代码压缩混淆
                处理浏览器端JS的兼容性
                性能优化
        2.基本使用
            节点:
                dependencies 开发和上线部署都要用到          -S
                devdependencies 开发时用到           -D
            案例:创建列表隔行变色项目
                npm i jquery -S  等同于  npm i jquery --save
                -S 是 --save 的简写
                -S 是记录到dependencies 节点下
            
        3.在项目中安装webpack
            npm install webpack@5.42.1 webpack-cli@4.7.2 -D
            -D 是 --save-dev 的简写
            -D 是记录到devdependencies 节点下
        4.在项目中配置webpack
            (1)在项目根目录下,创建名为webpack.config.js 的webpack 配置文件,并初始化如下的基本配置
                // 使用Node.js 中的导出语法,向外导出一个webpack 的配置对象
                module.exports = {
                    mode: 'development'  
                    // mode 用来指定构建模式,可选值有:development 和 production
                    // 开发阶段 还是 生产发布阶段
                    // 结论:开发时候一定要用development 追求的是打包速度而不是体积
                    // 发布上线的时候一定要用production 追求的是体积小而不是打包速度快
                }
            (2)在package.json 的scripts 节点下,新增dev 脚本如下:
                "scripts":{
                    "dev":"webpack"     // script 节点下的脚本,可以通过npm run 执行,例如:npm run dev
                }
            (3)在终端中运行npm run dev 命令,启动webpack 进行项目的打包构建
        5.webpack 的默认约定
            (1)默认的打包入口文件为src -> index.js
            (2)默认的输出文件路径为dist -> main.js
            注意:可以在webpack.config.js 中修改打包的默认约定
        6自定义打包的入口与出口:
            在webpack.config.js 配置文件中,通过entry 节点指定打包的入口,通过output 节点指定打包的出口
            如:
                const path = require('path'); // 导入node.js 中专门操作路径的模块
                module.exports = {
                    entry: path.join(__dirname,'./src/index.js'), // 打包入口文件的路径
                    output:{
                        path:path.join(__dirname,'./dist'),  // 输出文件的存放路径
                        filename: 'main.js'     // 输出文件的名称
                    }
                    // __dirname 表示当前文件的存放路径
                }      
    3.webpack 中的插件
        1.webpack-dev-server
            作用:每当修改了源代码,webpack 会自动进行项目的打包和创建
            安装:npm install webpack-dev-server -D
            配置:
                (1)"scripts": {
                        "dev": "webpack serve"   // script 节点下的脚本,可以通过npm run 执行,例如:npm run dev
                    }
                (2)再次运行 npm run dev 命令,重新进行项目的打包
                (3)在浏览器中访问 http:// localhost:8080 地址,查看自动打包效果
            注意:webpack-dev-server 会启动一个实时打包的http 服务器
            file 协议变成了http 协议
            自动监听源代码的修改,并自动刷新页面
        2.html-webpack-plugin   
            作用:可以通过此插件自己定制index.html 页面的内容
                将指定的页面复制一份放到根目录里面去
                一打开浏览器就可以访问到指定的页面
            安装:npm install html-webpack-plugin@5.3.2 -D
            配置:
                // 1.导入HTML 插件,得到一个构造函数
                const HtmlPlugin = require('html-webpack-plugin');
                // 2.创建HTML 插件的实例对象
                const htmlPlugin = new HtmlPlugin({
                    template: './src/index.html',  // 指定原文件的存放路径
                    filename: './index.html',   // 指定生成的文件的存放路径
                })
                module.exports = {
                    mode:'development',
                    plugins: [htmlPlugin],
                    // 3.通过plugins 节点,使htmlPlugin 插件生效
                }
        3.devServer 节点
            在webpack.config.js 配置文件中,可以通过devServer 节点对webpack-dev-server 插件进行配置
            devServer:{
                open: true,     //初次打包完成后,自动打开浏览器
                host: '127.0.0.1',     // 实时打包使用的主机地址
                port: '80'      // 实时打包所使用的端口号
            }
            注意:凡是修改了webpack.config.js 配置文件,或修改了package.json 配置文件,必须重启
            实时打包的服务器,否则最新的配置文件无法生效
    4.webpack 中的loader
        作用:
            在实际开发过程中,webpack 默认只能打包处理以.js 后缀名结尾的模块,其他非.js 后缀名结尾的模块,
            webpack 默认处理不了,需要调用loader 加载器才可以正常打包,否则会报错
        loader 加载器的作用:
            协助webpack 打包处理特定的文件模块
        如:
            css-loader 可以打包处理.css 相关的文件
            less-loader 可以打包处理.less 相关的文件
            babel-loader 可以打包处理webpack 无法处理的高级js语法
        安装:
            1.安装处理css 文件的loader
                (1)安装处理css 文件的loader
                    npm i style-loader@3.0.0 css-loader@5.2.6 -D
                (2)在webpack.config.js 的module -> rules 数组中
                    module:{  // 所有第三方文件模块的匹配规则
                        rules: [    // 文件后缀名的匹配规则
                            {test: /\.css$/,use: ['style-loader','css-loader']}
                        ]  
                    }
                    // 其中test 表示匹配的文件类型,use表示对应要调用的loader
                    注意:
                        use 数组中指定的loader 顺序是固定的
                        多个loader 的调用顺序是:从后往前调用
            
            2.安装处理lcss 文件的loader
                (1)安装处理lcss 文件的loader
                    npm i less-loader@10.0.1 less@4.1.1 -D
                (2)在webpack.config.js 的module -> rules 数组中,添加loader 规则:
                    module:{    // 所有第三方文件模块的匹配规则
                        rules: {    // 文件后缀名的匹配规则
                            { test: /\.less$/, use: ['style-loader', 'css-loader','less-loader'] }
                        }
                    }
                
            3.安装打包处理样式表中与url 路径相关的文件
                (1)安装打包处理样式表中与url 路径相关的文件
                    npm i url-loader@4.1.1 file-loader@6.2.0 -D
                (2)在webpack.config.js 的module -> rules 数组中,添加loader 规则:
                    module:{  // 所有第三方文件模块的匹配规则
                        rules: {    // 文件后缀名的匹配规则
                            {test: /\.jpg|png|gif$/,use:'url-loader?limit=22229'}
                        }
                    }
                    注意:
                        ? 之后的是loader 参数项:
                        limit 用来指定图片的大小,单位是字节(byte)
                        只有<= limit 大小的图片,才会被转为base64 格式的图片

            4.对于webpack 都无法处理的JS 高级语法,需要安装babe-loader
                (1)npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D
                (2)在webpack.config.js 的module -> rules 数组中,添加loader 规则:
                    module:{  // 所有第三方文件模块的匹配规则
                        rules: {    // 文件后缀名的匹配规则
                           {test: /\.js$/,use:'babel-loader',exclude:/node_modules/}
                        }
                    }
                    // 注意:必须使用exclude 指定排除项,因为node_modules 目录下的第三方包不需要被打包
                (3)在项目根目录下,创建名为babel.config.js 的配置文件,定义Babel 的配置项如下:
                    module.exports = {
                        // 声明babel 可用的插件
                        plugins: [['@babel/plugin-proposal-decorators',{legacy:true}]]
                    }
    5.打包发布
        在package.json 文件的scripts 节点下,新增build 命令:
        配置:
            "scirpts": {
                "dev": "webpack serve",     // 开发环境中,运行dev 命令
                // 生产时:serve 生成的文件是放到内存上
                "build": "webpack --mode production"    // 项目发布时,运行build 命令
                // 发布命令:npm run build
                // 发布时生成的文件是放到磁盘上
            }
            注意:
                --model 是一个参数项,用来指定webpack 的运行模式
                production 代表生产环境,会对打包生成文件进行代码压缩和性能优化
                通过 --model 指定的参数项,会覆盖webpack.config.js 中的model 选项

        在开发阶段:
            npm run dev
            serve  生成的文件在内存上
        在发布阶段:
            npm run build
            生成的文件在物理磁盘上

        自动清理dist 目录下的旧文件
            (1)安装:安装清理dist 目录的webpack 插件
                npm i clean-webpack-plugin@3.0.0 -D
            (2)按需导入插件,得到插件的构造函数之后,创建插件的实例对象
                const {CleanWebpackPlugin} = require('clean-webpack-plugin')
            (3)把创建的cleanPlugin 插件实例对象,挂载到plugins 节点中
                plugins: [htmlPlugin,new CleanWebpackPlugin()]   // 挂载插件
    6.Source Map
        Source Map 是一个信息文件,里面存储着位置信息
        Source Map 文件中存储着压缩混淆后的代码所对应的转换前的位置
        出错时会直接显示原始代码的位置,而不是转换后的代码的出错位置
        
        配制:
            在webpack.config.js中添加:
                module.exports = {
                    devtool: 'eval-source-map'
                }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值