Vite React Route URL含有.时,路径无法正常匹配

今天遇到一个奇怪的问题,react-router的路径匹配无法正常工作,反而向vite的dev server发送了GET请求,这个请求报错404。页面直接无法访问。 按理说这种前端路由的框架应该不需要向后段发送请求的。 后来我怀疑是不是代理的问题,但是只是部分页面无法访问,所以排出这个选项。 随后我的系统又收到一条测试数据,这条测试数据却能够正常跳转。 我仔细的对别了两个不同的url,发现有问题的那个url包含了一个英文字符., 所以我怀疑是react-router的路径匹配有问题。 /call/2023-11-09/nlLBs32pp.2oXhnY6xzmYBCnjhYUkc7Z /call/2023-11-09/fYqZKTGHBFVCz4iC5irulFc83giH9bsa 我的第一反应是react-router对于动态的路径,是有字符要求的。翻阅官方文档后,没有发现类似的描述。 然后我在react-router的issue列表上查找有没有人提出类似的问题,发现了 [Bug]: paths with dynamic parameters do not work correctly when there is a dot in the url, 紧接着有人分析,说这个问题并不是react-router上的,而是出在vite上。 vite的项目上也有对应的issue反应这个问题。 解决方案 方案1: 升级vite 到5.x, 由于当前稳定的还是4.x的vite, 所以这个方案改动太大,放弃 方案2: 在匹配路径最后加上/, 也就是原本的/a.b要改成/a.b/, 我试了这个方案,是有效的。 方案3: 使用这个专门用来解决这个问题的插件, https://github.com/ivesia/vite-plugin-rewrite-all 深入分析 路径带有点,一般可能认为是一个静态资源,例如a.js, b.css之类的,所以vite会把符合这个模式的路径直接向后段发送请求,去获取静态资源,而不是去匹配一个组件。 参考 https://github.com/remix-run/react-router/issues/8389 https://github.com/vitejs/vite/issues/2415 https://github.com/vitejs/vite/issues/11282 https://github.com/vitejs/vite/issues/2628 https://github.com/vitejs/vite/pull/2191/files https://github.com/bripkens/connect-history-api-fallback

2023-11-09 20:49:44 · 1 min · Eddie Wang

如何选择,汉王Clear7与文石Leaf3

购买选择 我的kindle pw4已经用了快三年了,机器性能有些不足,电池也有些不够用了。正逢双十一之际,我觉得可以买一个开放系统的电纸书来用用。 买开放系统的另一个原因是自从亚马逊退出中国后,我用微信读书比较多,也买了微信读书的会员。 开放系统基本上都是基于安卓系统定制的,可以选择的厂商比较多。 最终筛选下来,我选择了汉王clear7和文石leaf3, 我下单了两个,觉得先体验一下,然后在退一个。 然而用了不到两天之后,我还是决定把两个机器都给退了,继续用我的kindle pw4。 选择因素 就我个人而言,电子书最为重要的选择因素有以下三点。 显示效果: 说实在的,现在的电子书基本上都是carta1200、300ppi、冷暖光。基本上从显示效果上来说,各大厂家都是半斤八两。就我自己体验而言,我并没有发现汉王的显示效果和文石leaf3有何不同。 握持手感: 外观影响握持手感,外观一般分为两类,一类是就是平板设计,像kindle paperwhite系列。另一类就是书脊式设计,握持更舒适,像kindle os3, 汉王clear7之类的。 简洁系统: 电子书并不是手机,不需要太多的功能,功能太多反而成为累赘 稳定性: 点子产品难免被摔、或者淋水,对于这些意外情况,如果产品非常脆弱,那么很大可能会损失大笔的金额。 续航 文石的缺点 文石和汉王的两款产品,拿到手开机不到一小时,我就决定先退了文石。 原因有以下几点 显示效果文石和汉王差不多,没啥突出亮点 握持手感文石肯定比不过汉王的书脊式设计, 并且汉王更轻 文石的系统太复杂,设置太多,甚至还有个iphone类似的小白点设计,小白点点击之后展开很多图标,每个图标我都不知道做什么的 掉电速度,文石的电量肉眼可见的在不断减少 汉王的缺点 微信读书功能阉割, 这不是汉王的问题,而是微信读书自身的问题。例如书架页面,书籍只有一个排序的顺序,就是按照最近阅读的排序。而无法像ios或者安卓app一样能够按照阅读进度排序,另外也没有阅读时长分析的功能。 另外我也注意到,微信读书电纸书版,扫码登录的有效期是24小时,我不知道这是不是意味着24小时之后我又要重新扫码。 触感光滑,汉王的背板的触感让人感觉非常光滑,感觉稍不注意就会滑下去的样子。完全没有kindle pw4那种拿在手机,就粘在手上的感觉。所以我觉得,买汉王,就必须要买一个保护套,但是官方卖的保护套也太贵了吧,居然要110多块,这点有点像割韭菜。什么保护套能卖那么贵,都快赶上十分之一的电纸书的价格了。 词典缺陷,汉王的词典也是我要吐槽的功能之一,只能把单词的原型加入到单词本,单词来个复数或者过去分词,就不能加入单词本了。kindle的生词本,所有单词,无论什么形式都能加入单词本。 掉电速度, 从昨晚五点多开机,到今天早上,基本上没到一天,电池已经掉电接近40%了 自动关机, 为了省电,汉王在2小时不使用后,会自动关机。然而这个开机时间就有点久,你可设想一下,每天早上,你想看书的时候,你都要等几十秒的开机时间,那你能受得了吗? 按钮反馈,松松垮垮, 触感没有一致性体验 结论 目前而言,国产的电纸书系统,除了开放的系统之外,其他各个方面还是存在与kindle有较大的差距。 当然,如果你从未使用过kindle系列的产品,国产的电纸书还是值得买的。

