vite 动态 import 引入打包报错解决方案

vite 动态 import 引入打包报错解决方案,第1张

之前一直是使用 webpack 构建项目, 但是那种随着项目越来越大 运行、打包、热更新缓慢 带来的无奈。。。

新项目开发果断使用了 vite20 , 和 webpack 对比起来, 其他的优点不是很直观,但在 运行、打包、热更新 方面简直倍数差距, 只能说我觉得 vite20 很舒服。

当然 vite 作为热门构建共建优点还是很多的,详情可以去官网看看 vite 官网地址

之前使用 webpack 构建项目一直使用动态导入 requirecontext API 自动化注册组件及路由;

转移到 vite 之后,开发习惯当然不能变;随即使用的是 importmetaglobEager 完成动态导入;

本地开发过程中很舒服没问题,打包后部署到服务器报错找不到动态导入的文件;裂开~~~

经过这几天陆陆续续的尝试最终解决,总结了以下几种方案

主要项目结构

文件内部

组件内部通过定义

vite 动态导入有两种方式

以下方案有需要自行取舍

使用 importmetaglob

缺点:

但是你可以用单独文件夹来区分,我认为限制性太大不够优雅;

使用 routerts

使用 importmetaglob 和 importmetaglobEager

使用 routerts (路由注册)

使用 maints (组件注册)

使用 importmetaglob 的 then 方法, 加上路由内置 addRoute() 方法注册

缺点:

使用 routerts

是的。

3dm游戏有热更新,服务器不关闭的情况下无需更新,越过乐乐苹果app store,所以苹果公司下架了。

开发者采取热更新绕过苹果系统,在苹果看来有安全风险。

在线更新,更新过程中可以正常进行游戏,不用停机。不停机更新一般都都是进行比较小规模的更新·,大规模的(比如版本的更迭)都是要停机更新。

停机维护的根本意义在于让服务器休息一下处理一下数据或者更新系统新文件和内容。

服务器就像一起玩局域网游戏一样,也是一台电脑,但能力很大,配置很高,开久了会影响运行程序速度。

在停机维护之前,服务商一般会发布公告、提示停机维护的时间段,以提醒用户做好相应准备。

停机维护期间用户无法使用服务商所提供的服务,停机维护经常会在公告的时间段之前进行完毕。

不仅仅是网游需要进行停机维护,一些大型的系统有时也要进行停机维护,以维持系统的正常运行。

扩展资料

不停机更新技术:

事实上,大多游戏服务器分为逻辑程序服务器和数据库服务器,如果是线上运营的服务器,基本上是在至少两台主机上。

在发现几个逻辑服务器中的bug,或者加了某些功能,比如少加了三个金币,多算了一点经验等,只需要在测试服测试完毕,上传覆盖执行文件(jar或php),但是依然要重启逻辑服务器进程。

而Erlang的热升级技术,就带了更好的体验。Erlang原本脱胎于电信行业,Jow Armstrong 在描述Erlang的设计要求时期中就提到了“软件维护应该能在不停止系统的情况下进行”。

在实践中,因为这种不停服务的热更新获益良多,终于不用再等到半夜没人的时候再做更新了,对于一些紧急的bug修复,热更新实在是一把利器。

Erlang热更新的秘密其实都集中在code模块、code模块是Erlang Code Server暴露出来的对外接口,其职责就是把已经编译好的模块加载到Erlang的运行时环境。

代码版本有两个概念,当前版本代码“current”和老版本代码“old”,一旦模块被加载就变成“current”,再有一个版本过来被加载,之前的版本就变成“old”,新加载的变成“current”。

这时候,两个版本还是同时存在,新的请求执行的时候会使用新的版本,而老版本的代码还会被使用因为还有其他模块的调用“old”版本中。

再进行一次热更新,这时就有第三个实例被加载,code server就会终止掉还在驻留在“old”版本代码依赖的进程。然后第三个实例成为“current”,之前版本的“current”被标记成“old”。

这种方法有效降低了因版本升级而导致的用户流失。

-停机维护

英雄联盟-12月4日不停机版本更新公告

作为一个多年游戏服务端开发者,我来回答一下这个问题。只要你仔细去招聘网站看,会发现游戏招java的非常少(我希望杠精不要抬杠,我说的少,而且非常少,并不是说没有)。那么为什么在其他领域的霸主在游戏行业连喝口汤的资格都没有呢?其实主要有两个原因,而且这两个原因都和程序员最关心的效率有关系,一个是开发效率,一个是运行效率。很遗憾的作为一个不上不下的java两个都占不了。

