前端面试练习24.3.5
webpack相关
项目使用webpack流程
- 进入一个初始化好的vue项目
- 下载安装webpack相关依赖包/插件
- npm install --save-dev webpack webpack-cli webpack-dev-server
- 安装一些相关的loader,比如vue-loader,babel-loader,css-loader等
- 创建webpack.config.js文件,进行相关配置
- 文件内容如下
const path = require('path'); const VueLoaderPlugin = require('vue-loader/lib/plugin');module.exports = {mode: 'development', // 设置为开发模式entry: './src/main.js', // 入口文件output: {path: path.resolve(__dirname, 'dist'), // 输出目录filename: 'bundle.js', // 输出文件名publicPath: '/dist/' // 公共路径},module: {rules: [{test: /\.vue$/, // 处理.vue文件loader: 'vue-loader'},{test: /\.js$/, // 处理.js文件exclude: /node_modules/,use: {loader: 'babel-loader'}},{test: /\.css$/, // 处理.css文件use: ['vue-style-loader', 'css-loader']},{test: /\.(png|jpe?g|gif)$/i, // 处理图片文件use: [{loader: 'file-loader',options: {outputPath: 'images' // 输出目录}}]}]},resolve: {extensions: ['.js', '.vue', '.json'], // 解析文件扩展名alias: {'vue$': 'vue/dist/vue.esm.js', // 指定Vue版本'@': path.resolve(__dirname, 'src') // 设置@符号指向src目录}},plugins: [new VueLoaderPlugin() // Vue Loader插件],devServer: {contentBase: path.resolve(__dirname, 'public'), // 设置服务器根目录publicPath: '/dist/', // 公共路径port: 8080, // 端口号open: true // 自动打开浏览器} };
1.webpack的构建流程
- 初始化参数:从配置⽂件和 Shell 语句中读取与合并参数,得出最终的参数;
- 开始编译:⽤上⼀步得到的参数初始化 Compiler 对象,加载所有配置的插件,执⾏对象的 run ⽅法开始执⾏编译;
- 确定⼊⼝:根据配置中的 entry 找出所有的⼊⼝⽂件;
- 编译模块:从⼊⼝⽂件出发,调⽤所有配置的 Loader 对模块进⾏翻译,再找出该模块依赖的模块,再递归本步骤直到所有⼊⼝依赖的⽂件都经过了本步骤的处理;
- 完成模块编译:在经过第4步使⽤ Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系;
- 输出资源:根据⼊⼝和模块之间的依赖关系,组装成⼀个个包含多个模块的 Chunk,再把每个 Chunk 转换成⼀个单独的⽂件加⼊到输出列表,这步是可以修改输出内容的最后机会;
- 输出完成:在确定好输出内容后,根据配置确定输出的路径和⽂件名,把⽂件内容写⼊到⽂件系统。
2.webpack的优势
webpack适⽤于⼤型复杂的前端站点构建:
webpack有强⼤的loader和插件⽣态,打包后的⽂件实际上就是⼀个⽴即执⾏函数,这个⽴即执⾏函数接收⼀个参数,这个参数是模块对象,键为各个模块的路径,值为模块内容。⽴即执⾏函数内部则处理模块之间的引⽤,执⾏模块等,这种情况更适合⽂件依赖复杂的应⽤开发。
3.webpack的热更新是怎么做的
Webpack的热更新(Hot Module Replacement,HMR)是一项功能,它允许在不刷新整个页面的情况下替换、添加或删除模块。这使得开发者可以在保持应用程序状态的同时进行快速的开发和调试。
运行时更新模块:
- 当Webpack监听到源代码发生变化时,它会在后台重新编译修改过的模块,但并不会重新加载整个页面。
- 更新的模块以及其依赖项会被标记为"热"(hot)。
模块热替换(Hot Module Replacement):
- 当新的模块编译完成后,Webpack会使用WebSocket或者XHR等方式通知在运行时的应用程序。
- 应用程序会接收到这些更新,并通过一种叫做"热更新中间件"的工具来处理这些更新。
应用程序响应更新:
- 应用程序会根据更新的类型(替换、添加或删除模块)来执行相应的操作。
- 替换模块时,应用程序会尽可能保留当前模块的状态,例如组件的状态或者页面的滚动位置。
- 如果一个模块无法热更新,那么整个页面就会被重新加载。
完成热更新:
- 一旦应用程序完成更新,它会发送一个消息给Webpack,告诉Webpack热更新已经完成。
- 在完成更新之后,Webpack会重新编译其他模块,以确保它们与最新的代码保持同步。
4.webpack的性能优化是怎么做的
⽤webpack优化前端性能是指优化webpack的输出结果,让打包的最终结果在浏览器运⾏快速⾼效。
- 压缩代码:删除多余的代码、注释、简化代码的写法等等⽅式。可以利⽤webpack的 UglifyJsPlugin 和 ParallelUglifyPlugin 来压缩JS⽂件, 利⽤ cssnano (css-loader?minimize)来压缩css
- 利⽤CDN加速: 在构建过程中,将引⽤的静态资源路径修改为CDN上对应的路径。可以利⽤webpack对于 output 参数和各loader的 publicPath 参数来修改资源路径
- Tree Shaking: 将代码中永远不会⾛到的⽚段删除掉。可以通过在启动webpack时追加参数 --optimize-minimize 来实现
- Code Splitting: 将代码按路由维度或者组件分块(chunk),这样做到按需加载,同时可以充分利⽤浏览器缓存
- 提取公共第三⽅库: SplitChunksPlugin插件来进⾏公共模块抽取,利⽤浏览器缓存可以⻓期缓存这些⽆需频繁变动的公共代码
5.webpack treeShaking机制的原理
- treeShaking也叫摇树优化,是一种通过移除多于代码,来优化打包体积的,生产环境默认开启。
- 可以在代码不运行的状态下,分析出不需要的代码;
- 利用es6模块的规范
- ES6 Module引入进行静态分析,故而编译的时候正确判断到底加载了那些模块
- 静态分析程序流,判断那些模块和变量未被使用或者引用,进而删除对应代码
6.一些常见Loader
- file-loader:把⽂件输出到⼀个⽂件夹中,在代码中通过相对 URL 去引⽤输出的⽂件
- url-loader:和 file-loader 类似,但是能在⽂件很⼩的情况下以 base64 的⽅式把⽂件内容注⼊到代码中去
- source-map-loader:加载额外的 Source Map ⽂件,以⽅便断点调试
- image-loader:加载并且压缩图⽚⽂件
- babel-loader:把 ES6 转换成 ES5
- css-loader:加载 CSS,⽀持模块化、压缩、⽂件导⼊等特性
- style-loader:把 CSS 代码注⼊到 JavaScript 中,通过 DOM 操作去加载 CSS。
- eslint-loader:通过 ESLint 检查 JavaScript 代码
相关文章:
前端面试练习24.3.5
webpack相关 项目使用webpack流程 进入一个初始化好的vue项目下载安装webpack相关依赖包/插件 npm install --save-dev webpack webpack-cli webpack-dev-server安装一些相关的loader,比如vue-loader,babel-loader,css-loader等创建webpack.config.js文…...
vim 编辑器
vim 编辑器是什么用途? vim 是一种强大而灵活的文本编辑器,广泛用于开发和系统管理任务。它可以在命令行界面中使用,并提供许多高级编辑功能和快捷键,使用户能够高效地编辑文本文件。 vim 编辑器适用于哪些语言? vim 编…...
docker安装MongoDB脚本
使用docker安装MongoDB只需要按以下步骤执行即可: 一、docker 运行 注意修改默认端口,防止被攻击: docker run -d --name mongo --restartalways -p 25066:28317 -v /usr/local/mongDb/configdb:/data/configdb -v /usr/local/mongDb/db:…...
资料下载-嵌入式 Linux 入门
学习的第一步是去下载资料。 1. 有哪些资料 所有资料分 4 类: ① 开发板配套资料(原理图、虚拟机的映像文件、烧写工具等),放在百度网盘 ② 录制视频过程中编写的文档、源码、图片,放在 GIT 仓库 ③ u-boot、linux 内核、buildroot 等比较大…...
错误票据 刷题笔记
开数组 读入数据 记录最小值和最大值 每次读入x; 让a[x]; 从最小值开始 向上扫 当扫到a[x]0时候为断号 扫到a[x]>1为重号; 该题的小技巧 未知长度的数据的读入方式 1.首先在头文件敲上 #include<sstream> #include<string> #include<…...
十堰网站建设公司华想科技具有10年的网站制作经验
2018年已经结束了。 华翔科技收到了很多客户的咨询,他们都有一个共同的问题:建一个网站需要多少钱? 但是,我们都会问:您有什么具体需求吗? 大多数人的答案是否定的,他们只是想打听一下价格。 十…...
站库分离技术--反向代理技术-雷池云WAF-给自己搭建一个安全点的网站
文章目录 概要整体架构流程技术名词解释技术细节ssh-ubuntu服务器docker-映射-链接-通信nginx反代mysql设置数据库新密码 小结我的mysql映射目录我的wordpress映射目录 成果展示 概要 新买了一个云服务器,想搭建一个站库分离的wordpress为主的网站,采用d…...
MySQL常见的索引类型介绍
我将为您详细讲解 MySQL 中常见的索引类型,以及它们的使用场景、特点、区别和优势。索引是提高数据库查询性能的关键工具,它可以加速数据检索速度,减少服务器的负担。在 MySQL 中,索引类型主要包括 B-Tree 索引、哈希索引、全文索…...
iOS——【自动引用计数】ARC规则及实现
1.3.3所有权修饰符 所有权修饰符一共有四种: __strong 修饰符__weak 修饰符__undafe_unretained 修饰符__autoreleasing 修饰符 __strong修饰符 _strong修饰符表示对对象的强引用,持有强引用的变量在超出其作用域的时候会被废弃,随着强引…...
智慧城市的前景:数字孪生技术在智慧城市中的应用前景
目录 一、引言 二、数字孪生技术及其在智慧城市中的应用概述 三、数字孪生技术在智慧城市中的应用前景 1、城市规划与仿真模拟 2、智能交通与出行服务 3、智慧环保与可持续发展 4、智慧公共服务与社会治理 5、智慧能源与绿色建筑 四、数字孪生技术在智慧城市中的挑战与…...
Everything:文件查找工具,一搜即得
名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件介绍①Everything②核心功能③原理 二、下载安装①下载②安装 三、使用方法①文…...
【数据结构:树与堆】向上/下调整算法和复杂度的分析、堆排序以及topk问题
文章目录 1.树的概念1.1树的相关概念1.2树的表示 2.二叉树2.1概念2.2特殊二叉树2.3二叉树的存储 3.堆3.1堆的插入(向上调整)3.2堆的删除(向下调整)3.3堆的创建3.3.1使用向上调整3.3.2使用向下调整3.3.3两种建堆方式的比较 3.4堆排…...
vue3+element-plus el-input 自动获取焦点
虽然element有提供input的autofocus属性,但是当我们第二次进入页面就会发现autofocus已经不再生效,需要通过onMounted去触发input的focus解决这个问题。 1.先给el-input绑定一个ref:<el-input ref"inputRef" v-model"inp…...
简单了解TCP/IP四层模型
什么是计算机网络? 计算机网络我们可以理解为一个巨大的城市地图,我们想从A地前往B地,其中要走的路、要避开的问题都交给计算机网络解决,直到我们可以正常的到达目的地,那么我们会把其中的过程抽象成一个网络模型&…...
大模型时代下的自动驾驶研发测试工具链-SimCycle
前言: 最近OpenAI公司的新产品Sora的发布,正式掀起了AI在视频创作相关行业的革新浪潮,AI不再仅限于文本、语音和图像,而直接可以完成视频的生成,这是AI发展历程中的又一座重要的里程碑。AI正在不断席卷着过去与我们息…...
人工智能迷惑行为大赏
近年来,随着人工智能技术的不断发展和应用,我们在日常生活中越来越多地接触到各种智能设备和程序。然而,随之而来的是一些令人瞠目结舌的人工智能迷惑行为,让人们对这一新兴技术产生了更多的好奇和思考。 在人工智能迷惑行为大赏…...
ZJUBCA研报分享 | 《BTC/USDT周内效应研究》
ZJUBCA研报分享 引言 2023 年 11 月 — 2024 年初,浙大链协顺利举办为期 6 周的浙大链协加密创投训练营 (ZJUBCA Community Crypto VC Course)。在本次训练营中,我们组织了投研比赛,鼓励学员分析感兴趣的 Web3 前沿话题…...
SSM整合项目(使用Vue3 + Element-Plus创建项目基础页面)
1.配置Vue启动端口 1.修改vue.config.js const {defineConfig} require(vue/cli-service) module.exports defineConfig({transpileDependencies: true }) module.exports {devServer: {port: 9999 //启动端口} }2.启动 2.安装Element Plus 命令行输入 npm install eleme…...
css相邻元素边框重合问题,解决方案
1、如下图所示,在给元素设置边框后,相邻元素会出现重合的问题 2、解决方案 给每个元素设置margin-top以及margin-left为负的边框 <div style"width: 300px;display: flex;flex-wrap: wrap;margin-top: 50px;"><div style"border…...
CentOS7 利用remi yum源安装php8.1
目录 前言remi yum源remi yum源 支持的操作系统remi yum源 支持的php版本 安装epel源安装remi源安装 php8.1查看php版本查看php-fpm服务启动php-fpm服务查看php-fpm服务运行状态查看php-fpm服务占用的端口查看 php8.1 相关的应用 前言 CentOS Linux release 7.9.2009 (Core) …...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