2023-11-06 09:30:34 · 1 min · Eddie Wang

没有免费的Obsidian

我看过很多介绍obsidian的文章,除了外观漂亮,功能强大,最为着重前调的就是个人用户免费了。 对于个人用户,真的免费吗? 还是说人家并不是免费,只是我们在白嫖罢了。 我们看看官网关于商业付费的详细解释: Obsidian 对于个人是免费的。但是,对于那些拥有两名及以上员工的公司或组织,以商业目的使用 Obsidian 的话,则需要购买商用许可证。所谓商业目的,指的是任何与工作相关的活动,比如记录会议内容、项目笔记,或是创建组织 Wiki 等。与这些活动相关的笔记记录、文档管理、知识管理等都可以视为以商用目的使用 Obsidian。 –参考商用许可证 所以,大部分人,包括我都是听话一半,只看前面,不看后面的但是。 对于大部分上班族来说,如果你再用obsidian,我不太相信你从来没有在obsidian里记录一些工作内容。 对我个人来说,虽然我的有几百条笔记和工作无关。但是也免不了有一些是和工作有关的的。比如对于某个线上问题的分析,比如记录了一些工作账号信息等等。 在关于商业付费的例子上,官方还举出了贴心的给出了栗子。 问题5:我使用 Obsidian 储存所有的知识,无论是个人的还是工作/专业相关的(因为太难区分),我需要购买商用许可证吗? 回答:如果你的笔记中有内容直接与公司项目相关,并且该公司拥有两名及以上员工,那么你需要购买商用许可证。 综上所述,即使是个人使用,免费的条件也是极为苛刻的。 你的笔记不能包含任何商业目的的信息 你可以包含商业目的的信息,但前提是你的公司只有你一个人 假如你是个用Obisian的上班族,我觉得极大的可能你并不符合免费用户的条件。 或者有一天,当你大学毕业了,进入工作环境,你如果还继续用之前的仓库,那你也不再符合免费用户的条件。 所以说,不要再逢人就说Obsidian是免费的了。 Obsidian并不免费,只是我们大部分人都在白嫖罢了。 我也并不是不愿意花钱,如果要付钱的话,我更想买typeora。 因为typeora是买断机制,一次性付费89元,终身包用,免费升级,最多可以再三台设备上使用 Obsidian是订阅机制,每年商业使用要50美元,也就是将近400人民币。

2023-10-25 16:39:10 · 1 min · Eddie Wang

MacBook icloud 同步卡死, 请尝试重启电脑

