webpack5教程

2023-10-31

目录

简介

创建webpack项目

webpack核心配置文件config的使用

webpack打包多入口、多出口

如何配置webpack-dev-server

1:了解webpack-dev-server

2:安装webpack-dev-server

3:配置webpack.config.js文件

 4:配置package.json

5:运行

loder

1:简介

2:安装css相关的loder

3:配置loader

less-loader

1:安装

2:创建一个less文件

3:配置loader

sass-loader

1:安装

2:创建一个scss文件

3:配置loader

PostCSS处理浏览器前缀(处理浏览器兼容问题)

1:安装loader

2:配置loader 在webpack.config.js添加

3:打包

4:引入js,查看效果

图片处理

1:安装loader

2:配置loader

3:给css中引入一张图片

4:打包

5:查看效果

字体处理

1:安装loader

2:配置loader

第三方js库处理

方式一:本地导入 使用webpack.ProvidePlugin

方式二:使用npm安装的方式

babel编辑es6语法

1:简介

2:安装依赖

3:配置webpack.config.js

4:配置转换规则

自动生成HTML文件插件

1:简介

2:安装依赖

3:配置webpack.config.js

4:新建index.html模板文件

5:打包、查看效果

提取分离css文件打包到单独文件

1:安装依赖

2:配置webpack.config.js

3:打包、查看效果

压缩及优化css结构

1:安装插件

2:配置webpack.config.js

拷贝静态文件

1:简介

2:安装插件

3:配置webpack.config.js

4:打包、查看效果

打包之前清除旧的打包文件

1:安装插件

2:配置webpack.config.js

3:打包、查看效果

HTML文件中引用图片

html-loader | webpack

区分生产环境和开发环境

1:安装

2:创建3个文件,放不同环境的配置

3:配置package.json

​编辑

 4:打包


webpack官网:https://webpack.js.org/

webpack中文网:https://www.webpackjs.com

简介

本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。

创建webpack项目

1、电脑上安装好node

2、创建package.json文件

命令:npm init

// 输入项目名称版本描述作者等信息,跳过直接按回车,最后就会生成package.json文件

3、安装webpack

  • 本地安装(推荐)

        npm install --save-dev webpack

        npm install --save-dev webpack-cli

  • 全局安装

        npm install --global webpack webpack-cli

    安装完成后会在项目路径下生成package-lock.json文件

4、打包

        默认入口  src/index.js        //手动新建此文件

        默认出口  dist/main.js

  • 打包模式

        编辑package.json配置文件的 scripts 块

"scripts": {
    "dev": "webpack --mode development",        // 开发环境
    "pro": "webpack --mode production"             // 生产环境
},

 然后在终端窗口使用命令即可打包:npm run dev    // npm run pro

webpack核心配置文件config的使用

示例:修改默认打包时的入口和出口文件路径

1、在项目根路径下创建webpack.config.js文件

2、编辑webpack.config.js文件 信息如下:

const path = require("path");

module.exports = {
    entry: "./public/index.js",                // 这里是入口文件了
    output: {
        path: path.resolve(__dirname, "build"),        // 这里是出口文件夹
        filename: "bundle.js"                                     // 这个是出口文件
    }
}

// 代码说明

path:指文件打包后存放的路径

entry:入口打包文件

path.resolve("", ""):将当前路径处理成绝对路径,第二个参数可以在第一个参数的绝对路径上使用../的方式指定到上级路径

__dirname:表示当前所在目录的绝对路径

filename:是打包后文件的名称

webpack打包多入口、多出口

1:单入口 多文件的形式

const path = require("path");

module.exports = {

    entry:[        // 这里改成数组

        "./src/index1.js",

        "./src/index2.js"

    ],

    output: {

        path: path.resolve(__dirname, "build"),

        filename: "bundle.js"

    }

}

2:多入口 多出口的形式

const path = require("path");

module.exports = {

    entry:{        // 这里改成对象

        pageOne:"./public/pageOne/index.js",

        pageTwo:"./public/pageTwo/index.js"

    },

    output: {

        path: path.resolve(__dirname, "build"),

        filename: "[name].js"        // 这里的name对应着entry的属性名就是(pageOne、pageTwo)

    }

}

如何配置webpack-dev-server

1:了解webpack-dev-server

webpack-dev-server 是用来配置本地服务器的,使用它可以为webpack打包生成的资源文件提供web服务。

webpack-dev-server主要提供两个功能:

        (1):为静态文件提供web服务

        (2):自动刷新和热替换(HMR)

2:安装webpack-dev-server

npm install --save-dev webpack-dev-server

3:配置webpack.config.js文件

