webpack + vite 前端构建工具

1. 构建工具

  • 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。
  • 我们就迫切的希望有一款工具可以对代码进行打包,将多个模块打包成一个文件。这样一来即解决了兼容性问题,又解决了模块过多的问题。
  • 构建工具就起到这样一个作用,通过构建工具可以将使用ESM规范编写的代码转换为旧的JS语法,这样可以使得所有的浏览器都可以支持代码。

ESM模块 --> webpack/vite --> 原始js代码

2. webpack

2.1 webpack 使用

  1. 因为是在node 环境中运行,所以先初始化项目

npm init -y

  1. 安装依赖 webpack webpack-cli(使用命令行运行webpack)

npm i -D webpack
npm i -D webpack-cli
-D 表示在生产时使用

  1. 在项目中创建src目录,然后编写代码(index.js)
  2. 在命令行执行

npx webpack

使用模块化时,在node / webpack 环境中js/json 后缀不需要写,会自动补全;但是原生js 代码需要写上,不然会出现文件找不到的情况。

2.2 webpack 配置文件

  1. 在根目录中创建 webpack.config.js
    注意:此处文件是webpack的配置文件,webpack是在node 环境中运行的,所以需要使用CommonJS
module.exports = {// output: {//     path: path.resolve(__dirname, 'dist'),//     filename: 'main.js'// },mode: "development" // 设置mode  production:生产模式 development:开发模式
}

webpack 只会打包会执行的代码,只有定义但没被调用的变量或者函数等数据不会被打包

webpack官网

( 1 ) entry – 入口文件