环境说明 MacBook Pro M2 系统版本 13.4.1 网络环境为wifi 操作步骤 我往icloud的文件夹下,粘贴几个文件夹,文件的内容挺多的,然后finder上显示icloud的状态就一直是处于同步中了。 等了好久,同步的过程似乎卡住了。 网上看了一些解决方案,似乎都没啥作用。 我想起来以前的同样的一次卡顿同步的解决方案:重启电脑 于是,我重启了一次电脑,再次开机,打开finder, icloud文件状态非常快同步完了。

2023-08-20 13:07:40 · 1 min · Eddie Wang

安装NodeJS, N命令似乎卡住了

我一般会紧跟着NodeJS官网的最新版,来更新本地的NodeJS版本。 我的系统是ubuntu 20.4, 我用tj/n这个工具来更新Node。 但是这一次,这个命令似乎卡住了。 我排查后发现,是n这个命令在访问https://nodejs.org/dist/index.tab这个地址时,卡住了。 请求超时,因为默认没有设置超时时长,所以等待了很久才显示超时的报错,表现象上看起来就是卡住了。 首先我用dig命令查了nodejs.org的dns解析,我发现是正常解析的。 然后我又用curl对nodejs官网做了一个测试,发现也是请求超时。 curl -i -m 5 https://nodejs.org curl: (28) Failed to connect to nodejs.org port 443 after 3854 ms: 连接超时 这样问题就清楚了,然后我就想起来npmirrror上应该有nodejs的镜像。 在查看n这个工具的文档时,我也发现,它是支持设置mirror的。 其中给的例子用的就是淘宝NPM 就是设置了一个环境变量。然后执行source ~/.zshrc export N_NODE_MIRROR=https://npmmirror.com/mirrors/node 但是,我发现在命令行里用echo可以打印N_NODE_MIRROR这个变量的值,但是在安装脚本里,还是无法获取设置的这个mirror。 我想或许和我在执行sudo n lts时的sudo有关,这个.zshrc在sudo这种管理员模式下是不生效的。普通用户的环境变量也不会继承到sudo执行的环境变量里 最后,我用sudo -E n lts, 成功的从npmmirror上更新了nodejs的版本。 关于curl超时的这个问题,我也给n仓库提出了pull request, https://github.com/tj/n/pull/771

2023-07-09 14:20:45 · 1 min · Eddie Wang

JS运行时构建独立二进制程序比较

很早以前,要运行js,则必须安装nodejs,且没什么办法可以把js直接构建成一个可执行的文件。 后来出现一个pkg的npm包,可以用来将js打包成可执行的文件。 我好像用过这个包,但是似乎中间出过一些问题。 现在是2023年,前端有了新的气象。 除了nodejs外,还有其他的后来新秀,如deno, 还有最近表火的bun 另外nodejs本身也开始支持打包独立二进制文件了,但是需要最新的20.x版本,而且我看了它的使用介绍文档,single-executable-applications, 看起来是有有点复杂,光一个构建就写了七八步。 所以今天只比较一些deno和bun的构建出的文件大小。 准备的js文件内容 // app.js console.log("hello world") deno构建指令: deno compile --output h1 app.js, 构建产物为h1 bun构建指令: bun build ./app.js --compile --outfile h2, 构建产物为h2 -rw-r--r--@ 1 wangduanduan staff 26B Jun 1 13:34 app.js -rwxrwxrwx@ 1 wangduanduan staff 78M Jun 1 13:59 h1 -rwxrwxrwx@ 1 wangduanduan staff 45M Jun 1 14:01 h2 源代码为26b字节 deno构建相比于源码的倍数: 3152838 bun构建相比于源码的翻倍: 1804415 deno构建的可执行文件相比bun翻倍:1.7 参考 https://bun.sh/docs/bundler/executables https://deno.com/manual@v1.34.1/tools/compiler https://nodejs.org/api/single-executable-applications.html

2023-06-01 13:48:00 · 1 min · Eddie Wang

VScode激活Tab更容易区分