devServer: {
    static: "./build",             // 设置服务器访问的基本目录
    host: "localhost",          // 服务器的ip地址
    port: 8080,                 // 端口号
    open: true                  // 是否自动打开页面,true:自动打开,false:不打开

    compress: true,         // 是否启用 gzip 压缩

    hot: true                        // 模块热替换
}

 4:配置package.json

"scripts": {
    "start": "webpack-dev-server --mode development"
}

5:运行

        (1):先打包

                npm run dev

        (2):启动服务器

                npm run start

默认会访问 index.html页面,没有的话就显示如下


loder

1:简介

loader 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。loader 甚至允许你直接在 JavaScript 模块中 import css文件

可以理解为使用webpack的话,以前写html时直接引用静态文件的方式将不起作用,处理非JavaScript静态文件,需要使用webpack提供的特定加载器才可以正常使用

2:安装css相关的loder

npm install --save-dev style-loader css-loader

3:配置loader

        (1):在webpack.config.js文件里配置module中的rules

                在webpack的配置中loader有两个目标:

                        1. test属性,用于标识出应该被对应的loader进行转换的单个或者多个文件。

                        2. use属性,表示进行转换时,应该使用哪个loader。

module: {
    rules: [
        {
            test: /\.css$/,        // 正则表达式,表示以css文件结尾
            use: ["style-loader", "css-loader"]
        }
    ]
}

        (2):创建一个css文件,被js文件引用

        

        (3):打包:npm run dev

        (4):在出口目录创建一个.html文件,然后引入打包后的js

        (5):打开html页面,查看效果

less-loader

1:安装

npm install --save-dev less-loader less 

2:创建一个less文件

3:配置loader

module: {
        rules: [
            {
                test: /\.less$/,
                use: [
                    "style-loader", "css-loader", "less-loader"
                ]
            }
        ]
}

(和css-loader一样,这里节省篇幅就不重复贴了) less文件被js引用,然后打包,然后html文件中引入less中的样式

sass-loader

1:安装

npm install --save-dev sass-loader node-sass

2:创建一个scss文件

3:配置loader

module: {
    rules: [
        {
            test: /\.scss$/,
            use: ["style-loader", "css-loader", "sass-loader"]
        }
    ]
}

4:引入

5:打包   npm run dev

6:html引入scss样式,打开页面看效果


PostCSS处理浏览器前缀(处理浏览器兼容问题)

1:安装loader

npm install --save-dev postcss-loader autoprefixer

2:配置loader 在webpack.config.js添加

{
    test:/\.css$/,
    use:[
        "style-loader",
        "css-loader",
        "postcss-loader"
    ]
}

然后在项目根路径创建文件postcss.config.js (和webpack.config.js同级)

module.exports = {

    plugins: [

        // 兼容浏览器,添加前缀

        require('autoprefixer')({

            overrideBrowserslist: [

                "ie >= 8",

                "Firefox >= 20",

                "Safari >= 5",

                "Android >= 4",

                "Ios >= 6"

                //'last 10 versions', // 所有主流浏览器最近10版本用

            ],

            grid: true

        })

    ]

}

3:打包

npm run dev

4:引入js,查看效果


图片处理

1:安装loader

npm install --save-dev file-loader

2:配置loader

{
    test: /\.(png|jpg|gif|jpeg)$/,
    use: [
        {
            loader: 'file-loader',
            options: {
                esModule: false
            }
        }
    ],
    type: 'javascript/auto'
}

关于file-loader的options选项的说明:

        name:为你的文件配置自定义文件名模板(默认值[hash].[ext])
        context:配置自定义文件的上下文,默认为 webpack.config.js
        publicPath:为你的文件配置自定义 public 发布目录(为文件指定访问的域名目录)
        outputPath:为你的文件配置自定义 output 输出目录(指定打包好后的文件存放目录)

        [ext]:资源扩展名
        [name]:资源的基本名称
        [path]:资源相对于 context的路径
        [hash]:内容的哈希值

3:给css中引入一张图片

4:打包

npm run dev

5:查看效果


字体处理

1:安装loader

npm install --save-dev file-loader

2:配置loader

{
    test:/\.(ttf|woff|woff2|eot|svg)$/,
    use:[{
        loader:'file-loader',
        options:{
            outputPath:'font/'        // 为打包好的文件指定目录,不然打包好后都在根目录下显得很乱
        }
    }]
}

其他的与上面一样


第三方js库处理

* 示例:导入jquery库举例

方式一:本地导入 使用webpack.ProvidePlugin

