webpack一篇
目录
一、构建工具
1.1简介
二、Webpack
2.1概念
2.2使用步骤
2.3配置文件(webpack.config.js)
mode
entry
output
loader
plugin
devtool
2.4开发服务器(webpack-dev-server)
grunt/glup的对比
三、Vite
3.1概念
3.2基本使用
一、构建工具
1.1简介
- 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。
- 我们就迫切的希望有一款工具可以对代码进行打包,将多个模块打包成一个文件。这样一来即解决了兼容性问题,又解决了模块过多的问题。
- 构建工具就起到这样一个作用,通过构建工具可以将使用ESM规范编写的代码转换为旧的JS语法,这样可以使得所有的浏览器都可以支持代码。
二、Webpack
2.1概念
本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。【按需打包】
webpack在node中运行
2.2使用步骤
- 初始化项目
yarn init -y - 安装依赖
webpack、webpack-cli - 在项目中创建
src目录,然后编写代码(默认主文件index.js) - 执行
yarn webpack来对代码进行打包(打包后观察dist目录)
cli: command line interface 命令行工具安装依赖
yarn add -D webpack webpack-cli, -d表示设置为开发依赖src 目录下的是遵循前端开发规范的,src 以外的要用node规范CommonJS
2.3配置文件(webpack.config.js)
const path = require("path")
module.exports = {mode: "production", entry: "./src/index.js",output: {}, module: {rules: [{test: /\.css$/i,use: ["style-loader", "css-loader"]}]}
}
书写对象的时候,可以在最后一个属性值后面加上
,并且属性名可以不为字符串但在写JSON的时候,属性名也需要加上
“”并且最后不能加上,
mode
告知 webpack 使用相应模式的内置优化
- none:不使用任何默认优化选项
- production:生产模式
- development:开发模式
entry
默认值是 ./src/index.js(一般不改,约定优于配置)
- 单个入口语法【最常见】
entry: string | [string] - 多个传数组
entry: ['./src/file_1.js', './src/file_2.js'] - 对象写法分别命名打包
entry: {app: './src/app.js',adminApp: './src/adminApp.js',},
output
默认值是 ./dist/main.js,其他生成文件默认放置在 ./dist 文件夹中
-
filename: "bundle.js"设置打包后的文件名多个入口 entry 的情况
filename: [name]-[id]-[hash].js使用 占位符(substitutions) 来确保每个文件具有唯一的名称(很少用)
-
clean: true自动清理打包目录(path指定的目录),只保留当前这次打包的文件 -
path: ""指定打包目录,必须要绝对路径一般会使用Node.js中的path模块来操作文件路径
const path = require('path'); //引入path模块 path.resolve(__dirname, "dist") //表示当前目录下的dist文件夹
loader
loader 让 webpack 能够去处理其他类型的文件(默认只能处理js文件),并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。
使用步骤:
-
安装对应的 loader:
yarn add css-loader style-loader ts-loader -D -
配置方式(推荐):
- test 属性:识别出哪些文件需要被转换(使用正则表达式
/\.css$/i) - use 属性:定义出在进行转换时,使用哪个 loader(字符串、数组、对象)
- type 属性:加载图像资源,设置为
"asset/resource" - exclude 属性:不需要转换的文件夹(正则表达式)
module.exports = {module: { // 易漏点rules: [ { test: /\.css$/, use: ['style-loader','css-loader'] },{ test: /\.ts$/, use: 'ts-loader' },{ test:/\.(jpg|png|gif)$/i,type:"asset/resource" },],}, };css-loader 只负责打包,style-loader 负责渲染生效【单一职责原则】
loader 执行顺序为从后向前执行,因此 use 的数组顺序不能调换
- test 属性:识别出哪些文件需要被转换(使用正则表达式
-
*内联方式:在每个
import语句中显式指定 loader。使用
!将资源中的 loader 分开。每个部分都会相对于当前目录解析。import Styles from 'style-loader!css-loader?modules!./styles.css';- 使用
!前缀,将禁用所有已配置的 normal loader(普通 loader) - 使用
!!前缀,将禁用所有已配置的 loader(preLoader, loader, postLoader) - 使用
-!前缀,将禁用所有已配置的 preLoader 和 loader,但是不禁用 postLoaders
选项可以传递查询参数,例如
?key=value&foo=bar,或者一个 JSON 对象,例如?{"key":"value","foo":"bar"}。尽可能使用
module.rules,因为这样可以减少源码中样板文件的代码量,并且可以在出错时,更快地调试和定位 loader 中的问题。 - 使用
babel
概念
-
在编写js代码时,经常需要使用一些js中的新特性,而新特性在旧的浏览器中兼容性并不好。此时就导致我们无法使用一些新的特性。
-
但是我们现在希望能够使用新的特性,我们可以采用折中的方案。依然使用新特性编写代码,但是代码编写完成时我们可以通过一些工具将新代码转换为旧代码。
-
babel就是这样一个工具,可以将新的js语法转换为旧的js,以提高代码的兼容性。
-
如果希望在webpack支持babel,则需要向webpack中引入babel的loader
是 loader 中的一种
使用步骤
-
安装
npm install -D babel-loader @babel/core @babel/preset-env- babel-loader:连接webpack和babel的中间件
- @babel/core:babel的转换核心
- @babel/preset-env:预设环境
-
配置:
module: {rules: [{test: /\.m?js$/,exclude: /(node_modules|bower_components)/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env']}}}] } -
在package.json中设置兼容列表
"browserslist": ["defaults"]配置参考:https://github.com/browserslist/browserslist
plugin
概念
- 插件用来为webpack来扩展功能
- 插件目的在于解决 loader 无法实现的其他事。
- Webpack 提供很多开箱即用的 插件。
常用插件
html-webpack-plugin
- 这个插件可以在打包代码后,自动在打包目录生成html页面
使用步骤:
- 安装依赖
yarn add -D html-webpack-plugin - 引入依赖
const HTMLPlugin = require("html-webpack-plugin") - 配置插件
plugins: [new HTMLPlugin({// title: "Hello Webpack", //设置titletemplate: "./src/index.html" //模板,自动引入script脚本})]
devtool
devtool:"inline-source-map"配置源码的映射,方便调试打包后的代码。
2.4开发服务器(webpack-dev-server)
- 安装:
yarn add -D webpack-dev-server - 启动:
yarn webpack serve --open(--open表示启动服务器后自动打开)
配置
webpack –watch执行,(在本地文件夹中访问)代码发生变化时自动更新打包。
grunt/glup的对比
三、Vite
3.1概念
-
Vite也是前端的构建工具
-
相较于webpack,Vite采用了不同的运行方式:
- 开发时,并不对代码打包,而是直接采用**ESM(ES模块)**的方式来运行项目
- 在项目部署时,再对项目进行打包
-
除了速度外,Vite使用起来也更加方便(开箱即用,都配置好了)
-
本质上 Vite 和 Webpack 是打包工具,只是 Webpack 比较底层,需要自己手动去配置。
ESM 必须通过 url 加载页面(即需要通过服务器运行)
3.2基本使用
-
安装开发依赖 Vite
yarn add -D vite -
Vite 的源码目录默认就是项目**根目录**
- 在页面中引入 js 文件的时候要指定
type=“module” - 修改路径直接在 script 标签中修改 src 属性正确即可(webpack需要配置)
- 在页面中引入 js 文件的时候要指定
-
开发命令:
-
vite启动开发服务器 -
vite build打包代码 -
vite preview预览打包后代码
-
-
使用命令构建项目:
npm create vite@latest #使用 NPM
yarn create vite #使用 Yarn
pnpm create vite #使用 PNPM
#Vanilla 表示原生JS开发项目
-
使用插件
-
安装插件:
npm add -D @vitejs/plugin-legacy@vitejs/plugin-legacy:兼容传统浏览器的语法转换插件 -
配置文件:
vite.config.js// vite.config.js import legacy from '@vitejs/plugin-legacy' //引入插件 import { defineConfig } from 'vite' //语法提示(可选) export default defineConfig({ //写上defineConfig配置时会有提示plugins: [ //配置插件legacy({targets: ['defaults', 'IE 11'], //配置兼容版本}),], })需要使用ES6的模块化(
export default)去暴露文件(区别于 webpack 使用require)
-
相关文章:
webpack一篇
目录 一、构建工具 1.1简介 二、Webpack 2.1概念 2.2使用步骤 2.3配置文件(webpack.config.js) mode entry output loader plugin devtool 2.4开发服务器(webpack-dev-server) grunt/glup的对比 三、Vite 3.1概念 …...
健康饮食,健康早餐
营养早餐最好包含4大类食物:谷薯类;碳水;蛋白质;膳食纤维。 1.优质碳水 作用:提供持久的能量,避免血糖大幅波动等 例如:全麦面包、红薯🍠、玉米🌽、土豆🥔、…...
常见的排序算法 【复习笔记】
注意: 1. 后面的排序算法实现都只考虑升序,对于逆序,只有知道原理,实现很容易 2. 案例题: 题目描述:将读入的 N 个数从小到大输出 ( 1 < N <10e5) 输入描述:第一行一个正整数 N 第二行…...
【经验分享】Ubuntu20.04 vmware虚拟机存储空间越来越小问题(已解决)
【经验分享】Ubuntu20.04 vmware虚拟机存储空间越来越小问题(已解决) 前言一、问题分析二、解决方案 前言 我们在使用虚拟机过程中,经常会碰到即使删除了一些文件,但是存储空间还是越来越小的问题。今天我们来解决下这个问题。 一…...
Jenkins-自动化部署-通知
场景 使用jenkins部署,但有时不能立马部署,需要先通知相关人员,再部署,如果确实不能部署,可以留时间撤销。 方案 1.开始前我们添加,真正开始执行的等待时间;可供选择(Choice Param…...
Qt 文件操作+多线程+网络
文章目录 1. 文件操作1.1 API1.2 例子1,简单记事本1.3 例子2,输出文件的属性 2. Qt 多线程2.1 常用API2.2 例子1,自定义定时器 3. 线程安全3.1 互斥锁3.2 条件变量 4. 网络编程4.1 UDP Socket4.2 UDP Server4.3 UDP Client4.4 TCP Socket4.5 …...
《基于Hadoop的青岛市旅游景点游客行为分析系统设计与实现》开题报告
目录 一、选题依据 1.选题背景 2.国内外研究现状 (1)国内研究现状 (2)国外研究现状 3.发展趋势 4.应用价值 二、研究内容 1.学术构想与思路 2. 拟解决的关键问题 3. 拟采取的研究方法 4. 技术路线 (1)旅游前准备阶段 …...
pycharm debug卡住
pycharm debug时一直出现 collecting data, 然后点击下一行就卡住。 勾选 Gevent compatible解决 https://stackoverflow.com/questions/39371676/debugger-times-out-at-collecting-data...
MyBatis-Plus 元对象处理器 @TableField注解 反射动态赋值 实现字段自动填充
目录 🌰 举个直观例子 🛠️ 核心作用原理 📜 代码级工作流程 📜 完整代码 🔍 关键概念拆解 ⚠️ 常见问题排查 🌟 设计意义 🌰 举个直观例子 package work.dduo.ans.domain;import com.b…...
ISP 常见流程
1.sensor输出:一般为raw-OBpedestal。加pedestal避免减OB出现负值,同时保证信号超过ADC最小电压阈值,使信号落在ADC正常工作范围。 2. pedestal correction:移除sensor加的基底,确保后续处理信号起点正确。 3. Linea…...
Python Cookbook-2.27 从微软 Word 文档中抽取文本
任务 你想从 Windows 平台下某个目录树中的各个微软 Word 文件中抽取文本,并保存为对应的文本文件。 解决方案 借助 PyWin32 扩展,通过COM 机制,可以利用 Word 来完成转换: import fnmatch,os,sys,win32com.client wordapp w…...
java数据结构_Map和Set(一文理解哈希表)_9.3
目录 5. 哈希表 5.1 概念 5.2 冲突-概念 5.3 冲突-避免 5.4 冲突-避免-哈希函数的设计 5.5 冲突-避免-负载因子调节 5.6 冲突-解决 5.7 冲突-解决-闭散列 5.8 冲突-解决-开散列 / 哈希桶 5.9 冲突严重时的解决办法 5. 哈希表 5.1 概念 顺序结构以及平衡树中&#x…...
基于SpringBoot的“数据驱动的资产管理系统站”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“数据驱动的资产管理系统站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统登录界…...
excel 斜向拆分单元格
右键-合并单元格 右键-设置单元格格式-边框 在设置好分割线后,你可以开始输入文字。 需要注意的是,文字并不会自动分成上下两行。 为了达到你期望的效果,你可以通过 同过左对齐、上对齐 空格键或使用【AltEnter】组合键来调整单元格中内容的…...
深入理解推理语言模型(RLM)
大语言模型从通用走向推理,万字长文解析推理语言模型,建议收藏后食用。 本文基于苏黎世联邦理工学院的论文《Reasoning Language Models: A Blueprint》进行整理,你将会了解到: 1、RLM的演进与基础:RLM融合LLM的知识广…...
2025年具有百度特色的软件测试面试题
百度业务场景 如何测试一个高并发的搜索系统(如百度搜索)?如何测试一个在线地图服务(如百度地图)?如何测试一个大型推荐系统(如百度推荐)的性能?百度技术栈 你对百度的 PaddlePaddle 框架有了解吗?如何测试基于 PaddlePaddle 的服务?如何测试百度云的 API 服务?你对…...
HOW - 在Windows浏览器中模拟MacOS的滚动条
目录 一、原生 CSS 代码实现模拟 macOS 滚动条额外优化应用到某个特定容器 二、使用第三方工具/扩展 如果你想让 Windows 里的滚动条 模拟 macOS 的效果(细窄、圆角、隐藏默认轨道)。 可以使用以下几种方案: 一、原生 CSS 代码实现 模拟 m…...
Lua | 每日一练 (5)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Lua | 每日一练 (5)题目参考答案浅拷贝深拷贝使用场景…...
C# Unity 唐老狮 No.5 模拟面试题
本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…...
云原生事件驱动架构:构建实时响应的数字化神经系统
引言:重塑企业实时决策能力 Uber实现事件驱动架构升级后,实时供需匹配延迟降至8ms,动态定价策略响应速度提升1200倍。Netflix通过事件流处理实现个性化推荐,用户点击率提高34%,事件处理吞吐量达2000万/秒。Confluent基…...
Metasploit multi/handler 模块高级选项解析
multi/handler 是 Metasploit 框架中至关重要的模块,主要用于监听目标机的连接并处理来自目标的反向 shell 或会话。它可以灵活地适应不同渗透测试场景,提供高度的自定义选项以优化监听器的行为。 在 Metasploit msf6 框架中,当使用 exploit…...
WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中
WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中 一、前言二、部署与发布基础概念2.1 部署的定义与目的2.2 发布的方式与渠道2.3 部署与发布的关键要素 三、WPF 应用程序打包3.1 使用 Visual Studio 自带的打包工具3.2 使用第三方打包工具 四、发布到不同…...
Spring MVC 程序开发(1)
目录 1、什么是 SpringMVC2、返回数据2.1、返回 JSON 对象2.2、请求转发2.3、请求重定向2.4、自定义返回的内容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分别是什么?有什么关系? Servlet 是 java 官方定义的 web 开发的标准规范;Tomcat 是…...
JavaWeb后端基础(6)
主键返回 例子: /** * 新增员工数据 */ Options(useGeneratedKeys true, keyProperty "id") Insert("insert into emp(username, name, gender, phone, job, salary, image, entry_date, dept_id, create_time, update_time) " "value…...
C# Unity 唐老狮 No.4 模拟面试题
本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…...
集群、分布式与微服务架构 区别
集群、分布式与微服务架构:概念解析与核心差异 在构建现代软件系统时,集群架构、分布式系统和微服务架构是三种常见的技术方案。它们常被混淆,但各自解决的问题、设计理念和应用场景截然不同。本文将从基础概念出发,深入分析三者…...
Protocol Buffers在MCU上的nanopb介绍及使用详解
在嵌入式系统和资源受限的环境中,传统的Protocol Buffers 可能显得过于庞大。因此,nanopb 应运而生,它是一个轻量级的 Protocol Buffers 生成器,专为嵌入式系统设计c语言设计。本文将介绍如何安装和使用 nanopb,以及通…...
【Elasticsearch】自定义内置的索引生命周期管理(ILM)策略。
以下是对 Elasticsearch 官方教程《Customize built-in ILM policies》的详细解读,结合原文内容,帮助您更好地理解如何自定义内置的索引生命周期管理(ILM)策略。 --- Elasticsearch 教程:自定义内置 ILM 策略 1.背景…...
测试工程师Ai应用实战指南简例prompt
以下是一个真实具体的案例,展示测试工程师如何在不同阶段结合DeepSeek提升效率。案例基于电商平台"订单超时自动关闭"功能测试: 案例背景 项目名称:电商平台订单系统V2.3 测试目标:验证"用户下单后30分钟未支付,订单自动关闭并释放库存"功能 技术栈:…...
(十 二)趣学设计模式 之 享元模式!
目录 一、 啥是享元模式?二、 为什么要用享元模式?三、 享元模式的实现方式四、 享元模式的优缺点五、 享元模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…...
