当前位置: 首页 > news >正文

Webpack简介及打包演示

  1. Webpack 是一个静态模块打包工具,从入口构建依赖图,打包有关的模块,最后用于展示你的内容
    在这里插入图片描述

  2. 静态模块:编写代码过程中的,html,css, js,图片等固定内容的文件

  3. 打包过程,注意:只有和入口有直接/间接引入关系的模块,才会被打包

在这里插入图片描述

  1. Webpack 的作用:把静态模块内容,压缩,整合,转译等(前端工程化)

    • 把 less/sass 转成 css 代码
    • 把 ES6+ 降级成 ES5 等
    • 支持多种模块文件类型,多种模块标准语法
  2. 为何不学 vite?

    现在很多项目还是基于 Webpack 来进行构建的,所以还是要掌握 Webpack 的使用

  3. 体验 Webpack 打包 2 个 JS 文件内容

  4. 需求:封装 utils 包,校验手机号和验证码长度,在 src/index.js 中使用,使用 Webpack 打包

  5. 步骤:

    1. 新建项目文件夹 Webpack_study,初始化包环境,得到 package.json 文件

      npm init -y
      
    2. 新建 src 源代码文件夹(书写代码)包括 utils/check.js 封装用户名和密码长度函数,引入到 src/index.js 进行使用

      • src/utils/check.js

        // 封装校验手机号长度和校验验证码长度的函数
        export const checkPhone = phone => phone.length === 11
        export const checkCode = code => code.length === 6
        
      • src/index.js

        /*** 目标1:体验 webpack 打包过程*/
        // 1.1 准备项目和源代码
        import { checkPhone, checkCode } from '../utils/check.js'
        console.log(checkPhone('13900002020'))
        console.log(checkCode('123123123123'))
        // 1.2 准备 webpack 打包的环境
        // 1.3 运行自定义命令打包观察效果(npm run 自定义命令)
        
    3. 下载 webpack webpack-cli 到项目(版本独立)

      npm i webpack webpack-cli --save-dev
      

      注意:虽然 webpack 是全局软件包,封装的是命令工具,但是为了保证项目之间版本分别独立,所以这次比较特殊,下载到某个项目环境下,但是需要把 webpack 命令配置到 package.json 的 scripts 自定义命令,作为局部命令使用

    在这里插入图片描述

    1. 项目中运行工具命令,采用自定义命令的方式(局部命令)

      npm run build
      

      npm run 自定义命令名字

      注意:实际上在终端运行的是 build 右侧的具体命名

    2. 自动产生 dist 分发文件夹(压缩和优化后,用于最终运行的代码)

  6. 需求最终流程图:
    在这里插入图片描述
    执行完打包流程后,会在项目下生产dist/main.js

(()=>{"use strict";console.log(!0),console.log(!1)})();

这是编译完的结果,从index.js开始执行编译,调用对应的check方法,check方法所产生的结果已经展示在编译后的文件中,所以这两个check方法就不会再整合到dist文件中了。

Webpack 修改入口和出口

  1. 使用Webpack默认的打包入口路径是从./src/index.js开始的,打包后的文件默认输出位置为:./dist/main.js

  2. Webpack 配置:影响 Webpack 打包过程

  3. 步骤:

    1. 项目根目录,新建 Webpack.config.js 配置文件

    2. 导出配置对象,配置入口,出口文件路径(别忘了修改磁盘文件夹和文件的名字)

      const path = require('path')module.exports = {entry: path.resolve(__dirname, 'src/login/index.js'),output: {path: path.resolve(__dirname, 'dist'),filename: './login/index.js'  }
      }
      
    3. 重新打包就能发现效果

案例-用户登录-长度判断

目标

体验前端项目代码,如何被 Webpack 打包和使用

