【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
    }

猜你喜欢

转载自blog.csdn.net/Primary_Insist/article/details/123311303