【Webpack】基础知识点

目录

一、相关概念

二、相关操作

Ⅰ.两个js文件打包成1个js文件

Ⅱ.自动生成html文件

Ⅲ.打包css文件

Ⅳ.打包less文件

Ⅴ.打包图片文件

Ⅵ.处理字体图标

Ⅶ.降级js语法

三、开发服务器 


一、相关概念

本质:一个第三方模块包,用于分析,并打包代码

        支持所有类型的文件的打包

        支持less/sass=>css

        支持ES5/7/8=>ES5

webpack打包流程:

        初始化包环境 yarn init

        安装依赖包 yarn add webpack webpack-cli -D

        配置scripts(自定义命令) "scripts":{ "build":"webpack"}


二、相关操作

Ⅰ.两个js文件打包成1个js文件

①新建src下的资源

②add.js定义求和函数并导出

③index.js引入add模块并使用函数输出结果

④执行“yarn build”自定义命令,进行打包(确保终端路径在src的父级文件夹)


webpack再次打包

①src下新建tool/tool.js

②定义数组求和函数导出

③index.js-引入tool模块函数并使用,打印结果

④执行‘yarn build’自定义命令,进行打包


修改webpack默认的入口(src/index.js)和默认的出口(dist/main.js)

①可以在webpack.config.js中配置entry属性,来指定一个或者多个不同的入口起点

②可以在webpack.config.js中指定一个output字段

const path=require('path')
module.exports={
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    }
}

Ⅱ.自动生成html文件

①.新建public/index.html

②下载插件   yarn add html-webpack-plugin -D

③webpack.config.js添加配置

const path=require('path')
const HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    },
    plugin:[
        new HtmlWebpackPlugin({
            template:'./public/index.html'
        })
    ]
}

注意:webpack默认只能处理js文件


css-loader 会对@import和url()进行处理,就像解析import/require()一样

style-loader 把css插入到DOM中

Ⅲ.打包css文件

①.新建src/css/index.css

②.在main.js中引入css

import "./css/index.css"

③.下载加载器    yarn add css-loader style-loader -D

④.webpack.config.js配置

const path=require('path')
const HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    },
    plugin:[  //plugins插件配置
        new HtmlWebpackPlugin({
            template:'./public/index.html'//告诉webpack使用插件时,以我们的html文件作为模板去生成dist/html文件
        })
    ],
    module:{  //加载器配置
        rules:[  //规则
            {
                test:/\.css$/i,//匹配.css结尾的文件
                use:["style-loader","css-loader"]//让webpack使用这两个loader处理css文件
                //从右到左,所以不能颠倒顺序
                //css-loader:webpack解析css文件-把css代码一起打包进js中
                //style-loader:css代码插入到DOM中
            }
        ]
    }
}

Ⅳ.打包less文件

less-loader:识别less文件

less:将less编译为css

①.新建src/less/index.less

②.在main.js中引入less

import "./less/index.less"

③.下载加载器    yarn add  less less-loader  -D

④.webpack.config.js配置

const path=require('path')
const HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    },
    plugin:[  //plugins插件配置
        new HtmlWebpackPlugin({
            template:'./public/index.html'//告诉webpack使用插件时,以我们的html文件作为模板去生成dist/html文件
        })
    ],
    module:{  //加载器配置
        rules:[  //规则
            {
                test:/\.css$/i,//匹配.css结尾的文件
                use:["style-loader","css-loader"],//让webpack使用这两个loader处理css文件
                //从右到左,所以不能颠倒顺序
                //css-loader:webpack解析css文件-把css代码一起打包进js中
                //style-loader:css代码插入到DOM中
            },
            {
                test:/\.less$/i,
                use:[
                    "style-loader",
                    "css-loader",
                    "less-loader"
                ],
            }
        ]
    },
}

Ⅴ.打包图片文件

①新建src/assets/下准备图片文件

②在index.less对body设置背景图片

 body{
            background: url('../assets/logo_small.png') no-repeat center;
        }

③在main.js导入图片文件,设置img标签插入到body

import imObj from './assets/1.gif'
let theImg=document.createElement("img")
theImg.src=imgObj
document.body.appendChild(theImg)

④.webpack.config.js配置

const path=require('path')
const HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    },
    plugin:[  //plugins插件配置
        new HtmlWebpackPlugin({
            template:'./public/index.html'//告诉webpack使用插件时,以我们的html文件作为模板去生成dist/html文件
        })
    ],
    module:{  //加载器配置
        rules:[  //规则
            {
                test:/\.css$/i,//匹配.css结尾的文件
                use:["style-loader","css-loader"],//让webpack使用这两个loader处理css文件
                //从右到左,所以不能颠倒顺序
                //css-loader:webpack解析css文件-把css代码一起打包进js中
                //style-loader:css代码插入到DOM中
            },
            {
                test:/\.less$/i,
                use:[
                    "style-loader",
                    "css-loader",
                    "less-loader"
                ],
            },
            {
                //图片文件的配置
                test:/\.(gif|jpg|jpeg)$/,
                type:'asset' //匹配上面的文件后webpack会把他们当作静态资源处理打包
            }
        ]
    },
}

如果设置的是asset模式

        会以8KB大小区分图片文件

        小于8KB的,把图片转换成base64打包进出口文件中

        大于8KB的,把图片文件直接输出到dist下面


图片转换成base64,放到了js文件中

        好处:浏览器不用发请求,直接可以读取,速度快

        坏处:图片太大,再转换成base64就会让图片的体积增大30%左右,得不偿失


