34 vue 项目默认暴露出去的 public 文件夹 和 CopyWebpackPlugin

前言

这里说一下 vue.config.js 中的一些 public 文件夹是怎么暴露出去的?  

我们常见的 CopyWebpackPlugin 是怎么工作的 ?

这个 也是需要 一点一点积累的, 因为 各种插件 有很多, 不过 我们仅仅需要 明白常见的这些事干什么的即可

当然 以下内容会涉及到一部分vue-cli, webpack 的相关源码, 如果不明白 可以查询一下, 或者 联系

以 mars3d_test 项目为例

 

 

关于 vue 项目默认暴露出去的 public 文件夹

在 public 文件夹下面新建 1.txt

然后, 启动项目

f52790da0bae4a6e9356da727c46a641.png

 

浏览器中访问 “http://localhost:8080/1.txt” 可以看到 可以访问到 这个 1.txt

那么 这部分 public 文件夹下面的服务 是怎么暴露出去的呢 ?

3eb9027077f54a41a64df5d2286fcceb.png

 

我们来看一下这里一整个 http 请求的处理流程

请求为 “http://localhost:8080/1.txt”, 然后这里 processRequest 中根据 “/1.txt”, 以及输出路径[当前目录下面的 dist 目录, 在 vue.config.js 中配置]的上下文来解析是否存在文件, 可以找到文件 “/Users/jerry/WebstormProjects/mars3d_test/dist/1.txt” 

然后 这里就是读取 目标文件的内容, 然后 基于 http 将文件内容响应回去

可以看到的是这里 “/Users/jerry/WebstormProjects/mars3d_test/dist” 在我们的真实硬盘上面是没有这个目录的, 这是因为 这个目录是 node 这边运行时自己 构建的一个内存文件系统

da82a4130d084b5ca9200a29309a6779.png

 

我们来看一下这个内存文件系统的上下信息

07b34707c2364a5896ac1165fef248b8.png

 

dist 下面的即为我们在 http://localhost:8080/1.txt 中访问拿到的最终的文件

7512368998964748b7d172960d2d5bec.png

 

这里得出的另外一个结论是 public 中的内容是会影响目标 node 进程的内存占用的

如下内存使用情况为 public 下面有一个 1G 大小的 1.mp4 文件, node进程内存大约占用 2G

master:~ jerry$ ps -ef | grep node501   567   479   0  9:38AM ??         0:02.88 /usr/local/bin/node /Applications/WebStorm.app/Contents/plugins/JavaScriptLanguage/jsLanguageServicesImpl/js-language-service.js -id=1698543489067 -debug-name=eslint501   763   479   0  9:47AM ??         1:29.36 /usr/local/bin/node /Applications/WebStorm.app/Contents/plugins/JavaScriptLanguage/jsLanguageServicesImpl/js-language-service.js -id=1698544044780 -debug-name=VueService501  2216  2214   0  2:07PM ttys001    0:23.18 node /Users/jerry/WebstormProjects/mars3d_test/node_modules/.bin/vue-cli-service serve501  2403  1154   0  2:22PM ttys002    0:00.00 grep node
master:~ jerry$ top | grep 2216
2216  node             0.0  00:23.18 15    1   62+    2060M+ 0B     1993M+ 2214 2214 sleeping *0[1+]     0.00000 0.00000    501 1139502+  631+   5626+     262+      251446+   15259+    90024+    78+     235     0.0   0      0      jerry                  N/A    N/A   N/A   N/A   N/A   N/A  
356   PAH_Extension    0.0  00:01.55 3     1   201+   4776K+ 0B     2216K+ 356  1    sleeping  0[3990+]  0.00000 0.00000    501 21279+    323+   27355+    9207+     31733+    68685+    31438+    12+     403     0.0   0      0      jerry                  N/A    N/A   N/A   N/A   N/A   N/A  
2216  node             0.0  00:23.18 15    1   62     2060M  0B     1993M  2214 2214 sleeping *0[1]      0.00000 0.02507    501 1139514+  631    5635+     262       251454+   15280+    90028+    78      235      0.0   447035    1421543   jerry                  N/A    N/A   N/A   N/A   N/A   N/A  
356   PAH_Extension    0.0  00:01.55 3     1   201    4776K  0B     2216K  356  1    sleeping  0[3990]   0.00000 0.00000    501 21279     323    27357+    9208+     31736+    68694+    31442+    12      403      0.0   96732     335921    jerry                  N/A    N/A   N/A   N/A   N/A   N/A  
2216  node             0.0  00:23.18 15    1   62     2060M  0B     1993M  2214 2214 sleeping *0[1]      0.00000 0.00000    501 1139514   631    5635      262       251456+   15280     90029+    78      236+     0.0   24825     165089    jerry                  N/A    N/A   N/A   N/A   N/A   N/A  
356   PAH_Extension    0.0  00:01.55 3     1   201    4776K  0B     2216K  356  1    sleeping  0[3990]   0.00000 0.00000    501 21279     323    27357     9208      31736     68694     31442     12      403      0.0   0         0         jerry                  N/A    N/A   N/A   N/A   N/A   N/A  
2216  node             0.0  00:23.18 15    1   62     2060M  0B     1993M  2214 2214 sleeping *0[1]      0.00000 0.04440    501 1139522+  631    5637+     262       251462+   15294+    90035+    78      236      0.0   568850    1395726   jerry                  N/A    N/A   N/A   N/A   N/A   N/A  
356   PAH_Extension    0.0  00:01.55 3     1   201    4776K  0B     2216K  356  1    sleeping  0[3990]   0.00000 0.00000    501 21279     323    27357     9208      31736     68694     31442     12      403      0.0   0         0         jerry                  N/A    N/A   N/A   N/A   N/A   N/A  
^C

 