module.exports = {entry: './src/index.js', // 入口文件 默认打包./src/index.js//  entry: "[./src/index.js, './src/index2.js']"  // entry:{// a:"./src/index.js"// b:"./src/index2.js"// }// 也可以打包多个文件}

( 2 ) ouput – 出口文件

module.exports = {
output: {path: path.resolve(__dirname, 'dist'), // 指定打包目录 必须是绝对路径filename: 'main.js', // 指定打包文件名// filename: "[name].js"  name值得是上面的a,b// filename: "[name]-[id]-[hash].js"  打包后的文件名上带有id ,hash值clean: true // 自动清理打包目录(比如dist)},
}

( 3 ) loader – 加载器

module.exports = {module: {// 一个规则只负责一个功能rules: [{// 这个规则只负责打包css代码// 匹配文件需要使用正则表达式test: /\.css$/i, // 匹配以css结尾的文件use: "css-loader"},{// 这个规则负责打包和转换css代码test: /\.css$/i, // 匹配以css结尾的文件use: ["style-loader","css-loader"] // 注意书写顺序  loder 从后往前执行 这里需要安装依赖 npm i style-loader css-loader -D},{// 引入图片test: /\.(jpg|gif|png)/i,type: "asset/resource" // 图片类型的资源不需要安装依赖}]}
}

( 4 ) babel – (转换js语法)

在打包文件时webpack会把一些不必要的函数以及变量省略,比如下面就将常量和自执行的函数省略部分:
省略前:

document.body.insertAdjacentHTML("beforeend","<hl>今天天气真不错,风才12级k/h1>")
const a=10
const fn =()=>{
return "哈哈"
}
console.log(a)
console.log(fn())
document.body.onclick =()=>{
alert("你点我干嘛!")
}

省略后:

document.body.insertAdjacentHTML("beforeend","<hl>今天天气真不错,风才12级k/h1>")
console.log(10)
console.log("哈哈")
document.body.onclick =()=>{
alert("你点我干嘛!")
}

注意:在低版本浏览器中不兼容箭头函数等其他的新特性,但是我们现在希望能够使用新的特性,我们可以采用折中的方案。依然使用新特性编写代码,但是代码编写完成时我们可以通过一些工具将新代码转换为旧代码。例如babel–将新JS语法转换为旧的js代码

babel用来转换代码,是一个loder。
使用时需要:

  1. 安装

npm i -D babel-loader @babel/core @babel/preset-env

  1. 配置
{test: /\.(?:js|mjs|cjs)$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: [['@babel/preset-env', { targets: "defaults" }]]}}}

指定兼容浏览器:
在package.json 文件中添加以下内容:

"browserlist": ["defaults", // 默认配置"ie 6-8" // 指定配置]

2.3 插件

插件 – 为webpack 扩展功能

html-webpack-plugin ------ 在打包代码后,自动在打包目录生成html页面

  1. 安装依赖

npm i -D html-webpack-plugin

  1. 配置
plugins: [new HtmlPlugin({template: './src/index.html'}),]

插件和加载器区别:
加载器会对代码进行处理,插件只做辅助工作。

2.4 webpack 开发服务器

每次修改完代码之后都需要手动输入命令进行代码打包,以下两种方法可以改善这种情况。

npx webpack --watch

  1. 安装依赖

npm i -D webpack-dev-server

npx webpack serve
npx webpack serve (–open) 在浏览器中打开网页

2.5 sourceMap

注意:使用 npx webpack serve (–open) 时只会j将打包好的文件放在服务器上,自己本身的文件中是没有dist文件夹的。

开发模式(development)打包之后的代码可以进行调试,但是生产模式(production)下打包的代码不可调试。

// 开发时要使用的工具devtool: "inline-source-map"

这样就达到执行打包后的代码,调试源码的效果。

3. Vite

  • 相较于webpack,vite采用了不同的运行方式:
  1. 开发时,并不对代码打包,而是直接采用ESM的方式来运行项目
  2. 在项目部署时,在对项目进行打包
  • 除了速度外,vite使用起来也更加方便

3.1 使用

  1. 安装依赖

npm i -D vite

直接在创建根目录下创建html文件,但是在引入js文件时必须表明type=“module”,因为此处使用的是ESM语法。

  1. 使用

npx vite

出现一个网址地点,即所对应的index.html 1️⃣

打包代码:

npx vite build

注意:
打包完的代码不能直接在浏览器打开,需要通过网址/服务器进行访问(live server也不可以);或者通过2️⃣

npx vite preview

1️⃣处打开的是开发服务器,代码变化那么页面内容也会随之改变;
但是2️⃣处打开的是进行预览,页面不会随代码改变而改变,需要重新打包后才会有变化。

3.2搭建一个vite 项目:

npm create vite

vanilla —> 原生js

vite的使用不需要配置loader去引入css等文件。

vite需要配置的地方:
浏览器对代码的兼容性

使用插件进行

同样的,在根目录下创建vite.config.js

npm add -D @vitejs/plugin-legacy

import legacy from '@vitejs/plugin-legacy'
import { defineConfig } from 'vite'
export default defineConfig({
plugins:[
legacy({
targets:['defaults','not IE 11']
})
]
})

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

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

相关文章

TCP和UDP知识点

TCP和UDP的区别 TCP是面向连接的协议&#xff0c;需要在数据传输前建立连接&#xff1b;UDP是无连接的&#xff0c;不需要建立连接。TCP提供可靠的数据传输&#xff0c;保证数据包的顺序和完整性&#xff1b;UDP不保证数据包的顺序或完整性。TCP具有拥塞控制机制&#xff0c;可…

如何选购一台云服务器

说明&#xff1a;基于博主本人经常在用云服务学习技术&#xff0c;许多博客里的技术分享也都是在自己购买的云服务器上操作的&#xff0c;本文介绍根据自己的经验&#xff0c;如何选购一台云服务器 选择产商 云服务可以选择阿里云、华为云、腾讯云、百度云&#xff0c;都是几…

296个地级市GDP相关数据(2000-2023年)

GDP相关数据&#xff1a;衡量地区经济活动的综合指标 国内生产总值&#xff08;GDP&#xff09;是衡量一个国家或地区经济规模和发展水平的核心指标。它反映了在一定时期内&#xff0c;所有常住单位生产活动的最终成果。 GDP的种类及其含义&#xff1a; 名义GDP&#xff1a;按…

昆明高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

昆明高校大学智能制造实验室的数字孪生可视化系统平台建设项目&#xff0c;正是在这样的背景下应运而生。项目自启动以来&#xff0c;便受到了校方的高度重视和大力支持。经过数月的紧张筹备和精心实施&#xff0c;项目团队克服了种种技术难题&#xff0c;成功完成了系统的开发…

kubekey在ubuntu24实现kubernetes快速安装

基于Ubunut24.04安装 设置主机名 hostnamectl set-hostname kkmain hostnamectl set-hostname kknode1 hostnamectl set-hostname kknode2关闭swap sudo swapoff -a sudo sed -i s/.*swap.*/#&/ /etc/fstab安装kubekey export KKZONEcn curl -sfL https://get-kk.kubes…

热题系列9

剑指 Offer 39. 数组中出现次数超过一半的数字 给一个长度为 n 的数组&#xff0c;数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次&#xff0c;超过数组长度的一半&am…

用 Kotlin 编写四则运算计算器:从零开始的简单教程

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

AI搜索助手心流正式上线 小程序版本、APP版本也将推出

7月10日&#xff0c;专为科研人员、高校教师和学生、职场人士研发的大模型应用产品心流正式上线。据了解&#xff0c;其产品定位为用户的AI搜索助手&#xff0c;提供智能搜索、知识问答、智能阅读、辅助创作等能力&#xff0c;旨在帮助用户提升工作和学习效率。 心流支持AI搜索…

AI绘画:midjourney快速生成符合心意的AI人物形象

生成人物的万能句式&#xff0c;包含**「人物的客观描述」「视角」「角度」「距离」「表情」「服装」「风格」「光源」**等内容&#xff0c;也可以只取其中部分的也会得到一个还不错的结果。 人物构图视角的选择 视角可以按照相机相对于被拍摄对象的位置&#xff0c;分为 正面…

微信小程序毕业设计-报刊订阅系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

网络(二)——套接字编程

文章目录 理解源IP地址和目的IP地址认识端口号认识TCP/UDP协议网络字节序socket编程接口socket 常见APIsockaddr结构 理解源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址&#xff1b; 源IP即发送方的地址&#xff0c;目的IP即接受方的…

免费开源数字人生成工具

使用步骤更是简单到不行&#xff1a; 1. 输入图片&#xff1a;选择你想要生成动态视频的肖像图片。 2. 输入音频&#xff1a;提供与图片匹配的音频文件&#xff0c;EchoMimic会根据音频内容驱动肖像的动态效果。 3. 设置参数&#xff1a;一般保持默认设置即可&#xff0c;当然&…

Kylin的智能优化:Cube自动优化的奥秘

Kylin的智能优化&#xff1a;Cube自动优化的奥秘 在大数据时代&#xff0c;Apache Kylin作为领先的大数据分析平台&#xff0c;以其高性能的Cube技术为数据仓库提供了强大的分析加速能力。然而&#xff0c;随着数据量的不断增长和查询模式的多样化&#xff0c;如何优化Cube以适…

【银河麒麟服务器操作系统】系统夯死分析及处理建议

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问麒麟软件产品专区&#xff1a;https://product.kylinos.cn 服务器环境以及配置 【机型】物理机 处理器&#xff1a; Intel 内存&#xff1a; 512G 整机类型/架构&#xff1a; X86_64 【内核版本】 4.19.90-25…

【C++深入学习】类和对象(一)

欢迎来到HarperLee的学习笔记&#xff01; 博主主页传送门&#xff1a;HarperLee博客主页&#xff01; 欢迎各位大佬交流学习&#xff01; 本篇本章正式进入C的类和对象部分&#xff0c;本部分知识分为三小节。复习&#xff1a; 结构体复习–内存对齐编译和链接函数栈桢的创建…

再升级!视频理解大模型 CogVLM2 开源

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

基于JAVA-JSP的电子书下载系统设计与实现

点击下载源码 基于JAVA-JSP电子书下载系统 目 录 第1章 绪论 1 课题的研究背景、内容和意义 1 第2章 主要技术概述 3 2.1 B/S结构 3 2.2 JSP技术 4 2.2.1 JSP技术的强势 5 2.2.2 JSP技术的弱势 5 2.3 SQL SERVER 2000数据库 5 2.4 JDBC数据库连接 6 2.4.1 JDBC接口 …

Mathematica笔记

Mathematica笔记 mathematica等距、不等距数组mathematica多条线作图与循环图例 mathematica等距、不等距数组 mathematica多条线作图与循环图例 Clear["*"] h[x_, a_] a*E^x; LogLogPlot[Evaluate[Table[h[x, i], {i, 1, 20, 2}]], {x, 0.001, 10}, PlotRange -&g…

OpenGL笔记八之EBO和EBO绘制流程

OpenGL笔记八之EBO和EBO绘制流程 —— 2024-07-07 晚上 总结自bilibili赵新政老师的教程 code review! 文章目录 OpenGL笔记八之EBO和EBO绘制流程1.EBO2.glDrawElements&#xff1a;如果使用了ebo&#xff0c;最后一个参数可以写03.glDrawElements&#xff1a;如果使用了ebo…

CSS技巧专栏:一日一例 2.纯CSS实现 多彩边框按钮特效

大家好,今天是 CSS技巧一日一例 专栏的第二篇《纯CSS实现多彩边框按钮特效》 先看图: 开工前的准备工作 正如昨日所讲,为了案例的表现,也处于书写的习惯,在今天的案例开工前,先把昨天的准备工作重做一遍。 清除浏览器的默认样式定义页面基本颜色设定body的样式清除butt…