Ⅵ.处理字体图标

①新建src/assets/下放入fonts字体相关文件夹

②在main.js引入assets/fonts/iconfont.css

③在main.js创建一个i标签,使用字体图标标签添加到body上

import './assets/fonts/iconfont.css'
let theI=document.createElement('i')
theI.className='iconfont icon-qq'
document.body.appendChild(theI)

④webpack.config.js配置

const path=require('path')
const HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    },
    plugin:[  //plugins插件配置
        new HtmlWebpackPlugin({
            template:'./public/index.html'//告诉webpack使用插件时,以我们的html文件作为模板去生成dist/html文件
        })
    ],
    module:{  //加载器配置
        rules:[  //规则
            {
                test:/\.css$/i,//匹配.css结尾的文件
                use:["style-loader","css-loader"],//让webpack使用这两个loader处理css文件
                //从右到左,所以不能颠倒顺序
                //css-loader:webpack解析css文件-把css代码一起打包进js中
                //style-loader:css代码插入到DOM中
            },
            {
                test:/\.less$/i,
                use:[
                    "style-loader",
                    "css-loader",
                    "less-loader"
                ],
            },
            {
                //图片文件的配置
                test:/\.(gif|jpg|jpeg)$/,
                type:'asset' //匹配上面的文件后webpack会把他们当作静态资源处理打包
            },
            {
                test:/\.(eot|svg|ttf|woff|woff2)$/,
                type:'asset/resource',//所有的字体图标,都输出到dist下
                generator:{ //生成文件的名字-定义规则
                    filename:'fonts/[name].[hash:6][ext]'  //[ext]会替换成.eot或.woff
                }
            }
        ]
    },
}

Ⅶ.降级js语法

①在src/main.js中定义箭头函数,并打印箭头函数变量(千万不能调用,为了让webpack打包函数,看降级效果)

①下载加载器   yarn add babel-loader @babel/core @babel/preset-env -D

②webpack.config.js配置

const path=require('path')
const HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={
    entry:'./src/main.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    },
    plugin:[  //plugins插件配置
        new HtmlWebpackPlugin({
            template:'./public/index.html'//告诉webpack使用插件时,以我们的html文件作为模板去生成dist/html文件
        })
    ],
    module:{  //加载器配置
        rules:[  //规则
            {
                test:/\.css$/i,//匹配.css结尾的文件
                use:["style-loader","css-loader"],//让webpack使用这两个loader处理css文件
                //从右到左,所以不能颠倒顺序
                //css-loader:webpack解析css文件-把css代码一起打包进js中
                //style-loader:css代码插入到DOM中
            },
            {
                test:/\.less$/i,
                use:[
                    "style-loader",
                    "css-loader",
                    "less-loader"
                ],
            },
            {
                //图片文件的配置
                test:/\.(gif|jpg|jpeg)$/,
                type:'asset' //匹配上面的文件后webpack会把他们当作静态资源处理打包
            },
            {
                test:/\.(eot|svg|ttf|woff|woff2)$/,
                type:'asset/resource',//所有的字体图标,都输出到dist下
                generator:{ //生成文件的名字-定义规则
                    filename:'fonts/[name].[hash:6][ext]'  //[ext]会替换成.eot或.woff
                }
            },
            {
                test:/\.m?js$/,
                exclude:/(node_modules|bower_components)/,//不去匹配这些文件下的文件
                use:{
                    loader:'babel-loader',//使用这个loader处理js文件
                    options:{//加载器选项
                        presets:['@babel/preset-env']//按照这里的规则降级我们的js语法
                    }
                }
            }
        ]
    },
}

三、开发服务器 

           缓存已经打包的内容,只重新打包修改的文件,最终运行在内存中给浏览器使用

①下载模块包  yarn add webpack-dev-server -D

②自定义webpack开发服务器启动命令server在package.json里

  "scripts": {
    "build":"webpack",
    "server":"webpack server"
  }

③启动当前工程里的webpack开发服务器  yarn server

此时的dist在服务器的内存中

修改开发的服务器的端口

        webpack.config.js配置

    devServer:{
        port:3000
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
webpack的重要知识点包括以下几个方面: 1. 模块化打包:webpack前端的所有资源文件都视为模块,并根据模块的依赖关系进行静态分析,最终打包生成对应的静态资源。 2. 配置文件:webpack使用webpack.config.js文件来配置打包过程。在配置文件中可以设置入口文件、输出路径、加载器、插件等各种参数,以满足项目的需求。 3. 加载器:webpack通过加载器来处理各种类型的文件。常用的加载器有babel-loader用于处理ES6及以上的JavaScript代码,css-loader用于处理CSS文件,file-loader用于处理图片和字体文件等。 4. 插件:webpack的插件用于扩展其功能。常用的插件有HtmlWebpackPlugin用于生成HTML文件,CleanWebpackPlugin用于清理输出目录,MiniCssExtractPlugin用于提取CSS文件等。 5. 开发服务器:webpack-dev-server是一个开发服务器,它可以在内存中编译代码并提供资源,实现快速的开发和调试。 以上是webpack的一些重要知识点,它们可以帮助你更好地理解和使用webpack进行前端资源的构建和打包。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [webpack打包基础知识点与es6知识点.xmind](https://download.csdn.net/download/qq_43291759/13106867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Webpack重要知识点](https://blog.csdn.net/sinat_17775997/article/details/95167425)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [webpack知识点总结](https://blog.csdn.net/baidu_39067385/article/details/119428908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值