首先是开发效率,在几年前手机游戏开始火爆,游戏公司多,产品相似度高,那么如何能以最快的速度开发完游戏并且上线运营,在快速迭代中试错,降低开发周期就是减少开发成本。在这种环境下,很多脚本语言成了首选,比如nodejs、php甚至还有lua和python(这里多说一句,别看lua语言本身简单,其实lua在游戏领域的使用成本是非常高的,至少在这四种脚本语言中是最高的,因为他只是一个胶水语言,要依附于c/c++,作为游戏周边的库都要自己造轮子或找轮子,同时对于引擎部分来说,对核心开发人员要求也非常高,如果公司没有经验丰富的c/c++程序员,lua基本玩不转)。在这些脚本语言面前,java毫无优势。nodejs开箱即用,用js可以前后端一起写(html5的流行让这种情况更是越来越多)。而php上手容易,开发简单,而且像一些用http的弱交互游戏,热更新简直不要太爽,无感知修bug。一些简单的休闲游戏,用这些脚本语言完全可以很快速的完成,就拿之前比较火的刀塔传奇来说,用这些脚本语言一点压力都没有,还有特别是棋牌类游戏,脚本语言更是首选。

其次再来说说运行效率,在一些密集型计算的游戏中,c++是首选,一些大型游戏,对计算要求很高,业务逻辑复杂的情况下,提升效率就能多容纳在线人数,也是成本的减少。同时对内存要求也高,使用c++可以数着内存写代码(手法过于夸张[捂脸]),对象啥时候申请,啥时候释放都是程序员说了算,gc消耗不存在的。而java生成的都是字节码,代码执行都要经过jvm来跑,这中间的消耗对于那些对性能要求苛刻的程序来说,绝对不能接受。

综合以上两点,java处于运行效率和开发效率中间的语言,在游戏这个行业自然是不会受到青睐。

做游戏引擎,当然还是看性能啦,c的性能最好。java性能其实也很好了,看谁出个简单快速的框架呗

JAVA可以做游戏服务端的开发,也就是网络游戏的开发,网络游戏的实时性高,对高并发,数据的一致性处理要求较高,并且因为是自身JVM的垃圾回收机制对服务器的内核性能要求高,会占用一定的资源去处理这部分数据,游戏的实时性代表了大量数据会经常被更改替换。

JAVA不是不能做,而是对开发人员的能力要求高!如果能够充分利用JAVA的并发优势,那是可以做到的,并且这已经被有些小公司当做网络游戏服务端的开发语言了。

PC端,移动端的单机游戏就不用再考虑JAVA了,显然JAVA的2D3D处理效果没有一些主流的游戏开发语言好!语言具有其使用场景,抓住其优点去利用之,而不是拿它的缺点如何别的语言优点相比!如今JAVA是做服务端开发的不二人选,因为他的帝国大厦已经很完善,开发人员也多!

因为java中间多出来一个jvm,效率低,游戏实时性很重要。

看一个语言适合开发什么,主要有三点

1效率问题,包括开发效率和执行效率。

2生态圈,有人家提供好的成套解决方案,为什么不用呢?

3产品的侧重点。

就拿java和c++来说,java主要用于web开发,但是c++通过cgi也可以写web,而且c++的执行效率甩java几条街,但是为什么不用c++写web呢,因为c++的开发web的效率太低,而java有各种web方面的框架,开发效率高。

如果产品是游戏,游戏实时性很重要,你玩个游戏反应慢半拍那肯定很恼火。游戏这个产品的实时性就注定了要采用高效率的语言开发,那c,c++自然就跑不掉了。

Java何来不适合游戏开发一说的呢?

毕竟游戏有分类,而且游戏也分客户端,服务端

很多游戏的服务端就是Java的

而且实时性要求不高的游戏客户端,也可以用Java开发,例如我的世界

我想题主想问为什么3A大作没有用Java开发的吧

这其实是一个路径绑定问题,目前大作基本上都是用游戏引擎做的,而且这些游戏引擎都是发展多年的,如果用Java做,可能要用没经过业内验证的新东西,大公司不想冒险,还有Java的垃圾回收机制本身也是个难点,不适合做实时性非常强的游戏。

java开发游戏性能和效率差,开发一些小游戏还可以,java面向对象,所有方法都是封装在类里的,要调用方法就得实例类,而游戏主要侧重的是逻辑

对象就像是很多功能的机器,但是我的游戏逻辑只要每台机器的其中一个功能,但要用的话必须把这一整台机器制造出来。这就是面向对象的缺陷吧

而c是面向过程的可以更加灵活地设计过程逻辑,少去很多多余东西,大大提高性能

java的长处就是利用各种现存的类包,达到复用的效果,大大提高开发效率,

当然java也可以只针对逻辑来设计类,但那不是java的长处,没有多大的意义

百度搜索圈T社区()免费视频教程

如果你问我java适合开发游戏吗?我回答肯定是适合的,java开发效率高,运行效率一般,需要运行效率的地方用c或者cxx写就好了,现在市面大多数游戏都不是单一编程语言开发的,不需要在语言方面纠结太久。

很多人说,运行效率也很重要,但实际上,一般逻辑,你是感受不出差异的,普通逻辑使用java或者c#,或者脚本语言等这种开发效率,调试效率高的语言会让你开发更舒服。特别是脚本语言。

c和cxx只在特别需要效率的地方才使用。

哈_,这里子期!java开发游戏性能和效率差,开发一些小游戏还可以,远标老师讲过java面向对象,所有方法都是封装在类里的,要调用方法就得实例类,而游戏主要侧重的是逻辑