讲解

  1. 需求:点击登录按钮,判断手机号和验证码长度是否符合要求

  2. 步骤:

    1. 新建 public/login.html 准备网页模板(方便查找标签和后期自动生成 html 文件做准备)

      在这里插入图片描述

    2. 核心 JS 代码写在 src/login/index.js 文件

      /*** 目标3:用户登录-长度判断案例*  3.1 准备用户登录页面*  3.2 编写核心 JS 逻辑代码*  3.3 打包并手动复制网页到 dist 下,引入打包后的 js,运行*/
      // 3.2 编写核心 JS 逻辑代码
      document.querySelector('.btn').addEventListener('click', () => {const phone = document.querySelector('.login-form [name=mobile]').valueconst code = document.querySelector('.login-form [name=code]').valueif (!checkPhone(phone)) {console.log('手机号长度必须是11位')return}if (!checkCode(code)) {console.log('验证码长度必须是6位')return}console.log('提交到服务器登录...')
      })
      
    3. 运行自定义命令,让 Webpack 打包 JS 代码

    4. 手动复制 public/login.html 到 dist 下,手动引入打包后的 JS 代码文件,运行 dist/login.html 在浏览器查看效果

小结

由于Webpack默认只会打包js资源,html并不会打包进入,生成的打包js会放在dist中,html要想调用打包后的js也需要放到dist文件夹中,并且通过<script>引入js。

Webpack 自动生成 html 文件

  1. 让 Webpack 拥有自动生成 html 文件能力,并引入打包后的其他资源

  2. 插件 html-webpack-plugin 作用:在 Webpack 打包时生成 html 文件,并引入其他打包后的资源

  3. 步骤:

    1. 下载 html-webpack-plugin 本地软件包到项目中

      npm i html-webpack-plugin --save-dev
      
    2. 配置 webpack.config.js 让 Webpack 拥有插件功能

      // ...
      const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {// ...plugins: [new HtmlWebpackPlugin({template: './public/login.html', // 模板文件filename: './login/index.html' // 输出文件,在dist中})]
      }
      
    3. 指定以 public/login.html 为模板复制到 dist/login/index.html,并自动引入其他打包后资源,所以在dist中自动生成的html文件中对js等资源的引用并不需要去修改。

  4. 运行打包命令,观察打包后 dist 文件夹下内容并运行查看效果

相关文章:

Webpack简介及打包演示

Webpack 是一个静态模块打包工具&#xff0c;从入口构建依赖图&#xff0c;打包有关的模块&#xff0c;最后用于展示你的内容 静态模块&#xff1a;编写代码过程中的&#xff0c;html&#xff0c;css&#xff0c; js&#xff0c;图片等固定内容的文件 打包过程&#xff0c;注…...

面向对象设计模式——命令模式

命令设计模式(Command Pattern)是一种行为型设计模式,它的主要目的是将请求或操作封装成一个对象,从而允许参数化客户端对象,队列请求,将请求记录到日志,以及支持可撤销的操作。命令模式将请求的发出者(调用者)与请求的接收者(执行者)解耦,这使得系统更加灵活、可扩…...

selenium测试框架快速搭建(ui自动化测试)

一、介绍 selenium目前主流的web自动化测试框架&#xff1b;支持多种编程语言Java、pythan、go、js等&#xff1b;selenium 提供一系列的api 供我们使用&#xff0c;因此在web测试时我们要点页面中的某一个按钮&#xff0c;那么我们只需要获取页面&#xff0c;然后根据id或者n…...

TypeScript中的类型映射

类型映射 1. 简介 映射就是将一种类型按照映射规则&#xff0c;转成另一种类型&#xff0c;通常用于对象类型。 这里类型B通过A采用属性名索引的写法&#xff0c;完成了类型B的定义 type A {foo: number;bar: number; };type B {[prop in keyof A]: string; };这里复制了一…...

