WebPack

第一节、基本概念

前端资源构建工具/前端打包工具

具体功能:

  • 代码的转换 sass—css es6–es5 ts–>js 【提供代码的兼容性】
  • 零散的文件—进行统一的管理 【提供页面运行的效率】
  • 压缩–源代码中可能存在大量的空格 换行。
  • 提供了模块化的思想。【将每一HTML CSS JS 图片 当成一个独立的模块 ,模块之间互相任意的组合】

官网

https://webpack.docschina.org/

image-20221205113845957

第二节、webpack的核心配置文件

作用:webpack所有的功能的实现都是通过核心配置文件来进行指定

注意:每一个被webpack打包的项目都会有一个核心配置文件,核心配置的名字:webpack.config.js

核心的配置项:

module.exports = {
    mode:"development(开发模式)/production(生产模式)"    //打包模式
    entry:{} //打包的JS的入口 -- 从哪打
	output:{} //打包的出口 -- 打到哪
	
	plugins:[]//插件的配置  
	module:{rules:[]}
	devServer: //服务端的配置{通过代理来实现前端跨域}
}

第三节、webpack打包

准备工作

  • 创建1个空项目
  • 初始化项目 npm init
  • 安装插件 npm i webpack webpack-cli -D [关于开发包–打包后的代码不存在 与生产包–最终打包后的代码存在的]
  • 在项目根目录中创建src文件夹【放置你的源代码】。在项目根目录中创建webpack.config.js的核心配置文件

打包JS文件

注意:webpack默认只能打包JS文件

  • 在src目录中创建JS文件

  • let path = require("path")
    module.exports = {
        mode:"production",
        entry:{  //指定需要打包哪些JS文件
            //属性名:属性值
            login:"./src/js/user/login.js"
        },
        output:{  //指定需要打包到哪个地方去
            path:path.resolve(__dirname,"dist"),   //配置出口的目录 path.resolve 目录的拼接   __dirname 动态获取当前项目的根目录
            filename:"xx.js"//打包的文件名
        }
    }
    
  • 执行打包命令

    npx webpack
    

    打包多个JS文件【这多个JS文件之间完全独立】

    let path = require("path")
    module.exports = {
        mode:"production",
        entry:{  //指定需要打包哪些JS文件
            //属性名:属性值  每一个属性名 对应出口中的一个文件
            login:"./src/js/user/login.js",
            registor:"./src/js/user/registor.js"
        },
        output:{  //指定需要打包到哪个地方去
            path:path.resolve(__dirname,"dist"),   //配置出口的目录 path.resolve 目录的拼接   __dirname 动态获取当前项目的根目录
            filename:"js/[name].js"//打包的文件名    [name] 会自动的找 入口配置的每一个文件的属性名作为打包的文件名
        }
    }
    

    打包多个JS文件【这多个JS文件之间有关联关系】

    1.找一个主文件【大哥】

    2.让其他的小弟依附于大哥

    image-20221205144024220

    3.打包打大哥

    image-20221205144045183

打包HTML

注意:webpack 默认只能打包JS文件,如果需要打包其他的文件,则需要安装对应的插件

html-webpack-plugin
  • 安装HTML打包插件
npm i html-webpack-plugin -D
  • 在webpack的主配置文件中引入下载的插件
//引入打包HTML的插件
let  HtmlWebpackPlugin = require("html-webpack-plugin");
  • 配置插件 每一个HTML页面都是一个HtmlWebPack的对象
plugins:[
    new HtmlWebpackPlugin({  //创建一个htmlwebpack打包插件对象  每一个HTML代码都对应一个对象
        chunks:["login"],  //当前页面需要引入的JS文件
        template:"./src/html/user/login.html",  //打包时文件的入口--需要被打包的HTML代码
        filename:"./html/login.html"  //出口【默认都是在path 指定的路径  dist目录】
    })
]

image-20221205153707228

[补充] 清理插件

  • 安装插件
npm i clean-webpack-plugin -D
  • 使用插件

    • 引入
    let {CleanWebpackPlugin} = require("clean-webpack-plugin");
    
    • 使用
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zbqLyHZX-1680329400091)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221205154347581.png)]

打包样式

打包CSS【样式跟随JS走–依附于JS文件】

注意:如果需要让webpack帮你打包css ,css文件必须是一个单独的文件。虽然只有这样webpack才会给你打包css代码,但是并不意味着写的内联的样式不会跟随你的html代码。

  • 安装插件
css-loader   核心插件
style-loader 打包内联样式
mini-css-extract-plugin 打包外联样式
  • module

配置内联样式

module:{
    rules:[
        {
            test:/\.css$/i,   //指定需要打包哪些文件-- 根据这个规则匹配文件 
            use:["style-loader","css-loader"]    //使用哪些插件来打包上诉匹配到的文件
        }
    ]
}

image-20221205163019739

配置外联样式

1、安装插件

2、配置module 中rules

//引入外联样式插件
let MiniCssExtractPlugin = require("mini-css-extract-plugin");
--------------
module:{
    rules:[
        {
            test:/\.css$/i,   //指定需要打包哪些文件-- 根据这个规则匹配文件 
            use:[MiniCssExtractPlugin.loader,"css-loader"]    //使用哪些插件来打包上诉匹配到的文件
        }
    ]
}

3、在plugins中配置出口

image-20221205164106218

打包SCSS

1.安装插件

sass-loader 
node-sass 
module:{
    // rules:[
    // {
    //     test:/\.css$/i,   //指定需要打包哪些文件-- 根据这个规则匹配文件 
    //     use:["style-loader","css-loader"]    //使用哪些插件来打包上诉匹配到的文件
    // },
    // {
    //     test:/\.scss$/i,   //指定需要打包哪些文件-- 根据这个规则匹配文件 扫描scss
    //     use:["style-loader","css-loader","sass-loader"]    //使用哪些插件来打包上诉匹配到的文件
    // }
    //]

    rules:[
        {
            test:/\.css$/i,   //指定需要打包哪些文件-- 根据这个规则匹配文件 
            use:[MiniCssExtractPlugin.loader,"css-loader"]    //使用哪些插件来打包上诉匹配到的文件
        },
        {
            test:/\.scss$/i,   //指定需要打包哪些文件-- 根据这个规则匹配文件 
            use:[MiniCssExtractPlugin.loader,"css-loader","sass-loader"]    //使用哪些插件来打包上诉匹配到的文件
        }
    ]
}

打包图片

  • 下载插件

    file-loader  //核心插件
    url-loader  //css样式设置的图片
    html-withimg-loader//通过img标签引入的图片
    
    npm i url-loader file-loader html-withimg-loader -D
    
  • 配置 module[打包html js css的步骤都需要有]

{
    test:/\.(png|jpg|jpeg|gif)/i,
    use:[{
        loader:"url-loader", //通过background-img url的形式设置
        options:{
            limit:1024*8, //如果图片不超过8K 则转为字符串
            outputPath:"./img", //打包到dist的img中
            esModule:false
        }
    }]
},
{
    test:/.\html$/i,   //配置通过img标签引入的图片 扫描的扫描的时候  需要扫描html页面
    use:["html-withimg-loader"]
}

注意事项:如果需要打包被css样式引用的图片,需要将css的loader 降为5.2.6

第四节、前端开服

  • 下载插件
npm i webpack-dev-server -D

  • 打包开服
npx webpack serve

devServer:{
    port:8081,  //配置端口号
    open:true,  //一旦启动成功会自动打开浏览器
    hot:true  //热更新
}

注意:打包jQuery 在需要使用页面对应的JS文件中

import $ from "../../js/user/jquery-3.6.0.min.js"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值