对象就像是很多功能的机器,但是我的游戏逻辑只要每台机器的其中一个功能,但要用的话必须把这一整台机器制造出来。这就是面向对象的缺陷吧

而c是面向过程的可以更加灵活地设计过程逻辑,少去很多多余东西,大大提高性能

java的长处就是利用各种现存的类包,达到复用的效果,大大提高开发效率,

当然java也可以只针对逻辑来设计类,但那不是java的长处,没有多大的意义

HP服务器上内存保护技术

ML370G3,DL380G3:通过选配内存实现在线备份。系统将内存分为3组,分别为系统主内存,扩展内存,备用内存(容量 大于或等于主内存),当检测到主内存发生错误时,系统自动将主内存存储的数据复制到备用内存,并且停止使用主 内存,而不影响系统和程序的正常运行,并通过管理软件向系统管理员发出警报,直到出错内存更换。

ML530G2,ML570G2,ML580G2:通过选配内存实现在线备份,支持内存镜像功能。内存镜像相当于磁盘上应用的RAID-1, 是将两组或四组内存互相做镜像,当一组内存出错,另外一组马上接替工作。使用镜像技术时,实际使用容量为安装 内存容量的一半。需要在内存专用工具里开启镜像功能。 DL740,DL760G2:支持热插拔RAID内存技术。内存RAID技术与磁盘上应用的RAID技术是一样,通过做RAID,设置RAID级 别,达到不同的容错要求,而且可以热插拔,满足了特殊行业不宕机,高容错的要求。

当然可以了,脚本都不需要重新启动的。但是要刷新页面,清理浏览器缓存。

1、实现原理

使用代理的方式让所有类和实例能够在js文件更改后, 对被代理对象进行替换, 实现热更新

2、作用

使用这个模块引入的js文件, 在修改后不需要重启服务器, 可以达到下列效果:

1)requirecache更新了, 新的require使用新的js

2)原来旧的类对应的实例也更新了 具体就是: 绑定在prototype下的函数, 绑定在类上的函数等也更新了, 旧实例调用的是新的代码

3、注意

1)因为代理会消耗一定资源, 所以建议只在逻辑js上使用

2)目前建议开发环境中用, 因为还在完善

4、安装

npm install hot-require

5、引入

// app启动时候引入这个模块, 引入一次即可

require('hot-require');

6、示例

// 需要热更新js, 用下面方式代替原有的require函数

var yourJs = _require(__dirname, '[your js path]');

服务器维护分成两种,紧急维护和日常维护。

1、紧急维护

紧急维护一般就是硬件故障或者严重Bug。这个时候是各个团队最紧张的时候。每个团队都忙个不停。

运营团队会发布公告,安慰玩家,统计损失,编写故障报告,评定故障等级等等

策划团队可能会考虑Bug的影响程度,决定要不要回档,或者赔偿什么,赔偿会不会影响经济系统等等。

程序团队最重要的是缩小Bug的影响,比如热更新屏蔽玩法,然后解决Bug。有时候硬件故障会导致整个服务器某些结点负载不均衡,或者万一数据库服务器挂了就得赶紧切数据库。

QC团队会继续测试一下,包括改好的版本,QC老大一般有一票否决权决定某个版本是不是放。

SA团队会有人值班紧跟,如果硬件问题就联系IT去换啊之类的。

2、日常维护

日常维护就流程化多了

运营团队会提前放出更新内容,做好新玩法预热

策划会最后在内服上跑一跑玩法看看有没有问题,然后等着正式开服以后去论坛看玩家反应

程序一般就是更新代码,部署到服务器内部测试,如果架构有改动,就和SA配合一起跑脚本改架构。同时,另一拨人会跑一堆脚本,包括和计费的对账脚本,导数据的脚本,更新各种榜单的脚本,预热数据库和cache的脚本等等。每个人也会对自己的模块再测试一遍,然后会盯着各种警报

QC团队也会在服务器上面把本周新玩法和主流程再测试一遍。

其他支持团队就是日常配合工作。

另外看到很多答案都说重启服务器,其实我想说,我们真的很少重启服务器的。每次重启代价都很大。除非硬件更新或者特殊情况是不会重启服务器的。

其实一般意义上讲服务器重启可以理解为两种,一种是硬件重启,一种是服务器进程重启。硬件重启比较少,服务器进程重启基本上是必须的。

很多人问为什么硬件重启代价很大。感觉大家的回答。我直接把评论补充上来。

如果是自动启动的程序的话没有问题,但是服务器很多系统配置和软件设置都要开机后重新折腾,同时,还要和其他的服务器通信,恢复到启动前的状态,或者从其他服务器同步信息,正确处理关机期间的各种操作,事情多,任务重,出错概率大,都不愿意重启吧。

还有人提问为什么维护了这么长时间。我想说,请去客服专区或者论坛发帖,会有一大波运营人员过来安抚你的。

还有人抱怨一个礼拜维护两次这种。我想说EVE这种神作是每天早上维护一次呢。维护也是为了大家能更好地游戏啊。(吐槽一下谁让EVE用的是Windows服务器呢。)

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » vite 动态 import 引入打包报错解决方案

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情