前端面试回顾

趁现在有时间稍微总结一下面试的一些问题 one Promise 为什么可以链式调用 如果在.then 返回一个值,这个新的 Promise 状态是什么 如果想要阻止链式调用,让后续的.then 一直暂停状态有哪些方法 all 和 allSettled 区别 设计一个调度程序,可以让 Promise ...

resso 源码解析

在之前用 React 写一些小项目的时候有时也需要用到状态管理,但是用 Redux 有一种“大材小用”感觉,就在寻找有没有很精巧的实现,最好是响应式的,最后搜索了一番在 Github 发现了两个满足我需求的库: valtio resso 结合官方给出的文档示例还是最终在项目用了 resso,所以就有...

koa洋葱结构解析

koa洋葱结构解析

image.png 经常在使用 koa 的时候,通过 .use 的形式来注册各种中间件,例如下面一段代码 这里会输出 1,3,4,2,下面就来翻看一下源码看看这个中间件实现的具体原理。 在看具体代码之前,先温习一下,使用 koa 的最小运行代码是什么样的 可以看到,最后通过 listen 方法来启动...

[javaScript]ES2023 引入非破坏性方法

对于 Array 的一些操作,例如 reverse、sort 等都会改变原数组,ES2023 对以下这些方法进行了拓展,提供了相同功能但是返回新副本的方法。 toReversed toSorted toSpliced with 下面进行一个详细的介绍。 toReversed reverse:反转数组...

使用jsx来编写模板

前言 模板引擎这个应该都不陌生,最早可以追溯到前后端还没分离的时候,后端为了循环、判断值之类简化编写流程而使用的,毕竟手动拼接字符串之类的也太麻烦了。 下面是 php easytpl 的一个示例,从这个可以看到模板引擎的基本用途。 上面这对代码会输出 回到 JavaScript,随着职能的不断提升前...

hook下如何书写发布订阅

这篇文章的思路来源为 ahooks,因为 react 已经有相对应的实现了,所以这里主要介绍 vue 下如何实现一个 hook 的发布订阅。 假设有一个需求,当价格发生改变的时候刷新列表,在 vue 中很自然而然想到调用 watch 观察,但是这样的调用还是有点繁琐。例如下面一段伪代码 但是仔细观察...

monorepo 如何解决别名问题

得益于 pnpm 软链接实现现在 monorepo 项目已经十分成熟了,不过在写项目时候还是遇到很多痛点,例如: 如果我有多个 packages 项目并且使用 TypeScript,那么我肯定希望是写的都是 ts,在需要调用的时候通过工具来完成这一过程的转译,不过在实际开发中可能使用了 vite 这...

TypeScript 类型收窄

TypeScript 类型收窄

image-20220904141910530 写这篇文章是因为最近在写一个管理异步队列的库,但是有一些类型推导不太好写,例如上面的期待是 后面查询了一些文档和资料就有了这篇文章。 收窄方式 在具体讲解上面如何实现之前,先介绍一下几种收窄对象的方式。 typeof 类型守卫 如果在 padLeft ...

nginx 极简入门

nginx(读音:engine-x,音标:\[ˈendʒɪnks'])是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器。 日常中最经常听到用到的就是反向代理以及负载均衡,那么什么是反向代理呢? 什么是反向代理? reverse-proxy 反向代理(Reverse P...

nginx 极简入门 - 图片 1
nginx 极简入门 - 图片 2
nginx 极简入门 - 图片 3

.gitattributes 正确使用姿势

这篇文章的由来是因为项目上的一个神奇问题,之前觉得写重复的创建项目太繁琐就封装了一个创建模板文件 CLI ,当时心想自己真是一个上进的小伙子。 后来某天 xx 领导对我说有一个新项目交给我做,当时心想终于可以大展拳脚试试新的工具了,一顿操作后项目完成了,不过在推送 GitLab 时发现图片竟然无法预...

.gitattributes 正确使用姿势 - 图片 1
.gitattributes 正确使用姿势 - 图片 2
.gitattributes 正确使用姿势 - 图片 3
yarn.lock 引发的血案

yarn.lock 引发的血案

最近开发项目的时候遇到一个神奇的 bug,在回滚了无数次之后终于定位到了问题,就是 yarn.lock 引起的,当时升级相关依赖版本不小心把 yanr.lock 文件给干掉了,导致依赖引用的模块有问题。 不过这也引起了我的思考为什么 yarn 要有一个 yarn.lock 文件呢?或者说为什么现代的...

vite 源码解析之 create-vite

home 如题这是一个系列文章不过更新起来可能很缓慢,从 vite 出来之际我就开始关注,目前 npm 的包下载量为 1,589,416+,可以看到已经非常稳定了。而且开发十分香,完全就是开箱即用,下面就来探讨一下 vite 是如何将项目创建到目录中的。 使用方式 目前比较火的管理代码形式为 mon...

vite 源码解析之 create-vite  - 图片 1
vite 源码解析之 create-vite  - 图片 2
使用 TypeScript 来编写 cli 程序

使用 TypeScript 来编写 cli 程序

新的一年已经开始,之前在知乎刷到一篇新年展望贴 2022 前端技术领域会有哪些新的变化?,里面的小伙伴回答了很多,这里稍微归纳一下回答: Monorepo TypeScript ESBuild ESM 化 pnpm ... 上面的回答中 TypeScript 提及的次数很多,原因很是随着项目复杂程度...