webpack

webpack

概念

前端资源构建工具 / 前端打包工具
​
它做的事情:
    1 把代码进行压缩 (jquery.js--->jquery.min.js)
    2 合并 (把多个js合并成一个js)
    3 转换(scss-->cs,ts---》js,es6-->ES5)
买点:模块化思想 (复用性)
  他把每一个资源(html、css、js)都当成一个模块,模块之间是可以在自由组合(通过配置文件进行组合)
​

核心属性:

webpack.config.js:

module.exports={
    mode:"开发/生产模式",
    entry:{打包js入口}
    output:{打包js的出口},
    plugins:[插件加载],
    module:{
        //规则
        rules:[]
    },
    devServer:{
        //前端服务器,前端跨域
    }
    
    
​
}

前置:

步骤1:

局部下载安装核心插件
npm i webpack webpack-cli -D
​
-D:代表的是所下载的插件不会被打包(打包之后是不含该插件的)
打包前:叫做开发版
打包后:叫做生产版(上线)
普通下载列表:
​
 "dependencies": {
    "jquery": "^3.6.1"
  }
  
-D下载列表
  "devDependencies": {
    "multer": "^1.4.5-lts.1"
  }
  
  

步骤2:

在项目的根目录新建src目录,我们以后的源码全部放在该目录中

步骤3:

在项目的根目录新建  webpack.config.js  配置文件,编辑:
​
​
module.exports={
    
​
}

打包命令:

npx webpack

打包js

webpack默认只能打包js

let path=require("path")
module.exports={
    // mode:"production/development"
    //打包模式
    mode:"production",
     //打包入口
    entry:{
        //自定义属性:"js的路径"
        login:"./src/user/login/login.js",
        register:"./src/user/register/register.js"
    },
    //打包出口
    output:{
        // path:"C:/83/code1/webpack_83/dist"
        path:path.resolve(__dirname,"dist"),
        //  [name]是关键词,代表动态
        filename:"js/[name].js"      
    }
}

注意:

1  如果某个模块中有多个js,比如login模块有login.js、a.js、b.js,则我们无需把三个js都打包,而是选择用login.js引入其他两个js,最终只需要打包login.js即可
​
2 webpack可以让我们使用import命令时不用写后缀.js

打包html

1 局部下载插件

npm i html-webpack-plugin -D

2 配置

let path=require("path")

//页面插件
let HtmlWebpackPlugin =require('html-webpack-plugin')


module.exports={
    // mode:"production/development"
    //打包模式
    mode:"production",
     //打包入口
    entry:{
        //自定义属性:"js的路径"
        login:"./src/js/user/login/login.js",
        register:"./src/js/user/register/register.js",

    },
    //打包出口
    output:{
        // path:"C:/83/code1/webpack_83/dist"
        path:path.resolve(__dirname,"dist"),
        //  [name]是关键词,代表动态
        filename:"js/[name].js"      
    },
    //插件
    plugins:[
        // new HtmlWebpackPlugin({
        //     //当前页面引入哪些js文件
        //     chunks:['login'],
        //     //打包html的入口
        //     template:"./src/html/user/login.html",
        //     //打包html的出口
        //     filename:"html/login.html"
        // }),
        getHtmlWebpackPlugin('login'),
        getHtmlWebpackPlugin('register')
    ]
}

function getHtmlWebpackPlugin(name){
    return new HtmlWebpackPlugin({
        //当前页面引入哪些js文件
        chunks:[name],
        //打包html的入口
        template:`./src/html/${name}.html`,
        //打包html的出口
        filename:`html/${name}.html`
    })
}


补充:打包前自动删除dist目录插件

下载:

npm i clean-webpack-plugin -D

配置:

//引入清理插件
let {CleanWebpackPlugin}=require('clean-webpack-plugin')
   
   
 plugins:[   
     //清理插件
     new CleanWebpackPlugin()
 ]

打包css

下载插件

npm i mini-css-extract-plugin  css-loader  style-loader -D

 css-loader:核心插件
 mini-css-extract-plugin: 外部样式
 style-loader 内部样式
 
 外部样式和内部样式,只能选择一个