如下内存使用情况为 public 下面删除了 1G 大小的 1.mp4 文件, node进程内存大约占用 600M

master:~ jerry$ ps -ef | grep node501   567   479   0  9:38AM ??         0:02.88 /usr/local/bin/node /Applications/WebStorm.app/Contents/plugins/JavaScriptLanguage/jsLanguageServicesImpl/js-language-service.js -id=1698543489067 -debug-name=eslint501   763   479   0  9:47AM ??         1:29.47 /usr/local/bin/node /Applications/WebStorm.app/Contents/plugins/JavaScriptLanguage/jsLanguageServicesImpl/js-language-service.js -id=1698544044780 -debug-name=VueService501  2415  2413   0  2:23PM ttys001    0:16.84 node /Users/jerry/WebstormProjects/mars3d_test/node_modules/.bin/vue-cli-service serve501  2421  1154   0  2:23PM ttys002    0:00.00 grep node
master:~ jerry$ top | grep 2415
2415  node             0.0  00:17.80 15    1   60+    609M+  0B     0B     2413 2413 sleeping *0[1+]     0.00000 0.00000    501 377257+   716+   713+      312+      215051+   2107+     48138+    15+     114     0.0   0      0      jerry              N/A    N/A   N/A   N/A   N/A   N/A  
453   Google Chrome He 0.0  00:02.46 10    1   96+    15M+   0B     13M+   440  440  sleeping *0[3+]     0.00000 0.00000    501 36591+    3119+  11540+    6777+     32415+    26062+    20643+    166+    2207    0.0   0      0      jerry              N/A    N/A   N/A   N/A   N/A   N/A  
2415  node             0.0  00:17.80 15    1   60     609M   0B     0B     2413 2413 sleeping *0[1]      0.00000 0.00688    501 377261+   716    716+      312       215055+   2114+     48140+    15      114      0.0   147728    622406    jerry              N/A    N/A   N/A   N/A   N/A   N/A  
2415  node             0.0  00:17.80 15    1   60     609M   0B     0B     2413 2413 sleeping *0[1]      0.00000 0.00000    501 377261    716    716       312       215057+   2114      48141+    15      115+     0.0   24469     176660    jerry              N/A    N/A   N/A   N/A   N/A   N/A  
2300  sandboxd         0.0  00:01.23 4     3   66     4320K  0B     1856K  2300 1    sleeping *0[1]      0.00000 0.00000    0   13745     170    4445      2096      21255+    5089      4211+     366     91+      0.0   29425     124158    root               N/A    N/A   N/A   N/A   N/A   N/A  

 

 

vue 项目什么时候暴露出去的 public 文件夹

在 Compiler 文件处理后期, 会将上下文采集的文件 提交给 node 维护的内存文件系统

d92afae367f44236a60bf9586d48a4fd.png

 

然后这里的 writeOut 中的相关处理, 会将 1.txt 中的内容写入到 内存文件系统

然后 后面 客户端这边读取 1.txt 就可以读取到对应的内容了, 比如 这里可以看到 buf.toString 为 1.txt 中的内容

8efb990dacde4d4a9385692e6a6038d8.png

 

 

