Update
把帐号登录同步的部分接起来了。 https://plastic-editor-react.vercel.app/login
主要的改动是:直接在jotai中传入自定义Storage,再在必要的地方加上Suspense基本完事。但是过程总是曲折踩了许多坑,根本原因是jotai玩不转。
当然这样做的缺点也很明显,请求数太多了。
Next
接下来想先把层级图的部分给解决了。初步想法是用D3画(在学了...),想问一下各位有没有比较好的library 可以方便的画图。
我想做到可以做编辑,折叠的功能。节点能够自定义,渲染“富文本”。
Note
填坑
编辑块是用textarea做的,非编辑状态是div,点击编辑如何确定光标位置
一开始想的是计算点击的位置除字体宽度,但字体宽度在不同字体不同缩放的情况下都不确定。所以肯定不行。
在点击事件的时候,浏览器会有一个长度为0的Selection可以用window.getSelection
拿到anchorOffset
计算光标位置。代码
按Enter会触发换行创建新的块,如何防止(中文)输入法按回车直接键入英文时触发这玩意
在composition 相关事件记录个状态变量就好
给纯静态 Nextjs 构建个 Docker image
纯静态指的是没有用API Route
getServerSideProps
等功能, next build
会显示所有页面都是
○ (Static) automatically rendered as static HTML (uses no initial props)
使用next build && next export
可以生成静态文件。因为静态所以就不用装node, npm, next
还有各种依赖,这堆依赖装下来docker image肯定超过100多MB了。直接在docker整个http server就好了。
但是因为nextjs会在build的时候直接用环境变量替换process.env.XXX
。这样docker image启动容器时传入环境变量都没用了(主要是supabase的API url 和 jwt)。所以得想个办法把环境变量在容器启动时塞进去。
最终的解决方案是build的时候传入一个又长又臭的独特字符串做环境变量。build完在容器启动时用sed
替换。
因为在next用了dynmaic route 所以简单的静态http server不行,得整个能方便配路径转发的,nginx用的熟悉就他了。
为了能用上br压缩,从0xffff-env找了个带br modules的镜像(懒。
因为登录相关的页面在没配supbase相关环境变量时是没有用的,所以想把它404掉。前端写判断404会出现打开先展示登录,js运行了才显示404页面,逼死强迫症。于是得在nginx 配置里注入环境变量把相关页面提前404掉。
这里用到了envsubst
作文本替换,再加上从h5bp抄的配置凑在一起就长这样
最终镜像体积控制在了10MB左右。真是excited。还可以把构建静态文件的过程从docker转到github action。这样就不用忍受docker buildx 生成其他架构image的超慢速度了 🙈。