webpack.ProvidePlugin:参数是键值对形式,键就是我们项目中使用的变量名,值就是键所指向的库。webpack.ProvidePlugin会先从npm安装的包中查找是否有符合的库。如果webpack配置了resolve.alias选项(理解成“别名”),那么webpack.ProvidePlugin就会顺着设置的路径一直找下去

(1):下载jquery库文件,导入到项目中

(2):配置webpack.config.js

const webpack = require("webpack");

module.exports = {
    resolve: {
        alias: {
            jQuery: path.resolve(__dirname, "public/js/jquery-3.6.1.min.js")    // 这里写第三方库所在的路径
        }
    },
    plugins: [
        new webpack.ProvidePlugin({
            jQuery: "jQuery"
        })
    ]
}

 (3):在js文件中使用jquery库

(4):打包、查看效果

方式二:使用npm安装的方式

(1):安装jquery库

npm install --save-dev jquery

(2):在js文件中引入jquery

import $ from "jquery"; // $:表示jquery变量名

(3):在js文件中使用jquery

 (4):打包、查看效果


babel编辑es6语法

1:简介

目前,ES6(ES2015)这样的语法已经得到很大规模的应用,它具有更加简洁、功能更加强大的特点,实际项目中很可能会使用采用了ES6语法的模块,但浏览器对于ES6语法的支持并不完善。为了实现兼容,就需要使用转换工具对ES6语法转换为ES5语法,babel就是最常用的一个工具。

babel转化语法所需依赖项:

        babel-loader: 负责 es6 语法转化

        babel-core: babel核心包

        babel-preset-env:告诉babel使用哪种转码规则进行文件处理

2:安装依赖

npm install --save-dev babel-loader @babel/core @babel/preset-env

3:配置webpack.config.js

const path = require("path");

module.exports = {
    module:{
        rules:[
            {
                test: /\.js$/,
                exclude: /node_modules/,        // exclude:表示排除查找目录
                use: "babel-loader"
            }
        ]
    }
}

4:配置转换规则

方式一:在根目录下新建.babelrc文件

 方式二:配置webpack.config.js

const path = require("path");

module.exports = {
    module:{
        rules:[
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: ["@babel/preset-env"]
                    }
                }
            }
        ]
    }
}

5:在js文件中使用es6语法,然后查看打包后的js文件是否是es5语法

转换前

转换后 


自动生成HTML文件插件

1:简介

HtmlWebpackPlugin会自动为你生成一个HTML文件,根据指定的index.html模板打包后生成对应的 html 文件,相关引用关系和文件路径都会按照正确的配置被添加进生成的html里

2:安装依赖

npm install --save-dev html-webpack-plugin

3:配置webpack.config.js

const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
    plugins: [
        new HtmlWebpackPlugin({
            template: "./public/index.html",        // 指定模板文件
            filename: "main.html"                      // 指定打包后的html文件名称
        })
    ]
}

更多参数说明:

4:新建index.html模板文件

5:打包、查看效果


提取分离css文件打包到单独文件

1:安装依赖

npm install --save-dev mini-css-extract-plugin

2:配置webpack.config.js

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
    module:{
        rules:[
            {
                test:/\.css$/,
                use:[MiniCssExtractPlugin.loader, "css-loader"]
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename:"./css/index.css"        // 打包后的css文件路径和名称
        })
    ]
}

3:打包、查看效果

npm run dev

 


压缩及优化css结构

1:安装插件

npm install --save-dev css-minimizer-webpack-plugin

2:配置webpack.config.js

const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");

module.exports = {
    optimization: {
        minimizer: [
            new CssMinimizerPlugin({
                test: /\.css(\?.*)?$/i,    // 匹配要优化处理的文件,这个是默认值
                parallel: true,         // 是否使用多进程并发执行优化,// parallel: 4, 表示启用多进程并发执行且设置并发数
                minimizerOptions: {
                    preset: [
                        "default", { discardComments: { removeAll: true }}        // 是否去除注释
                    ]
                }
            })
        ],
        minimize: false        // 是否在开发环境下启用 CSS 优化
    }
}

3:打包、查看效果

npm run dev


拷贝静态文件

1:简介

打包前的静态文件原封不动的拷贝到打包后的相同目录下

2:安装插件

npm install --save-dev copy-webpack-plugin

3:配置webpack.config.js

const CopyWebpackPlugin = require("copy-webpack-plugin");

module.exports = {
    plugins: [
        new CopyWebpackPlugin({
            patterns: [
                {
                    from: __dirname + "/public/js",        // 打包前的文件存放目录
                    to: __dirname + "/build/js"            // 打包后的文件存放目录
                },
                {
                    from: path.resolve(__dirname, "../public/img"),        // 两种路径方式

                    to: path.resolve(__dirname, "../build/img")
                }
            ]
        })
    ]
}