Compiler.assets 中的 1.txt 是哪里来的呢?

Compiler.assets 中的 1.txt 是来自于 copy 的一个 plugin

然后他的 pattern 为 “/Users/jerry/WebstormProjects/mars3d_test/public”, 将项目路径下的 public 的所有的文件复制到 内存文件系统中的 “/Users/jerry/WebstormProjects/mars3d_test/dist” 下面

这里是 先暂存到了 Compiler.assets

88e00a12f33f4163a5dbf2f3c7fbc4b1.png

 

这个 copy 的 plugin 是来自于 vue-cli 中的 app.js 初始化的时候默认初始化的

另外这个 “public” 是 app.js 中固定死的, 因此 vue 项目中的 public 文件夹一定会被默认暴露出去

当然 这里还有其他的 plugin, 我们暂时不关心

192edddc8a5e4bb887eee7b6c9304dde.png

 

 

CopyWebpackPlugin 的使用

同样是基于和上面拷贝 public 目录相同的 CopyWebpackPlugin 来进行的文件拷贝

vue.config.js 中使用如下, 配置了需要拷贝多个目录到 内存文件系统 以暴露这部分文件作为 http 服务

2638c4a23d0a4dc28e9a195dd4f41035.png

 

拷贝的文件信息如下, 将 “node_modules/mars3d-cesium/Build/Cesium/” 下面的 “Workers”, “Assets”, “ThirdParty”, “Widgets” 文件夹分别拷贝到 “dist/mars3d-cesium” 的 “Workers”, “Assets”, “ThirdParty”, “Widgets” 

这样前端页面就可以通过 “http://localhost:8080/mars3d-cesium/” 来访问相关的服务了

36cb935a307c4fd7ba3773f9c4efd796.png

 

因此我们页面上 “/mars3d-cesium” 下面的这部分文件暴露为 http 服务就是这样访问到的

bc860cb4fd7f4c9a8afd69ff5e61c6af.png

 

 

 

 

 

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

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

相关文章

Vue2(九):尚硅谷TodoList案例(初级版):组件化编码流程的使用