切记:

样式css必须在某个js文件中引入

1 内部样式:

    //模块以及规则
    module:{
        rules:[
            //内部样式规则
            {
                //匹配的文件才会被打包
                test:/\.css$/i,
                //使用
                use:['style-loader','css-loader']
            },
        ]
    }

2 外部样式:

//引入外部css插件
let MiniCssExtractPlugin=require('mini-css-extract-plugin')


 plugins:[
      

        //外部css插件
        new MiniCssExtractPlugin({
            //打包的出口
            filename:"css/[name].css"
        })
    ],
    
    
module:{
        rules:[                 
            //外部样式规则
            {
                //匹配的文件才会被打包
                test:/\.css$/i,
                //使用
                use:[MiniCssExtractPlugin.loader,'css-loader']
            },

        ]
    }  

打包scss (得基于css的插件和相关配置)

1 下载

npm i sass-loader  -D
npm i node-sass -D   资源在国外,如果失败,多操作几遍

2

内部样式

                      
    module:{
        rules:[                 
            //外部样式规则

            {
                //匹配的文件才会被打包
                test:/\.scss$/i,
                //使用
                use:['style-loader','css-loader','sass-loader']
            },

        ]
    }  

外部样式

                       
    module:{
        rules:[                 
           //scss外部样式
            {
                //匹配的文件才会被打包
                test:/\.scss$/i,
                //使用
                use:[MiniCssExtractPlugin.loader,'css-loader','sass-loader']
            },

        ]
    } 

打包图片 (依赖css配置和插件)

情况

1 标签:<img src=""
2 css:background-image:url('')

下载插件

npm i url-loader file-loader html-withimg-loader -D

注意:

需要降低css-loader 版本为 5.2.6


npm uni css-loader
npm i css-loader@5.2.6 -D

配置:

module:{
        rules:[


            //css图片
            {
                test:/\.(jpeg|png|jpg|gif)$/i,
                use:[{
                    loader:"url-loader",
                    options:{
                        //图片<8kb则会自动转成base64字符串
                        limit:1024*8,
                        //大于8kb的图片的出口
                        outputPath:"./img",
                        //解决最新版bug
                        esModule:false
                    }

                }]
            },

            //html标签图片 依赖css配置
            {
                //匹配哪些页面
                test:/\.html$/i,
                use:["html-withimg-loader"]
            }

        ]
    }

devServer服务器

1 下载插件

npm i webpack-dev-server -D

2 使用:

打包:npx webpack
打包+开服: npx webpack serve
解释打包:只会打包到内存,不会真正的打包到dist硬盘---用于开发

3 特点:

热更新,方便程序员,增加了开发效率

4 其他配置

 devServer:{
        //改变端口
        port:8888,
        //自动打开浏览器
        open:true,
        //热更新
        hot:true,
        //前端处理跨域,内嵌一个代理服务器
        proxy:{
            // "/标识":{target:"代理的地址"}
            // "/stus":{
            //     target:"http://localhost:3000"
            // },
            // "/clas":{
            //     target:"http://localhost:3000"
            // },
            // "/users":{
            //     target:"http://localhost:3000"
            // },

             "/":{
                target:"http://localhost:3000"
             },

            /*
                1 在ajax中的url必须以/stus开头,代理才能生效
                2  /stus  ---相当于----   http://localhost:3000/stus
                 /stus/getStus  ---相当于----  http://localhost:3000/stus/getStus
            */
        }

    }

5 使用jquery

//引入jquery
import $ from '../../jquery.min.js'
//自己的业务
$("#btn").click(function(){
    $.ajax({
        url:"/stus/getStus",
        success(res){
            console.log(res);
        }
    })
})

面试题:webpack属性的理解

1 mode   设置开发/生产模式
2 entry  js入口
3 output js出口
4 plugins  打包页面、外部css的插件
5 module  样式(scss、css)、图片的规则  --->匹配正则+使用xx加载器
6 devServer 内嵌服务器,自己开服不依赖其他服务器,核心解决前端跨域

npx webpack  -->打包
npx webpack serve  --》开服

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值