跳到主要内容

· 阅读需 2 分钟

本文是对这篇文章的摘录

  1. 雄心勃勃,意志坚定
    • 梦想远大、推动自己和团队取得更大成就
    • 成长心态,渴望新挑战,在挫折面前坚持不懈,视努力为通往精通的途径、从批评中学习,从他人的成功中受启发。
  2. 习惯性简化
    • 让代码更简单、更清晰更容易被维护。
    • 帮助团队这么做。
    • 对技术发展方向有长期愿景,并且感到兴奋。
    • 写出人类可以理解的代码
  3. 快速调试任何东西
    • 避免迷信
    • 不断缩小问题可能发生的范围
    • 重现问题
    • 了解崩溃原因,避免下一次出现类似的问题
    • 调试问题是挑战,是一个学习的机会
  4. 帮助其他人成为更伟大的人
    • 每个人的都想与之共事
    • 从帮助其他人中获得快乐。
    • 培养团队
    • 不会大惊小怪地生气
    • 坚持高标准、善待程序员而不是代码
  5. 知道什么事有价值
    • 判断什么时候什么事情是最有价值的
    • 以客户为中心,而不仅仅是技术
    • 确保自己正在解决最有价值的事情
  6. 富有创造力而且积极向上
    • 在陷入困境时,给每个人勇气和希望
    • 领导者而不是受害者
    • 鼓励可能性,而不是说行不通,理解问题所在和有价值的东西,为他人提供选择。
    • 态度积极、怀疑论相平衡。

· 阅读需 1 分钟

开发技巧

  1. 异步并发控制。在发请求的时候,需要考虑同时发送所有请求对于后端的压力,前端如果可以实现并发控制的话,建议还是做一下。

可以用 async-pool 实现。 2. 用 cron-tab 管理本地的日常任务。

开阔视野

· 阅读需 2 分钟

想写一些技术之外的东西。

这一周结合自己之前学过的 buncheerelease-it 从零创建了一个二方库。回过头来似乎没什么,但是自己从中收获到的成就感很大。不断地使用

这周还通过 zsh 的 nvm 插件实现了之前想要的根据项目 .nvmrc 自动切换 node 版本的功能,忽然间好奇 nvm 中的那段 bash 到底什么意思。

通过 crontab 自动化了博客的推送脚本,回想起最开始写博客,独立去仓库编辑,到使用软连接到 Obsidian 获取更好的编辑体验,再到现在使用脚本自动推送。这些都是很细碎的知识,但是的确很提升我的效率、让我很开心。

这周还和 rj 看了两部电影,(其实是三部、巴比伦没看下去)周末真的很放松。整个人都 chill 下来了。

下周好好努力,🤠。

· 阅读需 1 分钟

这一周太忙于写业务代码,基本搞定了简单组件的 C2D 。

开发技巧

开阔视野

· 阅读需 3 分钟

开发技巧

  1. 各个包管理器之间的差异和演化过程。

参考链接:

总结:monorepo (单体仓库)用于解决多个项目之间相互调用、存在大量重复依赖的问题。

当项目(Project)中相互调用时,通常情况下我们会将需要修改的包 yarn link 到本地,在本地修改再推送到 npm 服务器,这样的开发挺麻烦的,所以通过单体仓库管理,项目之间通过软连接到本地,直接进行修改不用 link 。

当多个项目之间存在大量重复依赖,使用单体仓库管理可以将依赖提升到工作区根目录,这样做的好处有两点:

1. 可以节约磁盘空间,提高依赖安装速度。因为同样的依赖只会被安装一次
2. 通过工作区根目录的 yarn-lock 文件统一管理,减小依赖之间产生冲突的可能性。
  1. bunchee 一个基于 Rollup 的零配置打包库,支持 ts、jsx。

在开发库的时候,用 webpack 、vite 太重。使用一些轻量的打包工具挺有必要的。bunchee 就是这样一个库打包工具。主打的就是一个轻量。