一、组件化编码流程及资料 百度网盘 请输入提取码 提取码yyds (Vue全家桶资料) 组件化编码流程分为三步: 二、实现静态组件 1、分析结构 确定组件名称(Header,List,Item,Footer)和个数,还有嵌套关系(…

阿里云服务器租用一年多少钱?2024年最新阿里云租用价格

2024年阿里云服务器租用费用,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元,ECS u1服务器2核4G5M固定带宽199元一年,2核4G4M带宽轻量服务器一年165元12个月,2核4G服务…

2016年认证杯SPSSPRO杯数学建模D题(第一阶段)NBA是否有必要设立四分线解题全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 D题 NBA是否有必要设立四分线 原题再现 NBA 联盟从 1946 年成立到今天,一路上经历过无数次规则上的变迁。有顺应民意、皆大欢喜的,比如 1973 年在技术统计中增加了抢断和盖帽数据;有应运而生、力挽狂澜的&am…

Nacos介绍和Eureka的区别

Nacos(全称为 Alibaba Cloud Nacos,或简称为 Nacos)是一个开源的分布式服务发现和配置管理系统。它由阿里巴巴集团开发并开源,旨在帮助开发人员简化微服务架构下的服务注册、发现和配置管理。 1、Nacos 提供了以下主要功能&#…

WPF 立体Border

WPF 立体Border &#xff0c;用来划分各个功能区块 在资源文件中&#xff0c;添加如下样式代码&#xff1a; <Style x:Key"BaseBorder" TargetType"Border"><Setter Property"Background" Value"White" /><Setter Prop…

如何用java使用es

添加依赖 如何连接es客户端 RestHighLevelClient 代表是高级客户端 其中hostname&#xff1a;es的服务器地址&#xff0c;prot端口号 &#xff0c;scheme&#xff1a;http还是https 如果不在使用es可以进行关闭&#xff0c;可以防止浪费一些资源 java如何创建索引&#xff1…

养好蜘蛛池的方法有哪些?如何正确的养

目前国内大部分正规网络科技公司都没有自己的蜘蛛池&#xff0c;甚至不知道什么是蜘蛛池&#xff0c;更不知道它的作用。 蜘蛛池起源于灰色产业。 它的前身是基于泛站点群体中大量活跃的蜘蛛而诞生的。 为了达到快速收录、快速排名的效果&#xff0c;很多行业都会将网站域名地址…

hyper-v虚拟机使用宿主机usb设备

文章目录 一、修改宿主机组策略二、使用 一、修改宿主机组策略 在宿主电脑上&#xff0c;按 winr 组合键打开运行窗口&#xff0c;输入 gpedit.msc 打开组策略编辑器&#xff0c;依次点击计算机配置- 管理模板- Windows 组件- 远程桌面服务- 远程桌面会话客户端- RemoteFX USB…

5.域控服务器都要备份哪些资料?如何备份DNS服务器?如何备份DHCP服务器?如何备份组策略?如何备份服务器状态的备份?

&#xff08;2.1) NTD(域控数据库&#xff09;备份 &#xff08;2.2&#xff09;DNS备份 &#xff08;2.3&#xff09;DHCP备份 &#xff08;2.4&#xff09;组策略备份 &#xff08;2.5&#xff09;CA证书备份 &#xff08;2.6&#xff09;系统状态备份 &#xff08;2.1)…

如何使用ospf (enps) 简单实践ospf协议

1. OSPF的基本概念 OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;是一种广泛应用于TCP/IP网络中的内部网关协议&#xff08;Interior Gateway Protocol, IGP&#xff09;&#xff0c;主要用于在同一自治系统&#xff08;Autonomous Sys…

js工具方法记录

校验数字是否有效的11位手机号 function isValidPhoneNum(value: string) {return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(value) }手机号中间4位掩码 function maskPhoneNum(phone: string, space false) {if (!phone) {return }const reg /(\d{3})\d{4}(\d{4})/return pho…

人像抠图HumanSeg——基于大规模电话会议视频数据集的连接感知人像分割

前言 人像抠图将图像中的人物与背景进行像素级别的区分的技术。通过人像分割&#xff0c;可以实现诸如背景虚化、弹幕穿人等各种有趣的功能&#xff0c;为视频通话和影音观看提供更加优质和丰富的体验。由于广泛部署到Web、手机和边缘设备&#xff0c;肖像分割在兼顾分割精度的…

真机笔记(2)项目分析

目录 1. 项目&#xff1a; 2. 网络工程师工作流程 3. 实验 设备命名 登录密码 使用SSH协议 1. 项目&#xff1a; 竞标方&#xff1a;集成商、厂商、代理商、服务商、监理检测公司 在一个网络项目中&#xff0c;不同的角色承担着不同的职责和任务。以下是集成商、厂商、代…

Github多账号切换

在开发阶段&#xff0c;如果同时拥有多个开源代码托管平台的账户&#xff0c;在代码的管理上非常麻烦。那么&#xff0c;如果同一台机器上需要配置多个账户&#xff0c;怎样才能确保不冲突&#xff0c;不同账户独立下载独立提交呢&#xff1f; 我们以两个github账号进行演示 …

ChatGPT智能聊天系统源码v2.7.6全开源Vue前后端+后端PHP

测试环境:Linux系统CentOS7.6、宝塔、PHP7.4、MySQL5.6,根目录public,伪静态thinkPHP,开启ssl证书 具有文章改写、广告营销文案、编程助手、办公达人、知心好友、家庭助手、出行助手、社交平台内容、视频脚本创作、AI绘画、思维导图等功能 ai通道:文心一言、MiniMax、智…

【Linux C | 多线程编程】线程的退出

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

序列的使用

目录 序列的创建 序列的使 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在许多数据库之中都会存在有一种数据类型 — 自动增长列&#xff0c;它能够创建流水号。如果想在 Oracle 中实现这样的自动增长列&#xff0c;可…

Ubuntu安装GPU驱动

ubuntu-drivers autoinstall 中间提示nvidia 470 有戏啊 nvidia-smi

蓝桥杯第192题 等差数列 C++ Java Python

目录 题目 思路和解题方法 复杂度 空间 时间 c 代码 Java 版本&#xff08;仅供参考&#xff09; Python 版本&#xff08;仅供参考&#xff09; 题目 思路和解题方法 首先&#xff0c;输入n和数组a的值。对数组a进行排序。计算数组a中相邻元素之间的差的最大公约数&…

基于springboot的mysql实现读写分离

前言: 首先思考一个问题:在高并发的场景中,关于数据库都有哪些优化的手段&#xff1f;常用的有以下的实现方法:读写分离、加缓存、主从架构集群、分库分表等&#xff0c;在互联网应用中,大部分都是读多写少的场景,设置两个库,主库和读库,主库的职能是负责写,从库主要是负责读…