系统平台同一网络下不同设备及进程数据通讯--DDS数据分发服务中间件

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言(1)中间件的介绍(2)DDS介绍(3)发布者(4)订阅者(5)idl文件(定义msg结构体)(6)QoS(Quality of Service)策略(7)DDS测试工具介绍(…...

golang小技巧

1/有时需要把json内容返回给前段进行文本编辑json字段&#xff0c;那么最好是能返回格式化后的json&#xff0c;这样对于用户编辑页方便。这时候可以利用json.MarshalIndent(data, "", "\t")来进行格式化&#xff0c;带有缩进的marshal。 2/对holders的填…...

JavaWeb——IDEA操作:Project最终新建module

在project中创建新的module&#xff1a; 创建一个新的module很容易&#xff0c;但是它可能连接不上Tomcat&#xff0c;因此需要修改一些配置&#xff1a; 将以下地址修改为新module的地址...

前端开发技术栈(工具篇):2023深入了解webpack的安装和使用以及核心概念和启动流程(详细) 63.3k stars

目录 Webpack简介 Entry Module Chunk Loader Plugin Output Webpack的启动流程 Webpack的优缺点 Webpack的使用 1. 安装Webpack 2. 创建Webpack配置文件 3. 编写代码 4. 运行Webpack 5. 在HTML中引入打包后的文件 6. 执行编译命令 Webpack其他功能介绍 1. 使…...

[SQL开发笔记]LIKE操作符:在 WHERE 子句中搜索列中的指定模式

一、功能描述&#xff1a; LIKE操作符&#xff1a;用于在 WHERE 子句中搜索列中的指定模式。 二、LIKE操作符语法详解&#xff1a; LIKE 语法 SELECT column1, column2,…FROM table_nameWHERE column LIKE pattern; 参数说明&#xff1a; &#xff08;1&#xff09;colum…...

flutter深研

https://www.douyin.com/video/7020336319058627853 关闭系统风扇 在 Windows 操作系统上安装和配置 Flutter 开发环境 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter...

TypeScript中的declare关键字

declare关键字 1. 简介 declare关键字用来告诉编译器&#xff0c;某个类型是存在的&#xff0c;可以在当前文件中使用。 作用&#xff1a;就是让当前文件可以使用其他文件声明的类型。比如&#xff0c;自己的脚本使用外部库定义的函数&#xff0c;编译器会因为不知道外部函数…...

玫瑰红葡萄酒的基本知识

在过去的几年里&#xff0c;玫瑰红葡萄酒越来越受欢迎&#xff0c;但是如果你是饮用玫瑰红葡萄酒的新手&#xff0c;你可能想知道它是如何从其他红葡萄酒或白葡萄酒中脱颖而出的。 玫瑰红具有标志性的粉色&#xff0c;很难归类&#xff0c;那它是更适合放在红酒类还是属于白酒…...

HTTP 协议参考文档

开发者Web协议文档&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web 其中子节点包含 HTTP 协议内容&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web/HTTP 其内容是基于 markdown 编写的&#xff0c;对应源文件在 Github 中&#xff0c;如下&#xf…...

Python遍历删除列表元素的一个奇怪bug

假定有一个Python列表&#xff0c;比如[CFFEX.IF, CFFEX.TS,SHFE.FU]&#xff0c;现在需要将其中带‘CFFEX’前缀的所有元素都删除。在使用列表推导式一行代码搞定之前&#xff0c;用了一种最朴素的遍历删除方法&#xff0c;结果出现了意想不到的的问题。复盘了下&#xff0c;结…...

Elasticsearch部署中的两大常见问题及其解决方案

随着大数据和实时搜索的日益普及&#xff0c;Elasticsearch已经成为现代应用中不可或缺的工具。但是&#xff0c;像所有软件一样&#xff0c;部署和配置Elasticsearch可能会遇到一些问题。本文将探讨两个我最近遇到的常见问题及其解决方案。 问题描述 1. 主机名解析问题 在启…...

【计网 CDN】计算机网络 CDN(Content Delivery Network)分布式网络架构详解:中科大郑烇老师笔记 (八)

目录 0 引言1 为什么需要分布式的网络架构&#xff1f;2 视频流化服务2.1 多媒体&#xff1a;视频2.2 存储视频的流化&#xff08;Streaming&#xff09;服务2.3 流媒体传输协议&#xff1a;DASH2.4 面临挑战&#xff1a;服务器如何向上百万用户同时提供视频流化内容&#xff1…...

C# 图解教程 第5版 —— 第9章 表达式和运算符

文章目录 9.1 表达式&#xff08;*&#xff09;9.2 字面量9.2.1 整数字面量9.2.2 实数字面量9.2.3 字符字面量9.2.4 字符串字面量 9.3 求值顺序9.3.1 优先级9.3.2 结合性 9.4 简单算术运算符9.5 求余运算符9.6 关系比较运算符和相等比较运算符9.7 递增运算符和递减运算符&#…...

TIA博途_Profinet通信故障诊断及常见错误解决方法汇总

TIA博途_Profinet通信故障诊断及常见错误解决方法汇总 1. 在线诊断报硬件组件的用户数据错误,设备组态不支持 解决方法: (1)检查模块终端盖板; (2)检查组态模块与实际组装模块顺序型号是否一致。 2. 网络视图,设备视图界面显示黑色感叹号 解决方法: PLC转离线,下载硬…...

Windows server部署filebeat到kafka

需求&#xff1a;Windows dhcp日志需要实时传输到elk或者其他告警平台。 1、filebeat下载地址&#xff1a;https://www.elastic.co/cn/downloads/beats/filebeat 2、下载后解压后配置filebeat.yml文件&#xff0c; 3、README.md文件中有运行的操作方法&#xff1a;cmd上进入f…...

Interview of ING internship for master thesis: LLM

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. Background2. Interview2.1 Intro2.2 project experience2.3 问题2.4 Q&A 总结 Interview of ING internship for master thesis: LLM 1. Background Proje…...

华为校招第三题 找最小数

给你一个以字符串表示的非负整数 num 和一个整数 k &#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 &#xff1a; 输入&#xff1a;num "1432219", k 3 输出&#xff1a;"1219" 解…...

大数据Flink(一百零三):SQL 表值聚合函数(Table Aggregate Function)

文章目录 SQL 表值聚合函数(Table Aggregate Function) SQL 表值聚合函数(Table Aggregate Function) Python UDTAF,即 Python TableAggregateFunction。Python UDTAF 用来针对一组数据进行聚合运算,比如同一个 window 下的多条数据、或者同一个 key 下的多条数据等,与…...

php+JavaScript实现callback跨域请求jsonp数据

摘要 JSONP 是 JSON with Padding 的缩写&#xff0c;是一种解决跨域数据获取的方案。由于浏览器的同源策略限制&#xff0c;不同域名之间的前端JS代码不能相互访问到对方的数据&#xff0c;JSONP通过script标签的特性&#xff0c;实现在不同域名的网页间传递数据。 其原理是…...

荣电集团与钕希科技签署全面战略合作

10月26日&#xff0c;荣电集团&#xff08;以下简称荣电&#xff09;与钕希科技南京有限公司&#xff08;以下简称钕希科技&#xff09;今天在合肥市签署全面战略合作协议&#xff0c;联合进军混合现实&#xff08;Mixed Reality&#xff0c;以下简称MR&#xff09;空间计算高科…...

C语言_文件_进程_进程间通讯 常用函数/命令 + 实例

文件相关命令&#xff1a; ps -aux|grep init? //搜索包含init名称的进程 top //linux下的资源管理器&#xff08;动态&#xff09;//open 返回的int 是给后面的读/写/光标移动 用的fd&#xff0c;没有open就不能进行后面的操作&#xff1b; int op…...

力扣第406题 根据身高重建队列 c++ 贪心思维

题目 406. 根据身高重建队列 中等 相关标签 贪心 树状数组 线段树 数组 排序 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &am…...

postgresSQL 数据库本地创建表空间读取本地备份SQL文件

使用pgAdmin4&#xff0c;你安装PG得文件夹****/16/paAdmin 4 /runtime/pgAdmin4.exe 第一步&#xff1a;找到Tablespaces 第二步&#xff1a;创建表空间名称 第三步&#xff1a;指向数据文件 第四步&#xff1a;找到Databases&#xff0c;创建表空间 第五步&#xff1a;输入数…...

贝锐花生壳内网穿透推出全新功能,远程业务连接更安全

贝锐旗下内网穿透兼动态域名解析品牌花生壳目前推出了全新的“访问控制”功能&#xff0c;可精确设置访问权限&#xff0c;充分保障信息安全&#xff0c;满足更多用户安全远程访问内网服务的需求。 通过这一功能&#xff0c;可实现指定时间、IP、地区等条件下才能远程访问映射的…...

NIO和BIO编程

一、网络通信编程基本常识 1、什么是Socket&#xff1f; Socket是应用层与TCP/IP协议族通信的中间软件抽象层&#xff0c;它是一组接口&#xff0c;一般由操作系统提供。 2、短连接 短连接是指socket建立连接之后传输数据确定接收完后关闭连接 3、长连接 长连接是指建立so…...

嵌入式系统设计师考试笔记之操作系统基础复习笔记二

目录 3、任务管理 &#xff08;1&#xff09;嵌入式操作系统的任务管理可以分为 &#xff08;2&#xff09;进程 &#xff08;3&#xff09;线程 &#xff08;4&#xff09;任务 &#xff08;5&#xff09;任务的创建与中止 &#xff08;6&#xff09;任务的状态任务有三…...