4:打包、查看效果

npm run dev


打包之前清除旧的打包文件

1:安装插件

npm install --save-dev clean-webpack-plugin

2:配置webpack.config.js

const { CleanWebpackPlugin } = require('clean-webpack-plugin');        // 变量名称上的 花括号一定要带上
module.exports = {
    plugins: [
        new CleanWebpackPlugin()
    ]
}

3:打包、查看效果

没使用此插件前,打包后,以下js文件其实都是同一个文件

 使用插件后,打包之前把之前打包的旧文件删除了


HTML文件中引用图片

html-loader | webpack


区分生产环境和开发环境

1:安装

npm install --save-dev webpack-merge

2:创建3个文件,放不同环境的配置

webpack.common.config.js                // 放公共的配置

webpack.dev.config.js                        // 放开发环境的配置

webpack.pro.config.js                        // 放生产环境的配置

编辑 webpack.common.config.js  (示例,请根据实际情况配置)

const path = require("path");
const webpack = require("webpack");

module.exports = {
    // 如果有公共的配置,就写上
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname, 'build'),        //注意路径问题
        filename: "bundle.js"
    },
    devServer: {
        static: './build',  //设置服务器访问的基本目录
        host: 'localhost', //服务器的ip地址
        port: 8080,  //端口
        open: true,  //自动打开页面,
    },
    module: {
        // 公共module...
        rules: [
            {
                test:/\.css$/,
                use: ["style-loader", "css-loader"]
            }
        ]
    },
    optimization: {
        // 公共...
    },
    plugins: [
        // 公共插件...
    ]
}

编辑 webpack.dev.config.js

const path = require("path");
const webpack = require("webpack");
const { merge } = require('webpack-merge');                            // 引入区分环境的工具
const common = require('./webpack.common.config.js');        // 引入公共配置文件

module.exports = merge(common,{                                      // 使用 merge方法
    // 如果有开发环境的配置,就写上
    module: {
        // 开发环境module...
    },
    optimization: {
        // 开发环境...
    },
    plugins: [
        // 开发环境...
    ]
})

编辑 webpack.pro.config.js

const path = require("path");
const webpack = require("webpack");
const { merge } = require('webpack-merge');                            // 引入区分环境的工具
const common = require('./webpack.common.config.js');        // 引入公共配置文件

module.exports = merge(common,{                                      // 使用 merge方法
    // 如果有生产环境的配置,就写上
    module: {
        // 生产环境module...
    },
    optimization: {
        // 生产环境...
    },
    plugins: [
        // 生产环境插件...
    ]
})

3:配置package.json

// 使用 --config 指定配置文件 

"scripts": {

        "dev": "webpack --mode development --config ./config/webpack.dev.config.js",

        "pro": "webpack --mode production --config ./config/webpack.pro.config.js",

        "start": "webpack-dev-server --mode development --config ./config/webpack.dev.config.js"

    }

 4:打包

npm run dev  // npm run pro

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack5教程 的相关文章