{
"main": "dist/pkg.cjs.js",
"module": "dist/pkg.esm.js",
"scripts": {
"build": "bunchee ./src/index.js"
},
"types": "dist/types/index.d.ts"
}

package.json 中配置好 mainmodule 字段,前者是 commonJs 规范的代码入口,后者是 ESM 规范的代码入口。

也可以通过 exports 字段声明:

{
"exports": {
"require": "dist/index.cjs",
"import": "dist/index.mjs",
"module": "dist/index.esm.js"
},
"scripts": {
"build": "bunchee ./src/index.js"
},
}

· 阅读需 2 分钟

开发技巧

  1. TypeScript 相关 非空断言符号。
const doSoemthing = (el:string|null)=>{
if(!el){
const ch = el!.charAt(0)
}
}

DTS 文件 为了避免在所有的 ts 文件中显示地引入类型,可以在 DTS 文件声明全局类型。需要强调的是,不要在 DTS 文件中使用 import/export 这会让 ts compiler 将其视作为一个模块。 如果作为全局模块定义的 DTS 文件中确实需要引入第三方的模块定义,可以使用命名空间语法

declare module 'React' {
import React = require('react');
}

interface Option {
optionValues: string[];
propValues: Record<string, unknown>[];
}

interface TestMeta {
component: React.FunctionComponent;
api: string;
design: string;
version: string;
dimension: Record<string, Option>;
variables: Record<string, Option>;
initialChildren?: React.ReactNode[];
initialProps?: Record<string, unknown>;
}

  1. bash 杀死指定端口号的进程
lsof -nti:NumberOfPort | xargs kill -9

可以将它封装成为一个 bash 函数

funtion killbyport(){
lsof -nti:$1 |xargs kill -9
}

顺带一提,bash 的函数没有形参 3. useMemo 和 memo 本身就应该搭配使用

开阔视野

  1. Verdaccio A lightweight Node. js private proxy registry ,可以用作私有 npm 源 https://verdaccio.org/

  2. Tresjs 用 vue 写 three. js https://tresjs.org/guide/ image.png

  3. icon8 图标和设计工具的平台 image.png

  4. Val. Town image.png

分发用户 Script 的平台

· 阅读需 3 分钟

开发技巧

1. npm 使用别名

在项目中使用别名的方式,安装同一个 npm 包的不同版本

npm install <alias>@npm:<name>

2. react 的错误边界

为项目添加 错误边界 ,能够在界面 crash 后自定义崩溃的兜底页面,提供更好的 UX。 image.png

官方文档

我个人更推荐使用 react-error-boundary 库,它提供了错误边界的简单封装,支持作为组件引入和作为高阶函数(HOC)引入。

语言的真正强大之处, 并不在于语言本身,而是其生态。

3. 查看常见库的替代品

https://www.libhunt.com/ 这个网站能够输入的库名对应的替代开源项目。非常适合在老项目改造过程中使用。

4. 如何批量自定义文件导出

webpack 中的 require.context 方法能够将特定文件夹下的文件,按照自定的方法导出。 举个 🌰

我们希望 Components 文件夹下的文件都已 大驼峰 的格式导出,并添加指定前缀。

5. vscode 扩展

yeoman 一个搭建 vscode 扩展的脚手架

6. figma 中创建 Component

figma 中如何创建具有多个 prop 的 Component ? 首先将其变体统统罗列出来(复制)然后选中,点击 combine as variants 这样就能得到新的 「组件」。 具体可见:Youtube 这其中暗藏一个小规则:这些变体的名称可以用来快速创建 prop 的值。

  • v1,v2 会被转化成 property1=v1, property2=v2
  • k1=v1,k2=v2 会被转化成 k1=v1,k2=v2 (默认为字符串类型)
  • k1=true,k2=v2 ,k1 会被识别为布尔类型。

工具推荐

- vscode 插件 GistPad

