Electron-Vue 开发下 dev/prod/webpack server各种路径设置汇总

背景

在实际开发中,我发现团队对于这几个路径的设置上是纯靠猜的,通过一点点地尝试来找到可行的路径,这是不应该的,我们应该很清晰地了解这几个概念,以下通过截图和代码进行细节讲解。

npm run dev 下的路径如何处理?

  1. 我们要搞明白 npm run dev 在干什么?

    1. 这个过程使 webpack 启动了一个本地 http 服务,什么是 http 服务,就是你可以通过 url 的方式(http://loclahost:9080/xxxx) 来获取具体的资源文件,例如 http://localhost:9080/index.html 要获取 index.html 这个服务就会根据逻辑去提取 index.htm 数据并输出出去

    2. 上面的 index.html 是放在内存里面的,webpack 在 run dev 时,会先根据 webpack.xxxx.config.js 配置文件进行打包,但是这个打包结果并不放在硬盘上,而是放在内存里,最终也是要打包成 index.html + index.js(这个就是一堆源码打包的最终 js)

  1. webpack dev server 这个 http 服务会同时监听源码入口引入的其他模块代码,只要这些代码有改变,那么 webpack 就会重新打包 index.js

  1. 例如__static 路径是在 webpack.xxxxx.config.js 进行配置的

  1. 这里要记得渲染进程和主进程是两个独立进程,它们分别都有自己的 webpack.xxxx.config.js 文件,因此两者的__static 设置的可能并不相同

npm run build 时的路径

  1. npm run build 时是生产环境下的命令

  2. 生产会把代码都打包到 dist 路径下,后续运行的也不是 webpack dev server http 服务来启动,这时 index.html 下可以定义一些路径

  1. 因为渲染进程是以 src/index.ejs 作为 index.html 生成模板的,所以 index.ejs 最终打包的位置就是__dirname 的位置,如果你想找到 dist/electron/static 则是需要上翻 3 层,就到了 static,这样后续 index.js 使用全局_static 就能很方便地找到 static 路径了

  2. 如果你需要找 dist/ 的话,那需要上翻 4 层,以此类推

  1. 针对不同的渲染进程,你可以配置不同的模板,来定义自己的__static

webpack dev server 的 static 是啥?

  1. 这里的 static 并不是一个具体目录的名字,这是一个配置 key,这个 key 的意思是 dev server http 服务启动后,除了从打包根路径 dist/electron/renderer/pages/main/ 访问 index.html 和 index.js 文件外,当访问一张图片时,dev server 服务去哪里找呢?我们从下面的这个配置就知道是项目根目录下找,这里是个数组,你可以配置多个资源文件路径,也即意味着可以在多个目录下找资源文件

  2. 这里的意思是当你访问/static/imgs/logo.png,那就是从根目录下访问这个 logo.png,生产环境

  1. 下面就是__static 就是绝对路径, dev 环境下 http://localhost:9080/static/imgs/logo.png

  2. 对于 vue 文件中直接访问的图片 如 img src=“../../logo.png”,这个 webpack 并不处理,因为它不知道怎么处理,dev 环境下就是根据配置的资源文件路径下找,但是 prod 环境下,就靠你拷贝具体的资源文件夹到何时的路径了

  3. file-loader/url-loader 主要是处理哪些显式引入的,且能正确定位位置的资源文件,将其选择是否 base64 集成或者迁移到打包后的文件下的 imgs/* 下

preload.js 和 inject.js 文件的引入

  1. 你不能引用源码的入口文件 index.js,原因是源码的入口文件还没有打包呢,你引进这个源码 index.js 就是引入 index.js,不是把所有 index.js 引入的其他代码都引入了(没有任何机制在帮你做这件事)

    1. 你可以用 webpack dev server 起一个服务,来单独打包这个 js,然后对外输出,你就可以引入 localhost:9080/preload.js,这样是否支持热更,不得而知

  2. 因此,你必须直接引打包完成的 dist/electron/preload/web/whatsapp/preload.js 这个文件,这个文件是整合好的,引入就全引入了

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

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

相关文章

前端-处理数据的函数

判断数据是否为空,对象是否存在某属性,属性值是否为空,对大数据进行换算,对单位进行转换. 目录 1.格式化数据 2.判断值是否为空(包括对象、数组、字符串、数值类型) (1)值是0不表示空 (2)值是0表示空 3. 检查对象是否具有指定名…

基础入门-Web应用蜜罐系统堡垒机运维API内外接口第三方拓展架构部署影响

知识点: 1、基础入门-Web应用-蜜罐系统 2、基础入门-Web应用-堡垒机运维 3、基础入门-Web应用-内外API接口 4、基础入门-Web应用-第三方拓展架构 一、演示案例-Web-拓展应用-蜜罐-钓鱼诱使 蜜罐:https://hfish.net/ 测试系统:Ubuntu 20.04 …

Android运行低版本项目可能遇到的问题

Android运行低版本项目可能遇到的问题 低版本项目总是遇到各种问题的,耐心点 一、gradle-xxx.xxx.xxx.zip一直下载不下来 在gradle-wrapper.properties可以试下 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists zipStoreBaseGRADLE_USER_HOME …

springboot中Controller内文件上传到本地以及阿里云

上传文件的基本操作 <form action"/upload" method"post" enctype"multipart/form-data"> <h1>登录</h1> 姓名&#xff1a;<input type"text" name"username" required><br> 年龄&#xf…

智慧城市工程:相关学点、优势、未来发展

目录 相关学点&#xff1a; 智慧城市的优势 挑战与未来发展 智慧城市工程是利用现代信息技术和数据分析手段&#xff0c;提升城市管理和服务水平&#xff0c;实现城市运行的智能化、便捷化和高效化的一种新型城市发展模式。智慧城市通过整合物联网&#xff08;IoT&#xff0…

授权模型MAC

MAC&#xff08;Mandatory Access Control&#xff09;是一种授权模型&#xff0c;用于实现对系统资源访问的强制控制。在MAC模型中&#xff0c;授权是基于预先定义的安全策略&#xff0c;且该策略由系统管理员来配置和管理。 在MAC模型中&#xff0c;每个用户和每个资源都被赋…

看板工具助力餐饮与酒店行业实现数字化转型,提升管理与运营效率

在餐饮与酒店行业&#xff0c;服务质量和客户体验是衡量企业成功的关键因素。随着客户需求的不断多样化以及市场竞争的加剧&#xff0c;传统的管理模式逐渐难以满足高效运营的需求。尤其在高峰期&#xff0c;如何优化内部流程、提高服务效率和响应速度&#xff0c;成为了许多餐…

2024年CCF 非专业级软件能力认证CSP-J/S 第二轮( 提高组) 染色(color)

完整题目内容可前往下方链接&#xff1a; 染色&#xff08;color&#xff09;_C_嗨信奥-玩嗨信息奥林匹克竞赛-少儿编程题库学习中心https://www.hixinao.com/tiku/cpp/show-4118.html 若需更多真题&#xff0c;可前往题库中心查找&#xff0c;题库中心涵盖白名单赛事真题&am…

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码2.1 消息机制2.2 超时机制 3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.2.1 回退策略4.2.2 保持策略 4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 …

labelme标签批量转换数据集json_to_dataset

文章目录 labelme标签批量转换数据集json_to_dataset转换原理单张图片转换多张图片批量转换bat脚本循环法 标注图片提取标注图片转单通道 labelme标签批量转换数据集json_to_dataset 转自labelme批量制作数据集教程。 转换原理 在安装了labelme的虚拟环境中有一个labelme_js…

Apache Kylin最简单的解析、了解

官网&#xff1a;Overview | Apache Kylin 一、Apache Kylin是什么&#xff1f; 由中国团队研发具有浓厚的中国韵味&#xff0c;使用神兽麒麟&#xff08;kylin&#xff09;为名 的一个OLAP多维数据分析引擎:&#xff08;据官方给出的数据&#xff09; 亚秒级响应&#xff…

01云计算HCIA学习笔记

笔者今年7月底考取了华为云计算方向的HCIE认证&#xff0c;回顾从IA到IE的学习和项目实战&#xff0c;想整合和分享自己的学习历程&#xff0c;欢迎志同道合的朋友们一起讨论&#xff01; 第一章 云计算概述 ICT&#xff1a;ICT是世界电信协会在2001年的全球会议中提出的一个综…

php生成图片

前提 开启dg2库 去掉前面的;注释&#xff0c;有的可能会带.dll后缀影响不大 extensiongd2代码 <?php $file imagecreate(100,50); //先生成图片资源$color imagecolorallocate($file,255,255,255); //白色$c imagecolorallocate($file,0,100,255);imagefill($file,0…

免费GIS工具箱:轻松将glb文件转换成3DTiles文件

在GIS地理信息系统领域&#xff0c;GLB文件作为GLTF文件的二进制版本&#xff0c;主要用于3D模型数据的存储和展示。然而&#xff0c;GLB文件的使用频率相对较低&#xff0c;这是因为GIS系统主要处理的是地理空间数据&#xff0c;如地图、地形、地貌、植被、水系等&#xff0c;…

为何VisualRules更适合技术人员使用

什么是规则引擎 规则引擎是一种软件组件&#xff0c;它允许将业务规则从应用程序的核心代码中分离出来&#xff0c;以一种更加灵活、易于管理和维护的方式来定义、存储和执行这些规则。简单来说&#xff0c;它就像是一个专门处理规则的 “大脑”&#xff0c;可以根据预先设定的…

prometheus 搭建监控

prometheus 下载 prometheus-3.0.0.linux-amd64.tar.gztar -zxvf prometheus-3.0.0.linux-amd64.tar.gzmv prometheus-3.0.0.linux-amd64 prometheus-3vim /etc/systemd/system/prometheus.serviceprometheus.service [Unit] DescriptionPrometheus Wantsnetwork-online.t…

游戏何如防抓包

游戏抓包是指在游戏中&#xff0c;通过抓包工具捕获和分析游戏客户端与服务器之间传输的封包数据的过程。抓包工具可实现拦截、篡改、重发、丢弃游戏的上下行数据包&#xff0c;市面上常见的抓包工具有WPE、Fiddler和Charles Proxy等。 抓包工具有两种实现方式&#xff0c;一类…

RestTemplate实时接收Chunked编码传输的HTTP Response

学习调用AI接口的时候&#xff0c;流式响应都是使用的 Transfer-Encoding: chunked&#xff0c;图方便想用RestTemplate&#xff0c;但是平时用到的都是直接返回响应对象的类型。使用bing搜索到一种方式&#xff0c;使用下面的代码来读取&#xff0c;于是掉这个坑里了&#xff…

request.setAttribute()和session.setAttribute()的区别

request.setAttribute() 作用&#xff1a;request.setAttribute()是在一次请求内共享数据 解释&#xff1a;例如将一个数据保存request域中&#xff0c;然后请求转发至前端页面&#xff0c;则数据转发至前端页面后会被自动销毁。简单点说就是&#xff0c;数据只能用一次就不能…

Java中的Consumer接口应该如何使用(通俗易懂图解)

应用场景&#xff1a; 第一次程序员A写好了个基础的遍历方法&#xff1a; public class Demo1 {public static void main(String[] args) {//假设main方法为程序员B写的,此时需要去调用A写好的一个遍历方法//1.如果此时B突然发现想将字符串以小写的形式打印出来&#xff0c;则…