webpack babel
构建工具
简介
- 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。
- 我们就迫切的希望有一款工具可以对代码进行打包,将多个模块打包成一个文件。这样一来即解决了兼容性问题,又解决了模块过多的问题。
- 构建工具就起到这样一个作用,通过构建工具可以将使用ESM规范编写的代码转换为旧的JS语法,这样可以使得所有的浏览器都可以支持代码。
Webpack
概念
本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。【按需打包】
webpack在node中运行
使用步骤
- 初始化项目
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
配置文件(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"
配置源码的映射,方便调试打包后的代码。
开发服务器(webpack-dev-server)
- 安装:
yarn add -D webpack-dev-server
- 启动:
yarn webpack serve --open
(--open
表示启动服务器后自动打开)
配置
webpack –watch
执行,(在本地文件夹中访问)代码发生变化时自动更新打包。
grunt/glup的对比
Vite
概念
-
Vite也是前端的构建工具
-
相较于webpack,Vite采用了不同的运行方式:
- 开发时,并不对代码打包,而是直接采用**ESM(ES模块)**的方式来运行项目
- 在项目部署时,再对项目进行打包
-
除了速度外,Vite使用起来也更加方便(开箱即用,都配置好了)
-
本质上 Vite 和 Webpack 是打包工具,只是 Webpack 比较底层,需要自己手动去配置。
ESM 必须通过 url 加载页面(即需要通过服务器运行)
基本使用
-
安装开发依赖 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 babel
构建工具 简介 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…...

autollm 指令设计
autollm 指令设计 可循环示意图文本 示意图AI解释可循环示意图 文本 示意图 # <|aos|>环境<|bos|>他人<|cos|>自己<|dos|>表示是否进行写python 代码来从外界获取辅助数据来重构 前面所有的信息<|eos|>代表是否生成python 代码控制各种外审设备…...

浙江大学漏洞报送证书
获取来源:edusrc(教育漏洞报告平台) url:主页 | 教育漏洞报告平台 兑换价格:20金币 获取条件:提交浙江大学任意中危或以上级别漏洞...

ROS 学习应用篇(三)服务Server学习之Server
话题Topic是订阅器与发布器节点之间的,而服务则是客户端(Client)和服务器(Server)间的,前者是异步的,后者是同步的。而且话题是单项的不需要服务器上线,而服务是双向的。在开启服务之…...

vue+css动画 实现文字的上下轮播切换
突然间碰到一个比较丝滑的特效,就研究了一下想把它实现出来。 效果:渐隐消失,底部往上走覆盖出现 以下是完整代码,复制粘贴即可运行 <template><div class="aaa"><divclass="page1":class="{ private-fade-out: prevIndex === 1…...

debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)
文章目录 前言一、服务器配置安装wireguard软件生成私钥公钥配置服务器参数配置服务器sysctl参数启动、停止服务端 二、用户端配置安装wireguard软件生成私钥公钥配置客户端参数启动、停止客户端配置服务开机启动 三、服务器添加、删除客户四、配置掉线自启动配置掉线自启动脚本…...

LeetCode146.LRU缓存
写了一个小时,终于把示例跑过了,没想到啊提交之后第19/22个测试用例没过 我把测试用例的输出复制在word上看看和我的有什么不同,没想到有18页的word,然后我一直检查终于找出了问题,而且这个bug真的太活该了,…...
5-7 使用函数求余弦函数的近似
实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:…...
Kotlin HashMap entries.filter过滤forEach
Kotlin HashMap entries.filter过滤forEach fun main(args: Array<String>) {val hashMap HashMap<String, Int>()hashMap["a"] 1hashMap["b"] 2hashMap["c"] 3println(hashMap)hashMap.entries.filter {println("filter $…...
css的预处理
CSS的预处理器是一种CSS的扩展,可以让开发者使用更加高效、灵活的方式来编写CSS代码。 常用的CSS预处理器包括: Sass:基于Ruby的CSS预处理器,提供了大量的函数和变量等扩展功能。 Less:基于JavaScript的CSS预处理器&…...

[云原生案例2.2 ] Kubernetes的部署安装 【单master集群架构 ---- (二进制安装部署)】网络插件部分
文章目录 1. Kubernetes的网络类别2. Kubernetes的接口类型3. CNI网络插件 ---- Flannel的介绍及部署3.1 简介3.2 flannel的三种模式3.3 flannel的UDP模式工作原理3.4 flannel的VXLAN模式工作原理3.5 Flannel CNI 网络插件部署3.5.1 上传flannel镜像文件和插件包到node节点3.5.…...
Go开发基础环境搭建
前面,我们写了下关于GO的入门简介,今天我们打算实操,在实操之前需要准备下基础环境。 IDE开发工具 GoLand 是一款由捷克软件开发公司 JetBrains 专为 Go 开发的跨平台商业 IDE。Goland 具有 Strong Code Insight、Navigation & Search、…...

Vue简单使用Echart图表柱形图 vue使用柱形图 vue使用 echart图表柱形图 vue使用柱形图
Vue简单使用Echart图表柱形图 vue使用柱形图 vue使用 echart图表柱形图 vue使用柱形图 1、安装依赖2、页面Demo使用3、效果图 1、安装依赖 官方文档:https://echarts.apache.org/zh/option.html#title 官方在线示例:https://echarts.apache.org/exampl…...

centos 7.9系统安装老版本jenkins,并解决插件问题
1.初衷 因为jenkins随着时间推移,其版本也越来越新,支持它运行的JDK也越来越新。基于不折腾的目标,我们安装一个老的固定版本就行。以前安装新版本,经常碰到的问题就是插件安装不兼容的问题。现在这个问题,可以把以前…...

BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练
来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/abs/2306.02329 摘要: 训练模型将常识性语言知识和视觉概念从 2D 图像应用到 3D 场景理解是研究人员最近才开始探索的一个有前景的方向。然而,…...

《嵌入式虚拟化技术与应用》:深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!
目录 关于博主前言专家推荐本书适合谁?内容简介书本目录权威作者团队其他 关于博主 🚀Python爬虫项目实战系列文章!! ⭐⭐欢迎订阅⭐⭐ 【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认…...
【Java开发】之获取客户端真实 IP 地址
一、应用场景 在投票系统开发中,为了防止刷票,我们需要限制每个 IP 地址只能投票一次;当网站受到诸如 DDoS(Distributed Denial of Service,分布式拒绝服务攻击)等攻击时,我们需要快速定位攻击者…...

Linux RPM包安装、卸载和升级
我们以安装 apache 程序为例。因为后续章节还会介绍使用源码包的方式安装 apache 程序,读者可以直观地感受到源码包和 RPM 包的区别。 RPM包默认安装路径 通常情况下,RPM 包采用系统默认的安装路径,所有安装文件会按照类别分散安装到表 1 所…...

ROS 多级tf坐标转换
题目 现有一移动机器人,该机器人的基坐标系为“base_link”,机器人包含3个子坐标系分别为“joint1”,“joint2”,“joint3”。 要求:利用多坐标转换,实现joint1下的坐标向joint2下的坐标转换,…...
ceph rados对象存储索引残留问题排查与处理
问题现象 对象存储存储桶无法删除,检查发现生命周期过期后存储桶中有文件残留,未完全删除,但实际访问文件时为404,通过s3cmd无法删除对象,且无报错。 问题定位 检查bucket当前状态,发现桶内有大量object…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...