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 node
  501   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=eslint
  501   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=VueService
  501  2216  2214   0  2:07PM ttys001    0:23.18 node /Users/jerry/WebstormProjects/mars3d_test/node_modules/.bin/vue-cli-service serve
  501  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 node
  501   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=eslint
  501   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=VueService
  501  2415  2413   0  2:23PM ttys001    0:16.84 node /Users/jerry/WebstormProjects/mars3d_test/node_modules/.bin/vue-cli-service serve
  501  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

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫实战—探索某网站电影排名

文章目录 Python爬虫实战—探索某网站电影排名准备工作编写爬虫代码代码解析运行情况截图进一步优化和说明完整代码总结 说明:本案例以XXX网站为例,已隐去具体网站名称与地址。 Python爬虫实战—探索某网站电影排名 网络爬虫是一种自动化程序&#xff0…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十三)

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(十二) 下一篇: 待续 51、sqlite3_stmt_scanstatus_reset sqlite3_stmt_scanstatus_reset 函数用于重置指定语句对象最近一次执行的 WHER…

Vue3 Vite3 状态管理 pinia 基本使用、持久化、在路由守卫中的使用

参考https://juejin.cn/post/7152774411571953677,自己简洁化了一部分 1.安装pinia依赖 yarn add pinia 创建pini实例 根目录创建store文件夹,然后创建index.js import { createPinia } from piniaconst pinia createPinia()export default pinia …

2024年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中,敬请期待…

2024年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中,敬请期待… 武汉唯众智创科技有限公司 2024 年 3 月 联系人:辜渝傧13037102709 题号:试题04 ZZ052-大数据应用与服务赛选赛题04 模块一:平台搭建…

一文带你看懂 前后端之间图片的上传与回显

一文带你看懂 前后端之间图片的上传与回显 前言 看了很多类似的文章,发现很多文章,要不就是不对,要不就是代码写的不通俗易懂,所以有了这篇文章,我将会从原理到实战,带你了解 实战包含前端 原生 vue3 rea…

阿里云OCR文字识别-Python3接口

1.注册/登录阿里云账号 官网链接注册登录 2.选择阿里云OCR产品 选择产品 3.开通阿里云OCR产品 开通服务(每个月赠送200次,不用超就不额外收费) 4.进入调试页面,下载SDK示例 下载SDK模板 5.创建 AccessKey密钥 RAM传送门 创建…

外腔激光器(ECL)市场发展空间大 外腔半导体激光器(ECDL)是主要产品类型

外腔激光器(ECL)市场发展空间大 外腔半导体激光器(ECDL)是主要产品类型 外腔激光器(ECL),是一种利用外腔进行光反馈的激光器。根据新思界产业研究中心发布的《》2024-2029年中国外腔激光器&…

立体式学习灯最推荐哪款?书客、孩视宝、雷士等热销大路灯强势PK!

立体式学习灯是一款能够帮助长时间伏案工作以及学习人群的照明家电,正因为其优越的表现也受到了不少消费者的喜爱。作为一名电器博主,我也购入过不少立体式学习灯但时有买到一些光线不足、品质差的大路灯,呈现出来的光线不能提升照明条件,反而还会引起越…

LeetCode每日一题【19. 删除链表的倒数第 N 个结点】

思路:快慢指针 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x)…

瑞_Redis_商户查询缓存_什么是缓存

文章目录 项目介绍1 短信登录2 商户查询缓存2.1 什么是缓存2.1.1 缓存的应用场景2.1.2 为什么要使用缓存2.1.3 Web应用中缓存的作用2.1.4 Web应用中缓存的成本 附:缓存封装工具类 🙊 前言:本文章为瑞_系列专栏之《Redis》的实战篇的商户查询缓…

【数据库系统】数据库完整性和安全性

第六章 数据库完整性和安全性 基本内容 安全性;完整性;数据库恢复技术;SQL Server的数据恢复机制; 完整性 实体完整性、参照完整性、用户自定义完整性 安全性 身份验证权限控制事务日志,审计数据加密 数据库恢复 冗余…

Vue3 v-for绑定的dom获取ref为undefined

这是代码结构 <div class"playerInfo" v-for"(item, index) in data.playersInfo" :key"index" :ref"el > {if(el)playersRef[index] el}":style"left:${item.position[0]};top:${item.position[1]}"click"pla…

【ZooKeeper】2、安装

本文基于 Apache ZooKeeper Release 3.7.0 版本书写 作于 2022年3月6日 14:22:11 转载请声明 下载zookeeper安装包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz解压 tar -zxvf apache-zookeeper-3.7.0-b…

Transformer的前世今生 day06(Self-Attention和RNN、LSTM的区别

Self-Attention和RNN、LSTM的区别 RNN的缺点&#xff1a;无法做长序列&#xff0c;当输入很长时&#xff0c;最后面的输出很难参考前面的输入&#xff0c;即长序列会缺失上文信息&#xff0c;如下&#xff1a; 可能一段话超过50个字&#xff0c;输出效果就会很差了 LSTM通过忘…

什么是行业垂直类媒体?有哪些?怎么邀约

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体胡老师。 行业垂直类媒体是聚焦于特定行业或领域的媒体平台。 行业垂直类媒体不同于主流媒体&#xff0c;它们专注于提供与某个特定领域相关的深入内容和服务&#xff0c;例如商业新闻、旅游、数字…

什么快递可以寄摩托车?看你要啥样的了

一辆49cc的二冲程摩托车仅需561元。 购买125的组装车不会超过1元&#xff0c;购买250品牌发动机的组装车不会超过4000元。 购买一辆名牌摩托车大约需要4000到10000元。 花一万到两百万多就能买到一辆像样、动力强劲、能玩的炫酷摩托车。 哈哈&#xff0c;就看你想要什么了&…

力扣---随机链表的复制

给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

关于5.x版本的Neo4j与py2neo的访问技巧

先说结果。 Neo4j是可以使用py2neo来操作的。而且网上搜到的教程和方法里&#xff0c;首推的http连接方法可能并不是最好的&#xff0c;应该用 bolt 方法可能更好。 对于大多数使用 py2neo 与 Neo4j 数据库进行交互的应用程序来说&#xff0c;建议使用 Bolt 协议&#xff08;即…

操作系统实践之路——五、初始化(2.Linux初始化)

文章目录 一、全局流程二、从BIOS到GRUB三、GRUB是如何启动的四、详解vmlinuz文件结构五、流程梳理-1六、内核初始化从_start开始七、流程梳理-2参考资料 前言 ​ 本章节将讨论一下Linux如何去做初始化。 一、全局流程 ​ 在机器加电后&#xff0c;BIOS 会进行自检&#xff…

Wi-Fi 7:下一代无线网络的革命性技术与特点解析

更多精彩内容在 随着无线通信的不断发展&#xff0c;Wi-Fi技术作为无线网络连接的重要组成部分&#xff0c;也在不断演进。Wi-Fi 7作为下一代无线网络标准&#xff0c;被认为将带来革命性的变化&#xff0c;提供更快速、更可靠的网络连接。本文将深入解析Wi-Fi 7的技术和特点&a…