默认情况下VScode的tab栏,当前的颜色会更深一点。如下图所示,第三个就是激活的。 但是实际上并没有太高的区分度,特别是当显示屏有点反光的时候。 我想应该不止一个人有这个问题吧 看了github上,有个人反馈了这个问题,https://github.com/Microsoft/vscode/issues/24586 后面有人回复了 "workbench.colorCustomizations": { "tab.activeBorder": "#ff0000", "tab.unfocusedActiveBorder": "#000000" } 上面就是用来配置Tab边界的颜色的。 看下效果,当前激活的Tab下有明显的红线,是不是更容易区分了呢

2023-04-18 13:43:07 · 1 min · Eddie Wang

行位结束符引起的问题

CRLF 二进制 十进制 十六进制 八进制 字符/缩写 解释 00001010 10 0A 012 LF/NL(Line Feed/New Line) 换行键 00001101 13 0D 085 CR (Carriage Return) 回车键 CR代表回车符,LF代表换行符。 这两个符号本身都是不可见的。 如果打印出来 CR 会显示 \r LF 会显示 \n 不同系统的行结束符 Linux系统和Mac换行符是 \n Windows系统的换行符是 \r\n 如何区分文件的换行符? 可以使用od命令 od -bc index.md 假如文件的原始内容如下 - 1 - 2 注意012是八进制的数,十进制对应的数字是10,也就是换行符。 0000000 055 040 061 012 055 040 062 - 1 \n - 2 0000007 如果用vscode打开文件,也能看到对应的文件格式,如LF。 换行符的的差异会导致哪些问题? shell脚本问题 如果bash脚本里包含CRLF, 可能导致脚本无法解析等各种异常问题。 例如下面的报错,docker启动shell脚本可能是在windows下编写的。所以脚本无法 standard_init_linux.go:211: exec user process caused "no such file or directory" 如何把windows文件类型转为unix?...

2023-01-16 15:03:03 · 1 min · Eddie Wang

NUC11 安装 Deepin 20.2.4

硬件 内存:金士顿 16*2;869元 固态硬盘: 三星980 1TB; 799元 主机:NUC11 PAHI7; 4核心八线程;3399元 累计5000多一点, 是最新版Macbook pro M1prod的三分之一 启动盘制作 ventoy:试了几次,无法开机,遂放弃 rufus:能够正常使用;注意分区类型要选择GPT。最新款的一些电脑都是支持uefi的,所以选择GPT分区,一定没问题。 U盘启动 开机后按F2, 里面有一个是设置BIOS优先级,可以设置优先U盘启动 磁盘分区 因为之前设置了默认的整个磁盘分区,根目录只有15G, 太小了,所以我选择手动分区 先设置一个efi分区,就用默认的300M就可以,默认弹窗出来,是不需要设置挂在目录的 设置根分区 /, 我分了300G 设置/home分区,剩下的磁盘都分给他 我没有设置swap分区,因为我觉得32G内存够大,不需要swap 其他 后续的配置非常简单,基本点点按钮就能搞定 体验 总体来说,安装软件是最舒服的一件事。不需要像安装manjaro那样,到处找安装常用应用的教程。只需要打开应用商店,点击下载就可以了。 整个安装过程,我觉得磁盘分区是最难的部分。其他都是非常方便的。 感觉深度的界面很漂亮,值得体验 问题 NUC自带的麦克风无法外放声音,插有线耳机也不行,只有蓝牙耳机能用

2022-12-17 13:28:40 · 1 min · Eddie Wang

Wireshark 使用技巧

0. 前提条件 wireshark 4.0.2 1. 时间显示 wireshark的默认时间显示是抓包的相对时间, 如果我们时间按照年月日时分秒显示,就需要进行如下设置: 视图->时间显示格式->选择具体的时间格式 2. UDP解码为RTP 方案1 在一个包UDP包上点击右键,出现如下弹框,选择Decode As 再当前值上选择RTP 方案2 方案1有一个缺点,只能过滤单一端口的UDP包,将其解码为RTP。 假如有很多的UDP包,并且端口都不一样,如果想把这些包都解码为RTP, 则需要如下设置。 选择分析->启用的协议 在搜索框中输入RTP, 然后启用RTP的rtp_udp

2022-12-11 14:33:04 · 1 min · Eddie Wang