随机推荐

  • AcWing 1292. 哥德巴赫猜想 线性筛+二分查找

    题 线性筛代码 const int N 1e6 10 int pri N v N pri2 N int cnt void Getpri 线性筛 mem v 0 cnt 0 for int i 2 i lt 1e6 i if v i 0 没被
  • 苹果cms怎么用html5播放,苹果cms整合ckplayerx播放器教程

    苹果cmsV8整合CKPlayer教程 1 首先找到苹果cmsV8的根目录 打开 player 文件夹 2 新建一个 mp4 js 和 m3u8 js 文件 新建播放器代码内容如下 两个内容一致 MacPlayer Html MacPlay
  • 个人主体的小程序如何利用腾讯地图 webServiceAPI 配合map组件 来做路线规划?

    前言 最近在做一个自己的小程序的工具集 web小白成长之旅 里面的包括一些地图等工具 但是个人主体开发小程序在添加插件里面无论如何都无法添加 腾讯位置服务路线规划 插件 既然找不到这个插件 那么 只能绕过这个插件 去使用其他的 今天我就用腾
  • 竞赛 基于YOLO实现的口罩佩戴检测 - python opemcv 深度学习

    文章目录 0 前言 1 课题介绍 2 算法原理 2 1 算法简介 2 2 网络架构 3 关键代码 4 数据集 4 1 安装 4 2 打开 4 3 选择yolo标注格式 4 4 打标签 4 5 保存 5 训练 6 实现效果 6 1 pyqt实
  • 记录一次 redis连接次数过多问题

    问题 可以看到redis 连接数 1800 左右 执行命令 redis cli info clients 查看redis 连接的客户端 redis cli client list 可以看到 idle 是空闲时间 而这个空间时间大概是每个链接
  • 【c语言】五大内存区域

    创作不易 本篇文章如果帮助到了你 还请点赞支持一下 gt lt 主页专栏有更多知识 如有疑问欢迎大家指正讨论 共同进步 给大家跳段街舞感谢支持 c语言系列专栏 c语言之路重点知识整合 相关知识点 c语言全局变量 局部变量详解 目录 内存区域
  • WebUIAutoTest测试框架学习

    使用Python Selenium 第三方库实现WebUI自动化测试框架 代码 https gitee com azhengzz WebUIAutoTest 安装依赖包 安装了很长时间 调试了一会 运行 直接运行webserver py 编
  • 线程的同步互斥机制(互斥锁)

    一 线程的同步互斥 临界区 访问共享资源的代码段 临界资源 临界区中被读写的共享资源 即同时只能被一个进程访问的资源 线程之间 如果要进行通信 需要引入同步互斥机制 避免产生竞态 保证任何时候都只有一个线程处理临界资源 二 互斥锁 2 1
  • Java中字符串占位替换、字符串拼接、字符串与Collection互转的方式

    场景 字符串占位替换 1 String format 最原始最基础的方式 使用 来表示占位 后面跟上不同的标识符 用于限定这个占位符的参数类型 由jdk原生提供支持 示例 String badao String format hello s
  • 概率论 各种分布及其期望、方差、分布函数

    概率论 各种分布及其期望 方差 分布函数 0 1 分布 二项分布 X b n p 泊松分布 X pi lambda 均匀分布 X U a b 指数分布 正态 高斯分布 X N
  • php绕过分号(;)和尖括号(<>)转义

    实战中发现可写文件且内容可控 尝试写入phpinfo 发现分号 和尖括号 lt gt 被转义 如 尝试写入 实际得到
  • 虚拟机内Ubuntu如何打开摄像头+解决cheese工具黑屏问题

    一 虚拟机如何打开摄像头 1 安装cheese工具 打开Ubuntu摄像头 一般我们安装好Ubuntu之后 可能需要用到摄像头 那么这时候我们可以执行如下命令 1 打开shell终端 输入命令安装cheese工具 cheese工具就可以打开
  • Unable to negotiate with xxx.xxx.xxx.xxx port xxxxx: no matching key exchange method found

    Unable to negotiate with xxx xxx xxx xxx port xxxxx no matching key exchange method found OpenSSH Legacy Options https w
  • 为知笔记私有化部署

    前言 原来一直买的为知笔记vip 但是随着内容越来越 并且不好整理 同时还不能一键全部导出 最后决定将数据迁移到自己服务器上 为止笔记提供了docker镜像 这也方便了部署 其实吧 从产品层面 可以考虑提供一键导出 这样我可能还会买vip
  • chapter 4 能带理论 energy band

    继承自chapter 3 的自由电子模型 4 1 单电子近似 One electron approximation 列出电子运动的薛定谔方程 E 2
  • Vue3+Vite+Vant报错Uncaught SyntaxError: The requested module ‘/node_modules/.vite/vue.js?v=xxxx

    在使用 Vue3 Vite Vant 搭建移动端项目时报错 Uncaught SyntaxError The requested module node modules vite vue js v xxxx 原因 在开发过程中Vue3的依赖
  • MySQL进阶 -- 存储过程 和 触发器

    目录 存储过程 介绍 存储过程的基本语法 变量 系统变量 用户自定义变量 局部变量 if判断 参数 存储过程 介绍 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合 可以直接调用这些集合 存储过程 调用存储过程可以简化应用开发人
  • 夯实C++基础之刷题:链表——7 链表求和 两数相加

    久违的我的碎碎念 现在看能一边996上班一边坚持学习的真都是了不起的人 新项目开始每天忙的晕头转向 加班回来累得只想躺平 所以快两个月了总共才写了7题 没有空余时间可以学自己的东西真是一件不太让人开心的事情 但就安慰自己 毕竟刚刚毕业开始工
  • GitChat·前端

    GitChat 作者 韩亦乐 前言 我们都知道 大学几乎是没有 Web 前端课的 以我所在的大学为例 唯一引导我们了解 JavaScript 的也只是 人机界面 和 Web应用开发 选修课 再者 由于这些选修课的课时短 面向的主要群体是大部
  • webpack5教程

    目录 简介 创建webpack项目 webpack核心配置文件config的使用 webpack打包多入口 多出口 如何配置webpack dev server 1 了解webpack dev server 2 安装webpack dev