从给Vite2官⽅提了⼀个issues并已被认可为Bug,我学到了什么?
缘起
我打算使⽤⾃⼰搭建的V3项⽬脚⼿架parcel-vue-app搞⼀搞项⽬,毕竟是刚出来,很多东西都不完善,只能⾃⼰不断尝试。于是,使
⽤parcel-vue-cli开始初始化项⽬(如果有⼩伙伴对parcel-vue-app感兴趣的,⽂末有源码地址)。大一学期个人总结
…项⽬搭建完毕
启动地址是localhost:3000/,⼀顿操作之后,页⾯也能很快地更新数据。不得不觉得Parcel在这⽅⾯做得还是很不错的。于是这时,想到了尤⼤⼤开发的Vite,决定⽐较⼀下。于是进⼊vite官⽅⽹站,下载了vite@2.3.0,选择的是vue模板。这时,根据提⽰进⼊项⽬⽬录,然后运⾏yarn dev命令启动项⽬。⼀眨眼的功夫就启动起来,不得不说太厉害了。这时,我看到了这⾏绿字localhost:3000/,什么?给我第⼀感觉是vite难道没有占⽤端⼝号检测机制,不会吧!不敢相信的我开始找vite官⽹的配置。我在fig.js⽂件中添加了这⼏⾏代码。
import{ defineConfig }from'vite';
import vue from'@vitejs/plugin-vue';
// vitejs.dev/config/
export default defineConfig({
plugins:[vue()],
rver:{
port:3000,
strictPort:true,
},
});
我指定服务器端⼝。官⽅也说了如果端⼝已经被使⽤,Vite 会⾃动尝试下⼀个可⽤的端⼝。另外我还不放⼼strictPort设为true,这样若端⼝已被占⽤则会直接退出,⽽不是尝试下⼀个可⽤端⼝。这应该好了吧!于是,我关闭vite项⽬,重启了下,我看到了下⾯这幅图。
于是,我还是不死⼼,我先关闭parcel项⽬,⼜关闭了vite项⽬。
决定从头开始,⾸先我打开了之前创建的的vite项⽬。之前vite项⽬的版本是2.0.4,我⼼想版本不⼀样应该不会有事,于是我⼜兴致勃勃地启动了vite@2.0.4项⽬,端⼝号是3000,接着我⼜启动了vite@2.3.0项⽬(实际是2.3.1,package.json与node_modules版本不⼀致,这⾥暂且忽略),接着就发⽣了下⾯这种事。
当时的感觉就是,这种事怎么让我遇到了。我还是不死⼼,我试试VueCLI跟Vite对⽐⼀下。
Vite项⽬这⾥使⽤的是vite@2.3.0,结果发现,vite可以检测到,并且成功阻⽌了。
接着,我⼜创建了⼀个vite@2.3.0项⽬,打算看下相同版本的项⽬会不会出现这种情况。
然后,我⼜启动了⼀个vite@2.0.5的项⽬,发现并不是我们预想到的3002端⼝,还是3000端⼝。于是我觉得⼊坑了~,这⾥可能是之前vite 遗留的bug,现在的新版本解决了。
解决完⼀个疑惑,但是最初那个疑惑还没有解决。就是启动parcel2项⽬,vite项⽬(vite@2.3.0)检测不到parcel2已占⽤端⼝。于是,就去github上提了⼀个issues。烤箱烤牛排的做法
包包搭配缘落
提了⼀个issues,回复⾮常快,并且已确认Bug。给vite团队点赞!
以下是回复内容:
回复1:
Looks like parcel is listening to all address (as --host : . Vite 2.3 switched the default to listen only to 127.0.0.1, so there isn’t an error when listening to it in the same port.
If you u --host or --host :: in vite, you will get the same behavior as with 2.2 and it will fail as you expect. You could also t parcel to listen to --host 127.0.0.1 and also get a hard error.
I don’t know if there is something that should be fixed in Vite regarding this. Other tools like sirv-cli also work in the
same way, and will not recognize that 3000 is being ud in this ca.大改驾
翻译为:
看起来parcel2正在侦听所有地址(如–host::)。 Vite 2.3将默认设置切换为仅侦听127.0.0.1,因此在同⼀端⼝中侦听它时没有错误。如果在vite中使⽤–host或–host ::,将获得与2.2相同的⾏为,并且将按预期失败。 您还可以将parcel2设置为侦听–host 127.0.0.1,并且还会收到硬错误。
我不知道Vite是否应该对此进⾏修复。 诸如sirv-cli之类的其他⼯具也以相同的⽅式⼯作,在这种情况下将⽆法识别使⽤了3000。
回复2:
屠戳
related to the port-reu issue of node.
@maomincoding you can specified rver.host to ‘::’ as a temporay workaround.综合综合>中国人体摄影艺术
Since 1e604d5b60900098f201f90394445fea55642e74, httpServer will listen to a specified default host caud this issue.
翻译为:
涉及到节点的端⼝重⽤问题。
@maomincoding可以将rver.host指定为“::”作为临时解决⽅法。
千金难买心头好
由于1e604d5b60900098f201f90394445fea55642e74,httpServer将侦听导致此问题的指定默认主机。
有了以上两个回复,我暂且在parcel项⽬中使⽤--host 127.0.0.1解决了问题。
并且,我⼜对parcel-vue-app进⾏了更新,最新版本v1.0.6。也谢谢有了这次经历,让⾃⼰的⼯具越来越好。其实,不光以上两个回复,还有第三个回复。
回复3