webpack安装与基础

news2024/11/27 22:37:17

概念

  • webpack是一个前端打包工具
  • 用它来处理现代前端错综复杂的依赖关系(A插件需要B插件B插件有D插件 F插件需要A插件)生成浏览器可以识别静态资源
  • Vue 前期脚手架就是用webpack制作(Vue 开始推荐vite构建工具(更快))
  • react脚手架、angular等现代框架脚手架都是依赖webpack

安装webpack

在这里插入图片描述在这里插入图片描述

基础使用

在这里插入图片描述在这里插入图片描述

在项目中配置webpack

  • 在项目根录中,创建名为webpack.config.js 的webpack配置文件,并初始化如下的基本配置
module.exports = {
    entry: './src/index.js', //入口
    output: {  //出口
        filename: "main.js",   //文件名
        path: __dirname + '/dist', //文件夹 dirname当前归录
    },
    mode: "production", // // 模式 development开发模式 production 产品模式
  • 在package.json的script节点下,新增serve脚本如下:
"scripts": {
    "serve": "webpack",
  },
  • mode 节点 的可选值有两个,分别是:
    ① development
    • 开发环境
    • 不会对打包生成的文件进行代码压缩和性能优化
    • 打包 速度快 ,适合在 开发阶段使用
      ② production
    • 生产环境
    • 会对打包生成的文件进行代码压缩和性能优化
    • 打包 速度很慢 ,仅适合在项目 发布阶段 发布阶段 使用

- webpack中的默认约定

默认的打包入口文件src ->index.js
默认的输出文件路径dist->main.js

注意:可以在 webpack.config.js 中修改打包的默认约定

自定义打包的入口和出口

在 webpack.config.js配置文件中,通过entry节点指定打包的入口 。通过output 节点指定打包的出口

module.exports = {
    entry: './src/index.js', //入口
    output: {  //出口
        filename: "main.js",   //文件名
        path: __dirname + '/dist', //文件夹 dirname当前归录

    },

webpack的插件

  • html-webpack-plugin
    ① webpack中的 HTML 插件(类似于一个模板引擎)
    ② 可以通过此插件自定制 index.html页面的内容
    ③ webpack-dev-server 可以让 webpack 监听项目源代码的变化 ,从而进行自动打包构建 。
//导入htmL-webpack-plugin插件处理htmL目标
//提前安装 npm i htmL-webpack-plugin -D
const HtmlWebpackPlugin = require("html-webpack-plugin")
module.exports = {
    entry: './src/index.js', //入口
    output: {  //出口
        filename: "main.js",   //文件名
        path: __dirname + '/dist', //文件夹 dirname当前归录

    },
    mode: "production", // // 模式 development开发模式 production 产品模式
    plugins: [
        //实例化插件,指定tempLate模板的位置
        new HtmlWebpackPlugin({
            template: './public/index.html'
        }),
    ],
}

  • 安装 webpack-dev-server
    配置 webpack-dev-server
    ① 修改 package.json -> scripts 中的 serve 命令如下:
 "scripts": {
    "build": "webpack",
    "serve": "webpack serve",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
//需要提前安装npm i webpack-dev-server -D
    devServer: {
        port: 8080,
        hot: true,//更新
        host: "localhost",//域名
        open: true,//默认自动打开浏览器
        proxy: {} //vue.config.js代理一致
    }

webpack 中的 loader

  • 在实际开发过程中,webpack 默认只能打包处理以 .js 后缀名结尾的模块。其他非 .js 后缀名结尾的模块,webpack 默认处理不了,需要调用 loader 加载器才可以正常打包,否则会报错!
  • loader 加载器的作用:协助 webpack 打包处理特定的文件模块。比如:
    • css-loader 可以打包处理 .css 相关的文件
    • less-loader 可以打包处理 .less 相关的文件
    • babel-loader 可以打包处理 webpack 无法处理的高级 JS 语法

打包处理 css 文件

① 运行 npm i style-loader css-loader -D 命令,安装处理 css 文件的 loader
② 在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:

//使用loader
//npm i css-loader style-loader -D
// css-loader处理css文件,style-loader把加载好的css放入style标签
module.exports = {
    entry: './src/index.js', //入口
    output: {  //出口
        filename: "main.js",   //文件名
        path: __dirname + '/dist', //文件夹 dirname当前归录

    },
    mode: "production", // // 模式 development开发模式 production 产品模式
    plugins: [
        //实例化插件,指定tempLate模板的位置
        new HtmlWebpackPlugin({
            template: './public/index.html'
        }),
    ],
    module: {
        rules: [
            //当文件名test通过,使用如下插件
            { test: /\.css$/, use: ["style-loader", "css-loader"] },
        ]
    },
    }
  • 其中,test 表示匹配的文件类型, use 表示对应要调用的 loader
    注意:
    use 数组中指定的 loader 顺序是固定的
    多个 loader 的调用顺序是:从后往前调用

打包处理样式表中与 url 路径(图片)相关的文件

① 运行 npm i url-loader file-loader -D 命令
② 在 webpack.config.js 的 module -> rules 数组中,添加 loader 规则如下:

const HtmlWebpackPlugin = require("html-webpack-plugin")
//自定拷贝到dist目录,插入打包好的js文件
module.exports = {
    entry: './src/index.js', //入口
    output: {  //出口
        filename: "main.js",   //文件名
        path: __dirname + '/dist', //文件夹 dirname当前归录

    },
    mode: "production", // // 模式 development开发模式 production 产品模式
    plugins: [
        //实例化插件,指定tempLate模板的位置
        new HtmlWebpackPlugin({
            template: './public/index.html'
        }),
    ],
    module: {
        rules: [
            // 需要提前安装url-loader file-loader
            {test:/\.(png|jpg|jpeg|webp|ico|gif|bmp)$/,
            use:[{
                loader:"url-loader",  //使用url加载器
                options:{limit:5000,name:'images/[hash].[ext]'},
                //选项,当图片小于5000字节时候,转换base64(小图片减少一次http请求)
                //文件命名images文件夹,hash值(计算出图片的名称)ext后缀名
            }]    
        },

        ]
    },
}

注意:
limit 用来指定图片的大小,单位是字节(byte)
只有 ≤ limit 大小的图片,才会被转为 base64 格式的图片

自动清理 dist 目录下的旧文件

为了在每次打包发布时自动清理掉 dist 目录中的旧文件,可以安装并配置 clean-webpack-plugin 插件:
现在项目终端中运行如下命令

npm i clean-webpack-plugin -D

  • 配置clean-webpack-plugi
//导入htmL-webpack-plugin插件处理htmL目标
//提前安装 npm i htmL-webpack-plugin -D
//npm i clean-webpack-plugin -D
//作用:清零dist目录(执行npm run build需要清理上一次的生成的内容)
const {CleanWebpackPlugin} = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require("html-webpack-plugin")
//自定拷贝到dist目录,插入打包好的js文件

//使用loader
//npm i css-loader style-loader -D
// css-loader处理css文件,style-loader把加载好的css放入style标签
module.exports = {
    entry: './src/index.js', //入口
    output: {  //出口
        filename: "main.js",   //文件名
        path: __dirname + '/dist', //文件夹 dirname当前归录

    },
    mode: "production", // // 模式 development开发模式 production 产品模式
    plugins: [
        //实例化插件,指定tempLate模板的位置
        new HtmlWebpackPlugin({
            template: './public/index.html'
        }),
        //实例化清理
        new CleanWebpackPlugin()
    ],
    module: {
        rules: [
            //当文件名test通过,使用如下插件
            { test: /\.css$/, use: ["style-loader", "css-loader"] },
            // 需要提前安装url-loader file-loader
            {test:/\.(png|jpg|jpeg|webp|ico|gif|bmp)$/,
            use:[{
                loader:"url-loader",  //使用url加载器
                options:{limit:5000,name:'images/[hash].[ext]'},
                //选项,当图片小于5000字节时候,转换base64(小图片减少一次http请求)
                //文件命名images文件夹,hash值(计算出图片的名称)ext后缀名
            }]    
        },
        ]
    },
    //需要提前安装npm i webpack-dev-server -D
    devServer: {
        port: 8080,
        hot: true,//更新
        host: "localhost",//域名
        open: true,//默认自动打开浏览器
        proxy: {} //vue.config.js代理一致
    }
}
// module 模块 exports 导出 entry output 输出  filename 文件名 path 路径  dirname 当前目录  dist 目标
// module 模式 deveLopment 开发模式 production 产品
//dev开发Server服务器prot端口号hot热更新 host域名 open打开 proxy代理

配置 webpack 的打包发布

  • 在 package.json 文件的 scripts 节点下,新增 build 命令如下:
  "scripts": {
    "build": "webpack",
    "serve": "webpack serve",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[UE][UE5]Gameplay框架,Actor,pawn,playerController(玩家控制器),Character(角色)之间的关系

[UE][UE5]Gameplay框架,actor,pawn,playerController,Character之间的关系Actor,pawn,playerController(玩家控制器),Character(角色)之间的关系Actor:pawn:character:控制器(Controller):playerController…

sqlServer如何实现分页查询

sqlServer的分页查询和mysql语句不一样,有三种实现方式。分别是:offset /fetch next、利用max(主键)、利用row_number关键字 一、offset /fetch next关键字 2012版本及以上才有,SQL server公司升级后推出的新方法。 …

Shiro前后端分离流程

1.自定义filter 拦截所有携带token的请求, 调用自定义realm,判断token是否正确,不正确realm抛出异常,在filter中被捕获,重定向至token不正确界面 重写了三个方法: 1》isAccessAllowed:如果带…

有一个项目管理软件,名字叫8Manage PM!

优秀的软件工具在项目管理中起到极为重要的作用。8Manage PM项目管理软件由高亚科技自主研发,为项目工作提供项目功能、业务功能、服务功能和工具,有力推动项目成功。 8Manage软件项目功能包括完整性管理、需求管理、计划和执行、资源管理、工作量&…

锐捷BGP基础配置

目录 ​编辑 配置IBGP邻居 配置EBGP邻居 BGP其它配置 配置IBGP邻居 R2、R3、R4底层IGP互通,此处IGP互通配置不做介绍 R2与R4通过Loop0建立IBGP邻居,R3与R4通过Loop0建立IBGP邻居 R4充当反射器,R2和R3作为客户端(通过反射可以将…

Vue中设置背景图片和透明度

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞👍👍👍收藏⭐⭐⭐】一键三连!一起努力! 今天来为我自己的项目设置一个好看的登录页面之前是这样的: 乍一看感觉还行,越看越难受,弄一…

Nodejs http模块常用方法

视频链接:黑马程序员Node.js全套入门教程 文章目录http模块1 什么是http模块2 进一步理解http的作用3 服务器相关的概念3.1 IP地址3.2 域名和域名服务器3.3 端口号4 创建简单的web服务器1 步骤2 代码实现3 req请求对象4 res响应对象5 解决中文乱码问题5 简单路由效果…

《Java并发编程之美》读书笔记——ThreadLocalRandom类原理剖析

文章目录1.Random类的局限性2.ThreadLocalRandom3.源码分析Unsafe机制current()方法int nextInt(int bound)方法1.Random类的局限性 在JDK之前包括现在,java.util.Random都是使用比较广泛的随机数生成工具类。 下面我们先来看一下Random的使用方法。 // 创建一个…

kubelet源码 删除pod(一)

k8s版本为1.25.3版本 kubectl delete pod name当删除一个pod的时候会经历一下流程 kubectl会发pod消息给api server。apiserver将信息存入etcd,然后返回确认信息。apiserver开始反馈etcd中pod对象的变化,其他组件使用watch机制跟踪apiserver上的变动。…

行业生态重塑中,新氧如何逆风翻盘

美东时间11月18日盘前,中国互联网医美第一股新氧科技发布2022财年第三季度的业绩报告,业绩符合其业绩指引。 据新氧该季度财报显示,第三季度实现非美国通用会计准则归属于新氧科技的净利润990万元人民币(140万美元)。…

表格分组标签:表格行分组中的隐藏功能

在程序员的认知中,表格中存在行分组标签,也就是thead,tbody,tfoot三个行分组标签。也许你会认为我在这里还是为大家继续讲解thead,tbody,tfoot三个标签,那就大错特错了 今天除了要讲解他的基础作…

栈和队列

声明:本文主要作为作者的复习笔记,由于作者水平有限,难免有错误和不准确之处,欢迎读者批评指正。 目录快捷跳转线性表接口两个常用子类什么时候选择ArrayList,什么时候选择LinkedList?栈和队列的关系栈栈的实现根据使…

ASP.NET Core教程-Exception(异常和错误处理)

更新记录 转载请注明出处: 2022年11月22日 发布。 2022年11月20日 从笔记迁移到博客。 错误处理基础 错误处理说明 ASP.NET Core中的错误处理分为: ​ 局部Controller中处理错误 ​ 在Controller中定义错误代码和转到错误界面即可 ​ 全局应用中设置错误…

vue.js毕业设计,基于vue.js前后端分离教室预约系统设计与实现(H5移动项目)

功能模块 【后台管理功能模块】 系统设置:设置关于我们、联系我们、加入我们、法律声明 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息&#xff0c…

[附源码]计算机毕业设计JAVA家政管理系统

[附源码]计算机毕业设计JAVA家政管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)

仍有问题可点赞关注收藏后在评论区留言~~~ 一、Node.js与npm的下载 在使用Vue CLI(Vue脚手架)搭建前端系统的时候,因为需要用到npm安装Vue CLI,而npm是集成在Node.js中的,所以需要首先安装Node.js Node.js官网 下载过程很简单,…

数据库错误知识集2

Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。 union与union all的区别(摘): ①对重复结果的处理:union会去掉重复记录,union all不会;…

转铁蛋白偶联糖(单糖/多糖),(Transferrin)TF-PEG-Dextran葡聚糖/Lysozyme溶菌酶

产品名称:转铁蛋白-聚乙二醇-葡聚糖 英文名称:TF-PEG-Dextran 纯度:95% 存储条件:-20C,避光,避湿 外观:固体或粘性液体,取决于分子量 PEG分子量可选:350、550、750、1k、2k、34k、5k…

校招补一个什么样的项目比较好?

校招一年比一年卷,千军万马过独木桥的情况下该怎样充实自己的项目经历?有两件事要搞明白! 一、什么是【好】项目? 好项目在简历上要能一眼看出亮点和提问点。并且要能够把提问点对应的回答准备到位,这样才能在招聘量…

外汇天眼周回顾:Equiti开设最新办事处,Vantage推出Vantage Connect服务

在过去的一周内,国外外汇市场都发生了哪些引人注意的外汇新闻?天眼君带大家一起看看,具体新闻如下: 1、Equiti在塞浦路斯利马索尔开设最新办事处 据悉,多资产经纪商Equiti Group在宣布其在塞浦路斯的新业务获得CySEC …