github 的 gist 功能是用于存放和分享代码片段的平台。GistPad 能够在 IDE 中访问 github gist ,从而更好地使用这些代码片段,个人觉得非常方便。image.png

- Chorme 的 snippet

类似 gist ,如果你经常在 Chrome console 里输入一些重复的指令。可以考虑将他们创建为 Chrome console snippets 从而更好地调用, image.png image.png

- Alfred 的 workflow

地址 image.png

如果你和我一样,需要在多个文件夹下切换打开 vscode,可以试试这个 workflow ,能够大大节约打开仓库的时间。

· 阅读需 6 分钟

这是我的第一篇年终总结。写年终总结的起因是关注的不少前辈都在前些日子发了 2022 总结。看着他们写下的内容,我也希望五年后的自己回忆此时能有更多详实的记录。 这一年我完成了从学生到正式打工人的转换。毕业旅行,从福建出发,广州、常德、桂林、长沙。第一次去长隆野生动物园、第一次坐竹筏顺遇龙江而下、第一次骑马绕山、第一次吃生蚝锅到急性肠胃炎哈哈哈哈 …… 有很多尴尬又幸福的第一次。

在工作上,今年最大的收获是顺利在网易云前端架构组转正。说实话,能够调岗到架构组是我转码路上最幸运的事情 —— 我的工作没有那么的忙,而且总能在其中学到不少通用的知识。回忆起腾讯实习时那种被需求压得喘不过气的感觉,我觉得当下的节奏很舒适很适合我。放弃了字节和美团的 offer 也未必不是失之东隅收之桑榆。 但仍有不足,我总结最关键的一点是:动手能力还有欠缺。想法多,但付诸实践的少,往往是在答辩前才临时准备一下。今年也有做得好的地方:

  • 早起(7:30)起床。起因自看到的 5am-club 早起背五十个单词让大脑活跃起来,随后去公司有一个多小时完全属于自己的学习时间。我往往会刷一会推,看到感兴趣的项目会去翻翻他们的 github 。
  • 做好记录。工具学习大法好,折腾 obsidian 相关的配置后用沉没成本逼迫自己每天记录反思和收获。自省让我更加了解自己的状态,那种高中晚自习难熬的感受很少会体会到了。

打工人应该将自己打造成一间公司。我习得的所有技能都是这间公司的产品。维持好这个公司的良性循环是我的责任。落到细节上,我今年开始有意识地打造自己的学习和工作流。探索最适合自己的学习流(工具+方法)。目前的结论是:在明确自己为什么要学这个东西之后,首先看视频有一个大致的印象(或是动手实验)这个阶段一定要做笔记,但是不必过分深究原因。然后找专业的书籍看(感谢微信读书,帮我省下不少买书钱)。最后做一个 demo 验证自己的学习成果。通过此方法我学习了 webpack 。正在学 svg 和 babel。

在生活上,今年主动结束了一段长期关系。自己这一年成熟很多,读了几本心理学相关的书。渐渐放下了以前的一些执念。摘录一些让我醍醐灌顶的观点:

  • 谁痛苦谁改变。
  • 无条件的爱存在,但仅限是自己对自己的爱。
  • 拖延的本质是不熟悉。
  • 不必在意凝视。

自己不太会处理亲密关系,不太会社交,不能很好地控制自己的情绪。这是我的缺点,试图去掩盖、粉饰这些事情没有意义。成熟的人要对自己负责,而不是一味地归咎于他人。既然我感觉到痛苦,那就做出改变好了。粗浅地了解了下阿德勒的一些观点。

今年看的书和电影相对往年较少。让我收获最大的书是《分手心理学》、《超越自卑》。今年最喜欢的电影是《西线无战事》。比如书和电影,今年让我有更大感触

总体来说,今年的关键词是学习和成长。学习工作需要掌握的技能、方法,成长为一个合格的打工人。在高考结束后,曾有一个愿望 『要成为对他人温柔、对自己勇敢、不会说谎的大人』。虽然有些二次元啦,但是真诚地希望五年后的自己能够做到。