2025 年已经到来,在 Web 前端这个岗位上不知不觉已经工作了 7 年。这里将自己 2024 年的学习和写作情况做一些简单总结。
温馨提示:感兴趣的同学可以追溯 2023 前端年度技术总结。
2024 技能更新
紫色部分是今年有所实践的技术。总体来看,在 AI 技术上进行了一些简单实践:
2024 学习情况
AI
今年在 AI 技术上涉及最多,如果说去年对 AI 的原理和基础知识有了基本了解,那么今年在 AI 上进行了几个简单的学习和实践,主要包括以下内容:
方向 | 细分 | 学习关键词 |
---|---|---|
Open AI 基础 | Prompt Engineering(提示工程) | 提示词要素(指令、上下文、输入数据、输出指示)、零样本提示、少样本提示、链式思考 CoT 提示(中间推理步骤、零样本 CoT 提示)、Prompt Chaining、思维数 ToT、检索增强生成 RAG、Few Shot 等 |
Open AI 基础 | Fine- Tuning(微调) | 训练模型(数据探索、数据准备)、测试模型、使用微调模型、根据统计数据迭代微调模型(分析微调模型、迭代数据质量、迭代数据量、迭代参数和)、微调模型和基本模型评估对比等 |
低代码 AI | AI 生成 & 修改 | 竞品分析、 Prompt 组装(含 RAG、多模态生成、JSON Patch、Yoga 跨平台布局引擎、HTML & JSON Schema 转换 |
Java Copilot | 简单 Copilot 设计尝试 | Java 工程配置、检索增强生成 RAG、多任务调度代码生成 |
Copilot | Github Copilot 原理解析 | 竞品分析、Code 模型能力对比、Sourcemap 逆向还原、VS Code Extension API、Prompt 提取策略(Prompt 配置、相邻文件文件获取、相似 Snnippets 滑动窗口计算)、Prompt 组装策略(剩余 Token 计算、组装优先级)、补全策略(单行补全、多行补全)、补全缓存、补全请求、LSP(Language Server Protocol)、Tree Sitter(AST 解析) |
低代码 AI
在低代码 AI Prompt 的组装设计中,使用了 Prompt Engineering(提示工程)的 CoT 和 RAG 提示能力,以增强 AI 生成的稳定性和准确性。在 AI 修改(在已有页面中发送修改指令)的设计中,为了节省请求的 Token 数量,仅让 AI 返回需要增删改的节点信息,并通过 JSON Patch 的方式更新节点。由于低代码编辑器采用自由布局(类似于 iOS 的 Frame based layout),需要 AI 返回 Frame 信息(left
、top
、width
和 height
等位置和大小信息)的 JSON Schema,但 AI 往往无法准确计算出节点的位置信息(例如节点位置重叠、忽略 padding 处理等)。为此,尝试让 AI 返回 Flex 布局的 JSON Schema 或者 HTML,然后利用算法计算出 Frame 信息,粗略的实现流程如下所示:
计算 Frame 信息的方案包括静态和动态两种方式,静态计算采用 Yoga 跨平台布局引擎 实现,需要强制让 AI 返回符合 Flex 布局的 JSON Schema(对于 AI 而言具备解释成本,但是相对于 Frame Layout 解释成本变低,例如需要防止 AI 生成 Grid 布局),然后通过 Yoga Layout 静态计算出 Frame 信息(如何考虑数据的动态填充渲染计算呢)。动态计算则是将 JSON Schema 直接通过低代码引擎(支持 Flex 布局渲染 Antd 组件库)进行浏览器渲染,经过浏览器渲染后计算出对应的 Frame 信息,然后转化成 Frame based Layout 编辑态布局。当然,也可以直接让 AI 返回 HTML 信息(HTML 不支持 Antd 组件库,那么如何在 HTML 中渲染出类似于 Antd 组件库的能力呢?),然后进行浏览器渲染,经过渲染后再转化成编辑态需要的 JSON Schema。大家可以猜猜哪一种方案相对于 AI 而言生成效果更好,那种方案对于 AI 而言解释成本更高?
Java Copilot 设计尝试
为了方便 Java 开发人员快速基于数据模型生成对应的 CRUD 接口实现,一起参与共建了 Java Copilot 的 CLI 形态设计。在此期间,简单学习了 Java 服务端的一些基础知识,包括包管理器、编译器和 Java 虚拟机等:
并简单尝试了 JDK、Meavn 的安装、配置和 IDEA 的使用。Java Copilot 起初的设想是一个非常完备的设计方案,具体的设计思路如下所示:
温馨提示:前期简单调研和参考了 Github Copilot 的实现原理。
当时为了快速设计 Demo 原型,最终的实现方案如下所示:
Github Copilot 原理解析
在设计 Java Copilot 的同时额外研究了 Github Copilot 的实现原理。在研究原理之前,首先对 Github Copilot 的 VS Code Extension 工程项目进行了逆向还原,根据 Sourcemap 对编译代码进行了 AST 解析,将源代码的变量名进行了还原处理,如下所示:
温馨提示:为什么要增加注释信息,增加注释信息的
extension.js
不会破坏原有的代码结构,支持运行和打印调试,而extension- recovery.js
并不能完整还原源代码,只能用于源码阅读,运行时存在一些其它问题(做了各种尝试,最终发现 Copilot 官方在生成 Sourcemap 时专门去除了一些源代码信息)。
尽管还原了工程项目,但是根据 VS Code 扩展入口深入阅读代码非常费劲,第一个星期基本上在阅读一些扩展上下文初始化信息,没有找到核心内容(也是因为对 VS Code Extension 的补全 API 不熟悉,当时就没有想到先找补全 API 的实现),除此之外,如果对 VS Code Exntension 的开发不熟悉,还会继续增加解析成本,中途一度差点放弃。第二个星期突然找到了核心代码部分,还是要感谢坚持的自己,至此一发不可收拾,断断续续花了将近两个月的时间将核心解析完毕,补上一张凌乱的 XMind 核心图感受一下(就像我当时的解析心情一样凌乱):
将上述内容进行总结抽象,Github Copilot 的整个执行流程大致如下所示:
整个实现的核心是围绕 VS Code Extension 的补全 API 进行 Prompt 组装和 AI 请求补全,当然内部还会涉及 LSP(Language Server Protocol)、Tree Sitter(多语言 AST 的 WebAssembly 解析器)、Web Worker 多线程以及一些相似性算法,例如相邻文件的代码片段利用滑动窗口算法进行相似度匹配计算:
温馨提示:多线程的执行还需要涉及将对应的 JS 脚本进行工程的逆向还原处理,但是在解析的过程中发现在
extension.js
中同样存在多线程中执行的代码,猜想是 Github 的工程师们一开始没有设计多线程,后续为了提升性能进行了 Webpack 多入口的配置。为了减少逆向成本,索性直接更改了扩展脚本,关闭了多线程进行调试。
整个 Github Copilot 的核心解析即将在《深入浅出微前端》的番外篇中出现,整体包括 Github Copilot 的功能介绍、竞品分析、Code 模型介绍 & 对比、原理解析(Prompt 提取策略、组装策略、补全策略和补全请求)和 LSP Demo 实现等,后续也会想办法在社区进行一次分享,感兴趣的同学可以关注一下。
温馨提示:你知道 Github Copilot 的代码补全使用的是什么 AI 模型吗?
LSP
Github Copilot 使用 AI 进行智能提示,但是也内置了 LSP 服务的补全能力(该功能默认不开启,作为 AI Copilot 的备选)。LSP(Language Server Protocol)是一种协议,类似于 CDP 协议,它是由微软定义,主要是为了解决编辑器中语言的补全、诊断、跳转到定义等功能:
当然,如果直接将语言服务直接集成到 IDE 中会占据大量的 CPU 资源,因为它会对大量的文件进行 AST 解析和静态分析。为了确保语言功能不影响 VS Code (IDE)本身的性能,可以通过 LSP 协议将 IDE 和 LSP 语言服务功能解耦开,语言服务器可以用任何服务语言实现(例如 Node.js、PHP、Java 等),并在自己的独立进程中运行,从而避免 IDE 的性能损耗,而 IDE 只需要请求语言服务器进行通信即可。除此之外,任何符合 LSP 的语言工具都可以与多个符合 LSP 的代码编辑器集成,例如:
可以通过 Node SDK 来集成 LSP,让 LSP 服务运行在 Node 的环境中。例如不同的语言可以创建不同的语言服务器,如下所示:
了解了基础知识后,简单尝试使用 TypeScript 编写 LSP 服务实现了 VS Code 的补全示例,例如以下通过键入 dd
自动提示 dd.ready
(钉钉开放平台的 JS API):
温馨提示:示例参考了 Language Server Extension Guide 进行设计。
微前端小册
原计划今年完成《深入浅出微前端》小册的撰写,但是因为番外篇(居然有人觉得番外篇比正片好看...)和生了一个不大不小的病,导致国庆之后两个月没有更新,在这里对于小册读者说一声抱歉。当然,小册的内容也在不断地增加,从原来的 42 个章节增加到了 59 个章节,今年小册的质量相对于去年应该有所提升,核心原理均已解析完毕,主要更新的章节内容包括:
方向 | 细分 | 学习内容 |
---|---|---|
微前端小册 | 框架示例 | single- spa 的 NPM、Script、Fetch 和 Code Splitting 示例,在 Script 示例中提供了微应用生命周期的 SDK 设计方式。在 Fetch 示例中额外讲解了 Webpack libirary 、libraryTarget 配置和 Webpack 模块化的运行时原理,并重点讲解了如何提供通用化的识别方式获取微应用的生命周期对象。在 Code Splitting 示例中额外解析了 Code Splitting 的 Webpack 运行时原理。 |
微前端小册 | 框架解析 | single- spa 的源码解析、qiankun 的使用示例、import- html- entry 的源码解析,并循序渐进地讲解了 qiankun 无沙箱、CSS 隔离、CSS 动态隔离、快照隔离、Legacy Proxy 隔离以及 Proxy 隔离的实现原理。 |
微前端小册 | 框架设计 | 在状态管理设计中额外讲解了 Monorepo 的设计结构以及 SDK 的调试工程化设计,隔离、性能优化、通信和整体解决方案预计在 2025 年完成。 |
微前端小册 | 番外篇 | 在依赖注入解析篇中讲解了元编程(Metaprogramming)、反射(Reflect)、反射元编程、元数据( Reflect Metadata)、五种 TypeScript 装饰器类型、依赖注入(Dependency Injection,简称 DI)和控制反转(Inversion of Control,简称 IoC)等概念,并基于以上基础概念简单实现了一个 Midway 依赖注入的框架示例。 |
撰写小册其实花了我非常多的时间,尤其是画一些 UML 图、流程图和框架图,这里给出一张 single-spa 的运行 UML 图设计示例,供大家进行参考:
除了小册的质量提升,小册章节的内容量也在提升,如下所示:
章节 | 字数 | 学习时长 |
---|---|---|
19.框架解析:single-spa 的 NPM 示例 | 8146 | 1小时46分 |
20.框架解析:single-spa 的 Script 示例 | 6390 | 1小时12分 |
21.框架解析:single-spa 的 Fetch 示例 | 6390 | 2小时36分 |
22.框架解析:single-spa 的 Code Splitting 示例 | 16629 | 3小时14分 |
23.框架解析:single-spa 源码解析 | 17811 | 4小时1分 |
24.框架解析:qiankun 使用示例 | 6464 | 1小时59分 |
25.框架解析:import-html-entry 源码解析 | 17403 | 4小时50分 |
26.框架解析:qiankun 源码解析 - 无沙箱模式 | 18713 | 4小时48分 |
27.框架解析:qiankun 源码解析 - CSS 隔离 | 9571 | 2小时6分 |
28.框架解析:qiankun 源码解析 - CSS 动态隔离 | 11509 | 3小时35分 |
29.框架解析:qiankun 源码解析 - 快照隔离 | 8463 | 2小时50分 |
30.框架解析:qiankun 源码解析 - Legacy Proxy 隔离 | 5653 | 1小时19分 |
31.框架解析:qiankun 源码解析 - Proxy 隔离 | 18608 | 6小时2分 |
44.框架设计:状态管理 | 10182 | 1小时38分 |
56.番外篇:依赖注入解析 | 10118 | 2小时19分 |
每次撰写小册章节时都会先调研一些理论基础,并花费大量的时间对一些周边相关的运行原理进行解析,例如工程化原理、Webpack 编译产物运行时原理等,用于加强整个小册的深度和通用性设计,帮助大家掌握微前端的同时也对前端的其它知识有更深入的了解。
DI & IoC
依赖注入(Dependency Injection,简称 DI)和控制反转(Inversion of Control,简称 IoC)是软件设计中的两个密切相关的概念,它们通常用于实现松耦合的设计,从而提高代码的可维护性和可扩展性。Midway 是一个服务端 IoC 依赖注入的 Node.js 应用框架,为了完整掌握 Midway 的内部实现原理,简单实现了一个 IoC 自动依赖注入的示例,实现示例的项目工程如下所示:
.
├── src # 源码目录(可以理解为 midway 中的 src 目录)
│ ├── animal.ts
│ ├── cat.ts
│ └── dog.ts
├── ioc # 自动识别文件和自动依赖注入功能(需实现)(midway 不对外提供)
│ ├── container.ts # IoC 容器(注册和获取实例)
│ ├── inject.ts # 属性装饰器(通过元数据建立依赖关系)
│ ├── key.ts # 定义元数据的 key
│ ├── load.ts # 自动扫描和执行 src 目录的模块文件,实现 IoC 自动绑定功能
│ └── provider.ts # 通过元数据建立 IoC 容器的绑定关系
└── index.ts # 启动脚本
src
目录下的代码可以理解为已经实现了 IoC 依赖注入功能的代码,主要提供了对应的类和装饰器,通过装饰器声明类之间的依赖关系:
// src/animal.ts
import { Inject } from "../ioc/inject"; // 需实现
import Cat from "./cat";
import Dog from "./dog";
@Provider()
export default class Animal {
@Inject()
private cat: Cat;
@Inject()
private dog: Dog;
print() {
this.cat.print();
this.dog.print();
}
}
// src/cat.ts
import { Provider } from "../ioc/provider"; // 需实现
@Provider()
export default class Cat {
print() {
console.log("Cat");
}
}
// src/dog.ts
import { Provider } from "../ioc/provider"; // 需实现
@Provider()
export default class Dog {
print() {
console.log("Dog");
}
}
// src/index.ts 启动脚本
// IoC 容器,需实现
import { IoCContainer } from "./ioc/container";
// 程序加载,负责扫描 @Provide、@Inject 相应的实例化及绑定处理,需实现
import { load } from "./ioc/load";
const container = new IoCContainer();
load(container, "./src");
// 无需手动绑定,自动绑定
// Animal 依赖 Cat 和 Dog,通过 @Inject 装饰器自动绑定
// 这里的 Animal 字符串是 Animal 类上的元数据 id,对应的是 Animal 类的构造函数名称
// INFO: 这里也可以通过 Reflect.getMetadata(providerKey, Animal) 获取到 Animal 类上的元数据;
const animal = container.get("Animal");
animal.print(); // Cat Dog
ioc
目录大致实现流程如下所示:
依赖注入在服务端设计是非常常见的一种技术,当然在前端领域也可以参考此类技术实现一些框架,例如扩展框架。当然,如果你想使用 IoC 技术来实现一些公司通用的框架设计,可以使用社区中现有的 IoC 库,例如 InversifyJS。
温馨提示:DI 和 IoC 的关系是什么?
编译工具
设计了 Webpack Loader & Plugin,用于优化低代码编译的体积问题,并用于解决开发态 JSON Schema 的 URL 请求问题。假设存在如下开发态代码:
// @xxx/lowcode-render-engine 内部默认集成了所有的 Antd 组件和 Antd Icons
import LowCodeRenderEngine from '@xxx/lowcode-render-engine';
// 组件化的使用方式
// LowCodeRenderEngine 开发态支持 URL 传递,URL 对应的是低代码平台产生的 JSON Schema 地址(固定地址)
// LowCodeRenderEngine 支持 schema 传递,对应的是 JSON Schema
// LowCodeRenderEngine 内部会根据 JSON Schame 声明的 Antd 组件名称进行动态渲染处理
<LowCodeRenderEngine url="http://aaa.com/bbb.json"></LowCodeRenderEngine>
<LowCodeRenderEngine url="http://aaa.com/ccc.json"></LowCodeRenderEngine>
我们希望生产态时,它能转化成如下功能(注意不是编译后的代码):
// @xxx/lowcode-render-engine 内部的 Antd 和 Icons 能够按需引入
// 根据 JSON Schema 中的 Antd 和 Icons 使用情况而定
import LowCodeRenderEngine from '@xxx/lowcode-render-engine';
// 组件化的使用方式
// 生产态部署页面所在的环境可能无法请求到 URL 地址对应的服务环境,因此需要将 URL 转换成真实的 JSON Schema 值
<LowCodeRenderEngine schema=[{/- url 地址对应的 JSON Schema 值 - /}]></LowCodeRenderEngine>
在 LowCodeRenderEngine
中全量引入了 Antd 组件库和 Icon,从而实现低代码的组件动态渲染。但是真正在开发时可能只需要使用组件库中的一些组件,那么如何使得上述情况可以实现按需引入呢?除此之外,我们希望开发态引入的是 url
属性对应的 JSON Schema 地址,而生产态引入 schema
属性对应的真正 JSON Schame 值。为了实现上述功能,我们可以借助 Webpack Loader 和 Webpack Plugin 来实现该功能,如下所示:
第一阶段需要对所有的 TSX 或者 JSX 文件通过 Webpack Loader 一一进行 AST 解析,提取出对应的 URL 地址,然后批量请求 URL 地址对应的 JSON Schema 值,并将其重新设置到组件的 schema
属性上。第二阶段则是通过 Webpack Plugin 对所有使用的 schema
属性进行 AST 解析,解析出所有 JSON Schema 的集合,判断整个项目使用了那些 Antd 组件库和 Icons,并再次通过 AST 操作 @xxx/lowcode-render-engine
内部的 Antd 和 Icons 全量引入逻辑,将其替换成按需引入语法。例如:
// 内部原有实现
import * as designComponents from 'antd';
// AST 替换
// 根据 JSON Schema 动态分析需要按需引入的组件
import * as Button from "antd/es/button";
import * as FlexLayout from "antd/es/flex- layout";
import * as Layout from "antd/es/layout/Layout";
import Page from "antd/es/page";
const designComponents = {
...Button,
...FlexLayout,
...Layout,
...Page
};
2024 收藏书签
这里将平时学习时查阅的博客、文档、电子书、PPT、视频以及 Github 仓库等进行书签汇总,并按照收藏时间进行倒序排序。如果想浏览某一项技术,建议按照年份从低到高进行浏览。通过整理年度书签,可以用于分析自己在这一年中主要学习了哪些技术。
作者文章
- 2023 前端年度技术总结
- 前端,请回答 2022
- 前端杂烩
- Vue CLI 3 结合 Lerna 进行 UI 设计
- 基于Vue实现一个简易MVVM
- V8 编译浅谈
- 面试分享:两年工作经验成功面试阿里P6总结
- 在阿里我是如何当面试官的
- 前端面试知识点(一)
- 前端面试知识点(二)
- 从零开始配置 TypeScript 项目
- Cz工具集使用介绍 - 规范Git提交说明
- 使用 NPM 发布和使用 CLI 工具
- 2019 前端年度总结
- 你真的理解 $nextTick 吗
- 基于 Express 应用框架的技术方案选型浅谈
- 深入浅出 JavaScript
- 桌面端混合开发总结
- 技术文章的写作技巧分享
- Vue CLI 3 构建库时对于产生 Polyfill 的问题分析
- Vue CLI 3 缓存旧版本的 Vue 组件(Npm 包)问题
面试
- 面试分享:两年工作经验成功面试阿里 P6 总结
- 在阿里我是如何当面试官的
- 前端面试知识点(一)
- 前端面试知识点(二)
- 面试分享:两年工作经验成功面试阿里 P6 总结
- 在阿里我是如何当面试官的(持续更新)
- 【1 月最新】前端 100 问:能搞懂 80% 的请把简历给我
- 2018 前端面试总结,看完弄懂,工资少说加 3K | 掘金技术征文
- 2019 面试系列 - 简历
- JavaScript-面试
- Javascript 面试核心考点(基础版)
- jsliang 的 2019 面试准备
- 总结了 17 年初到 18 年初百场前端面试的面试经验(含答案)
- 面试 -- 网络 HTTP
- 中高级前端大厂面试秘籍,为你保驾护航金三银四,直通大厂(上)
- (下篇)中高级前端大厂面试秘籍,寒冬中为您保驾护航,直通大厂
- 你要的 React 面试知识点,都在这了
- 大揭秘!“恐怖”的阿里一面,我究竟想问什么
- 你要的 Vue 面试题都在这里。
- 面试官:自己搭建过 vue 开发环境吗?
- 前端进阶之道
- 从面试题看 JS 事件循环与 macro micro 任务队列
- 中高级前端开发高频面试题
- 阿里前端社招面试总结
- 前端内参
- 阿里前端社招面试总结
Copilot
- Github Copilot
- Cursor
- Gemini Code Assist
- 通义灵码
- MarsCode
- Copilot-Explorer
- 花了大半个月,我终于逆向分析了Github Copilot
- GitHub Copilot 深度剖析:一个 AI 产品的性能提升、成本控制与效果评估
- Github Copilot 相关的研究数据报告
- 研究:量化 GitHub Copilot 对开发人员生产力和幸福感的影响
- GitHub Copilot in the CLI
- Smarter, more efficient coding: GitHub Copilot goes beyond Codex with improved AI model
- 首次覆盖超 11 类真实编程场景!豆包大模型团队开源代码大模型全新基准
- How GitHub Copilot is getting better at understanding your code
- The economic impact of the AI-powered developer lifecycle and lessons from GitHub Copilot
Model
- o1-mini(STEM 增强)
- o1-preview(STEM 增强)
- o1
- o1-pro
- Claude 3.5 Sonnet
- CodeX
- Best AI for coding. GPT-o1 mini vs Claude 3.5 Sonnet
- SWE-bench 测评榜单
- HumanEval Pass@1 基准测试集
- Enhancing and Benchmarking Real-world Repository-level Code Completion Abilities of Code Large Language Models
- Embedding Models for Different LLM Versions (GPT, Claude, etc.) in Cursor
Open AI
- Prompt Engineering Guide
- A-Guide-to-Retrieval-Augmented-LLM(RAG 好文)
- 检索增强生成 (RAG)
- Chain-of-Thought Prompting
- 微调(Fine-tuning)
- GitHub Copilot Workspace: Welcome to the Copilot-native developer environment
- CNN入门讲解:什么是微调(Fine Tune)?
- 开源大模型微调指南
- 不会算法 也能微调一个NLP预训练模型
- 原创| GPT 微调,万字保姆级教程+实操案例
- 前端工程师如何快速使用一个NLP模型
- 南大周志华团队8年力作!「学件」系统解决机器学习复用难题,「模型融合」涌现科研新范式
- 微软、OpenAI大佬暗示LLM应用开发范式迁移:从Prompt Engineering到Flow Engineering
- 一文探秘LLM应用开发(24)-Prompt(架构模式Agent)
- Open AI
- API Reference
- openai-node
- LangChain
- 动手深度学习
- openai-cookbook
- OpenAI API 中文教程
- 用 ChatGPT 开发一个能听懂人话的命令行工具
- 如何让 ChatGPT 读懂超长保险条款?
- 我用我的微信聊天记录和 280 篇博客文章,做了我自己的数字克隆 AI
- LangChain 与大型语言模型(LLMs)应用基础教程:Prompt 模板
- LangChain 与大型语言模型(LLMs)应用基础教程:信息抽取
- 分享几本 ChatGPT 必读书籍(含 PDF 下载)
Awesome
- awesome-svelte
- awesome-shell
- awesome-zsh-plugins
- awesome-chatgpt
- awesome-chatgpt-prompts
- Awesome-Prompt-Engineering
- awesome-actions
- awesome-wasm(WebAssembly 生态清单)
- awesome-vue
- awesome-react
- awesome-javascript
- awesome-nodejs
- awesome-css
- awesome
- awesome-awesome
- awesome-awesome-awesome
- Front-End-Develop-Guide(前端开发所使用语言的主流学习资源)
- knowledge(前端技术架构图谱)
- awesome-javascript-cn(JavaScript 资源大全中文版)
- awesome-wechat-weapp-(微信小程序开发资源汇总)
- awesome-graphql
- Awesome Redux
- awesome-github-vue
- awesome-github-wechat-weapp(微信小程序开源项目库汇总)
- awesome-nuxt
- awesome-nextjs
- awesome-ui-component-library
- awesome-react-components
- awesome-mac
- awesome-vscode
- Awesome-Design-Tools
- awesome-webpack
- awesome-gulp
- awesome-github
- awesome-npm
- awesome-chrome-devtools(Chrome DevTools 生态清单)
- Font Awesome
- awesome-resume(程序员简历例句)
- awesome-interview-questions
- awesome-webpack-cn(webpack 优秀中文文章)
- awesome-architecture(架构师技术图谱)
- awesome-books(开发者推荐阅读的书籍)
- awesome-programming-books(经典技术书籍推荐)
- awesome-bookmarks
Sourcemap
- shuji
- reverse-sourcemap
- source-map-explorer
- JavaScript Source Maps 简介
- 调试原始代码,而不是使用源代码映射进行部署
- 什么是源代码映射?
- JavaScript Source Map 详解
模块化
- What are UMD modules?
- 详解 AMD,CMD,ComminJS,ES6 和 UMD 模块化规范
- AMD , CMD, CommonJS,ES Module,UMD
- 可能是最详细的UMD模块入门指南
- javascrip中UMD规范的详细介绍
- 关于前端:一文带你了解-JS-Module-的始末
- 《模块化系列》彻底理清 AMD,CommonJS,CMD,UMD,ES6
服务端
- Spring Boot
- Spring Framework 中文文档
- Java 教程
- 设计模式
- 后端架构师技术图谱
- Spring Boot 中文论坛
- 超详细!4小时开发一个SpringBoot+vue前后端分离博客项目!!
- Spring 系列框架的中文 PDF 文档
- Java服务端学习路线总纲
- 2024年最新超详细Java学习路线一条龙版(建议收藏🔥)
- 一份完整的后端学习路线
- 后端开发需要学什么?推荐这份超详细的后端开发学习路线图!
- 零基础Java学习路线
- IntelliJ-IDEA-Tutorial
- Maven
协议
AST
VS Code
IoC
- 谈元编程与表达能力
- Reflect
- TypeScript 中的元数据以及 reflect-metadata 实现原理分析
- 依赖注入手册
- 这一次,教你从零开始写一个 IoC 容器
- 控制反转 Ioc,依赖注入 DI 如何实现的?
Chromium
- The Anatomy of a Frame
- 使用 RAIL 模型衡量性能
- Chromium History Versions Download
- Sandbox
- RenderingNG 架构概览
- 浏览器的工作方式
- How Chromium Displays Web Pages
- Multi-process Resource Loading
- Threading and Tasks in Chrome
- Chromium architecture overview
- Browser process - detailed architecture overview
- Blink (Rendering Engine)
- Blink-in-JavaScript
- Blink-in-JavaScript(PPT)
- Life of a Pixel
- Mojo
- Intro to Mojo & Services
- Mojo Core Embedder API
- Mojo & Servicification Performance Notes
- Network Service
- network::mojom::URLLoader 101
- Network Service in Chrome
- Life of a URLRequest
- Explore the Magic Behind Google Chrome
- How do the Render Engine and JavaScript Engine Communicate in a browser?
- Blink architecture overview
- Blink Binding V8 API
- Window 上下文创建源码
- Understanding Asynchronous JavaScript
- Introduction to web APIs
- V8 Binding Explained
- Web IDL Standard
- WebKitIDL – WebKit
- JavaScript 运行机制详解:再谈 Event Loop
- C++ std::thread Event Loop with Message Queue and Timer
- Event Loop
- Mitigating Spectre with Site Isolation in Chrome
- 适用于 Web 开发者的网站隔离功能
- 多进程架构
- Chrome/Chromium 沙箱 - 安全架构设计
- Cross-Origin Read Blocking (CORB)
- Cross-Origin Read Blocking for Web Developers
- 了解“同网站”和“同源”
- 往返缓存
- 为什么需要“跨源隔离”来实现强大的功能
- 使用 COOP 和 COEP 将网站设置为“跨源隔离”
- 关于启用跨域隔离的指南
- 跨域隔离概览
- Inside look at modern web browser (part 1)
- Inside look at modern web browser (part 2)
- Inside look at modern web browser (part 3)
- Inside look at modern web browser (part 4)
- Chromium 中文文档
- 多进程架构
- 沙箱隔离
- 站点隔离
- How Blink works
- event-loop
TypeScript
- Centralized Recommendations for TSConfig bases
- TypeScript
- 深入理解 TypeScript
- TypeScript 高级技巧
- TypeScript Deep Dive
- TypeScript 入门教程
- 3 Ways to Implement TypeScript Into Your Project
- TS 常见问题整理(60 多个,持续更新 ing)
- 使用 TypeScript 装饰器装饰你的代码
JavaScript
- 使用 requestIdleCallback
- browsing-context
- 深入理解 JavaScript 执行上下文
- [译] 理解 JavaScript 中的执行上下文和执行栈
- JavaScript 深入之执行上下文
- JavaScript 深入之执行上下文栈
- JavaScript 深入之变量对象
- 一文搞清 Javascript 中的「上下文」
- CommonJS,AMD,CMD,ESM 模块化规范详述
- Labeled statement
- Results for js web frameworks benchmark
- highlight.js
- es-module-shims
- history
- path-to-regexp
- licia
- ECMAScript 6 入门
- ES modules: A cartoon deep-dive(中文翻译)
- Tasks, microtasks, queues and schedules(宏任务、微任务、队列)
- lodash
- JavaScript 与有限状态机
- 模块化规范之 ES Modules && CommonJS 规范
- CommonJS 和 ES6 Module 究竟有什么区别?
- CommonJS 和 ES6 Module 模块规范原理浅析
- ECMAScript 规范的中文翻译
- 前端基础漫游指南
- 前端工程师手册
- JS 内存模型
- 每周一个 npm 轮子学习之 lru-cache
- codemirror
- debug
- perfect-scrollbar
- superagent
- jQuery
- zTree
- [译] SuperAgent 中文使用文档
- InversifyJS 中文文档
- RxJS 中文
- RxJS
- Redux-observable
- Redux-observable 中文
- 使用 redux-observable 实现组件自治
- RxJS 与 Redux 结合使用(一):打造自己的 redux-observable
- 学习 RxJS
- moroshko/rxviz: Rx Visualizer - Animated playground for Rx Observables
- RxViz - Animated playground for Rx Observables
- jaredly/rxvision: visualizer debugger for reactive streams
- staltz/rxmarbles: Interactive diagrams of Rx Observables
- RxMarbles: Interactive diagrams of Rx Observables
- 渔人和 Rxjs 的故事,这次一定教会你前端必会的 Rxjs
- [译] 看动画,学 RxJS
- RxJS in Action
- RxJS-CN/rxjs-articles-translation: RxJS 优质文章翻译
- RxJS v6 学习指南
- RxJS 学习中文资料
- 全面拥抱 Reactivity: RxJS, RSocket & Svelte
- 作为前端,你需要知道 RxJS
- canvas 实践小实例二 —— 扇形
- 深入浅出 JavaScript 异步编程
- JavaScript 异步编程_前端学习
- JavaScript 知识图谱:ECMAScript、DOM、BOM、HTML5、计算机网络
- 从浏览器多进程到 JS 单线程,JS 运行机制最全面的一次梳理
- 如何实现一个深拷贝
- Object()的方法一览
- Promise 之你看得懂的 Promise
- 深入理解 JavaScript 的类型转换
- 【JS 进阶】你真的掌握变量和类型了吗
- 记一次面试题,正则表达式(?=a)是什么意思?
- 【JS 迷你书】类型转换之拆箱操作
- 《三分钟阅读》7 个有用的 JavaScript 技巧
- 我是如何将业务代码写优雅的
- JS 中的 null 和 undefined,undefined 为啥用 void 0 代替?
- async/await 优雅的错误处理方法
- JavaScript 代码简洁之道
HTML
- 利用废弃的 html rel import 实现页面 include 功能
- 盘点 HTML 字符串转 DOM 的各种方法及细节
- Javascript Import maps
- 浏览器沙盒是什么
- 浏览器沙箱模型
- 你真的了解回流和重绘吗
- 浏览器的回流与重绘 (Reflow & Repaint)
iframe
Web Component
- 深入理解 Shadow DOM v1
- 你想要了解的 Shadow DOM 都在这里
- 声明式 Shadow DOM
- 在 React 中使用 WebComponents 组件的最佳实践
- 你不知道的 Web Components - 过去和未来
- polyfills
- Web Component
- Web Components 入门实例教程
CSS
- CSS Modules 用法教程
- BEM(Class 命名规范)
- CSS(MDN web docs)
- Flex 布局教程
- Less 中文网
- Sass
- PostCSS
- SASS 用法指南
- CSS in JS 简介
- FLEXBOX FROGGY(学 Flex 的小游戏)
React
- Next.js
- 手摸手实现 react-router
- 从路由原理出发,深入阅读理解 react-router 4.0 的源码
- 前端路由实现与 react-router 源码分析
- 「源码解析 」这一次彻底弄懂 react-router 路由原理
- 30 分钟精通 React Hooks
- react-worker-dom
- react-app-rewired(覆盖 Create React App 的 Webpack)
- customize-cra(覆盖 Create React App 的 Webpack)
- React Query(React Hook 请求库)
- swr(React Hook 请求库)
- React
- Create React App 中文文档
- React Router
- Redux
- Redux Toolkit
- React Lifecycle
- React Hooks 原理
- How to fetch data with React Hooks?
- React Hooks 完全上手指南
- React 的性能优化(一)当 PureComponent 遇上 ImmutableJS
- React 源码解析
- React 源码系列(一): 总结看源码心得及方法感受 #1
- [译] React-Redux 官方 Hooks 文档说明
- Redux Toolkit
- reduxjs/cra-template-redux: The official Redux+JS template for Create React App
- redux-toolkit-example-ts(示例代码)
- 如何管理好 10 万行代码的前端单页面应用
- React 的性能优化(一)当 PureComponent 遇上 ImmutableJS
- [译] React-Redux 官方 Hooks 文档说明
- Immutable 操作在 React 中的实践
- Redux 入门教程(一):基本用法
- Redux 入门教程(二):中间件与异步操作
- Redux 入门教程(三):React-Redux 的用法
- How to fetch data with React Hooks?
- 2020 年你应该知道的 React 库
- React Hooks 究竟有多慢?
- 终于搞懂 React Hooks 了!!!!!
- 关于 Vue 和 React 的一些对比及个人思考(中)
- React 开发必须知道的 34 个技巧【近 1W 字】
- 使用 70 行代码配合 hooks 重新实现 react-redux
- 使用 React Hooks + Context 打造简版 Redux
- 2019 年了,整理了 N 个实用案例帮你快速迁移到 React Hooks
- React Hooks 详解 【近 1W 字】+ 项目实战
- React16:Hooks 总览,拥抱函数式 (这大概是最全的 React Hooks 吧)
- React hooks 实践
- 30 分钟精通 React Hooks
- Redux-thunk 快速入门
- Immutable 操作在 React 中的实践
- 使用 redux-observable 实现组件自治
- React 拾遗:从 10 种现在流行的 CSS 解决方案谈谈我的最爱 (下)
- React 拾遗:从 10 种现在流行的 CSS 解决方案谈谈我的最爱 (上)
- [译] 关于 React Router 4 的一切
- React 路由鉴权
- react-router4 基于 react-router-config 的路由拆分与按需加载
- 快速搭建你的 github pages 个人博客 —— 基于 Create-React-App 的单页面应用实践
- 从 0 到 1 快速构建基于 create-react-app 的脚手架
- 【长文慎入】一文吃透 React SSR 服务端渲染和同构原理
- 技术胖的 2019 新版 React 全家桶免费视频(84 集)
- React 组件设计实践总结 02 - 组件的组织
- React 组件设计实践总结 01 - 类型检查
- [译] 2019 React Redux 完全指南
- 掘金最污的 React16.x 图文视频教程(2 万 5 千字长文-慎入)
Vue
- 尤雨溪 - 在框架设计中寻求平衡 | JSConf.Asia 2019
- vue-markdown-loader
- vitepress(静态文档生成)
- Vue.js 3 中文
- Vuex
- Vue Router
- Vue CLI
- Vue Loader
- Vue.js
- Vue 插件开发指南
- eslint-plugin-vue
- VuePress (Vue 驱动的静态网站生成器)
- 剖析 Vue.js 内部运行机制
- DMQ/MVVM(剖析 Vue 实现原理,如何实现双向绑定 mvvm)
- 深度剖析:如何实现一个 Virtual DOM 算法
- Vue.js 技术揭秘
- Vue SSR 指南
- Nuxt (Vue.js 服务端渲染)
- Vue Apollo (在 Vue.js 应用中集成 GraphQL)
- Vue I18n (国际化插件)
- Vue Test Utils (Vue.js 官方的单元测试实用工具库)
- vue-cli-plugin-i18n
- nuxt-property-decorator
- 为什么 Proxy 可以优化 vue 的数据监听机制
- Vue.js 的 computed 和 watch 是如何工作的?
- 深入理解 Vue 的 watch 实现原理及其实现方式
- vue + typescript 新项目起手式(Vue 2.x 版本)
- vue + typescript 进阶篇(Vue 2.x 版本)
- 美团点评点餐 Nuxt.js 实战(Vue 2.x 版本)
- 浅谈使用 Vue 构建前端 10w+ 代码量的单页面应用开发底层(Vue 2.x 版本)
- Vue2.0 探索之路——生命周期和钩子函数的一些理解(Vue 2.x 版本)
- vue-cli3 项目从搭建优化到 docker 部署(Vue 2.x 版本)
- 离职后才搞懂 vue 项目开发流程中的疑惑点(Vue 2.x 版本)
- Vuex 带来全新的编程体验(Vue 2.x 版本)
- vue-cli3 从搭建到优化(Vue 2.x 版本)
- 少年,撸猫吗(Vue 2.x 版本)
- 结合 vue-cli 来谈 webpack 打包优化(Vue 2.x 版本)
Svelte
- Svelte 官网
- Svelte 教程
- Virtual DOM is pure overhead
- Rethinking reactivity
- Rethinking "Rethinking Reactivity" - Svelte 5 Introduces Runes
- Introducing runes
- The Svelte Compiler Handbook(Svelte 编译原理手册)
- 看完 Svelte 纪录片才知道它为什么在国外比国内火
- 前端新宠 Svelte 带来哪些新思想?赶紧学起来!
- Svelte 的异步更新实现原理
HTTP
- Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
- HTTP/1.1: Caching in HTTP
- Resource Hints
- SameSite 那些事
- 深入理解 Cookie 的 SameSite 属性
- 本地 https 环境解决方案
- 内网穿透神器-Serveo
- swr(React Hooks for Data Fetching)
- 缓存
- HTTP 缓存(附 Express 实现代码)
- 使用反向代理进行内网穿透
- 【PWA 学习与实践】(3) 让你的 WebApp 离线可用
- HTTP/2 push is tougher than I thought
- 浏览器的强缓存和协商缓存
- 生产环境浏览器 Strict MIME TYPE Checking 问题解决
- 同站 和 同源 你理解清楚了么?
- 内容安全策略(CSP)
- 计算机通识
- 跨域资源共享 CORS 详解(阮一峰)
- 浏览器缓存知识小结及应用
- GET 方法与 POST 方法的区别
- 图解:HTTP 范围请求,助力断点续传、多线程下载的核心原理
- 资源预加载 - 性能优化需知~
- 用 preload 预加载页面资源
- preload 和 prefetch
- Cookie
- 彻底明白 ip 地址,区分 localhost、127.0.0.1 和 0.0.0.0
- 前端跨域整理
Git
- Github Copilot
- 使用 git hooks 钩子实现 gitlab 的代码服务器自动更新
- ghooks
- AngularJS Git Commit Message Conventions
- A Note About Git Commit Messages
- Writing Git commit messages
- husky(Git 钩子配置工具)
- Simple Git(Node.js 的 Git 命令封装)
- Git 教程(廖雪峰)
- Your AI pair programmer
- commit_msg(git 钩子文档)
- 语义化版本 2.0.0(语义化版本控制规范)
- Git 分支 - 变基
- cz-cli(cz 工具)
- cz-customizable(cz 适配器)
- @commitlint/config-conventional(cz 适配器)
- commitlint(cz 校验工具)
- commitlint-config-cz(cz 校验工具的校验规则)
- validate-commit-msg(cz 校验工具)
- conventional-changelog(cz 日志生成器)
NPM & Yarn
- npm 的 package.json 和 package-lock.json 更新策略
- Compare package download counts over time
- Life Cycle Scripts
- npm ci(CI / CD 依赖安装)
- npm update(依赖升级)
版本规范
Node.js
- source-map(Sourcemap 解析工具)
- Security, Modules and Node.js
- How does Node.js work?
- nvm(Node 版本管理工具)
- lint-md(Markdown 格式校验工具)
- minimist(轻量的命令参数解析)
- zx(Google 出品的 Shebang 助力器)
- shelljs(Shell 脚本封装)
- tasklist(Windows tasklist 命令封装)
- taskkill(Windows taskkill 命令封装)
- execa(child_process 增强)
- open(打开浏览器 URL、文件和可执行文件)
- ws(WebSocket 通信)
- node-http-proxy(代理转发)
- ngrok(内网穿透 & 代理)
- download(下载提取文件)
- abort-controller(取消请求)
- portfinder(空闲端口发现器)
- node-ip(IP 地址工具)
- http-proxy-middleware(网络代理中间件)
- AnyProxy(Node.js 网络代理工具)
- decompress(文件解压缩)
- compression(文件压缩)
- form-data(表单数据流,可用于上传文件)
- node-progress(进度条打印)
- winston(日志)
- find-root(发现 package.json 所在目录层级)
- dotenv(环境变量处理)
- ejs(模板引擎)
- uid(固定长度的 id 生成器)
- parse-json(解析 JSON 携带详细的错误信息)
- node-qrcode(二维码生成器)
- cheerio(JQuery API 的服务端实现)
- normalize-package-data(规范化 package.json 元数据)
- strip-ansi(去除 ANSI 转义码)
- url-join(URL 规范化拼接)
- node-regedit(Windows 注册表)
- htmlparser2(HTML & XML 解析器)
- parse5(HTML 解析器)
- Node.js
- ts-node
- NodeJS 开发工具栈[Awesome](开发工具箱)
- awesome-nodejs[Awesome]
- mongoose
- mongoose 中文
- ORM 实例教程
- TypeORM
- TypeORM 中文
- linkerd2
- Express
- Koa
- Egg
- Socket.io
- Node Redis
- Midway
- GraphQL
- Prisma OSS Documentation
- Apollo Client
- node-inspector(Node.js debugger based on Blink Developer Tools)
- execa
- parse-json
- gitbeaker
- node-fetch
- node-inspector
- Mongoose the Typescript way…?
- 使用 TypeScript 开发 Node.js
- 30 分钟理解 GraphQL 核心概念
- Open Sourcing GraphQL Middleware - A Library to Simplify Your Resolvers
- RPC vs REST vs GraphQL
Lint & Prettier
- TSLint in 2019
- eslint-loader
- eslint-webpack-plugin
- Why Prettier?
- Prettier vs. Linters
- eslint-plugin-jest
- eslint-plugin-tsdoc
- markdownlint
- markdownlint-cli
- markdown-it(Markdown 解析为 HTML)
- 层叠配置 (Monorepo 需要注意)
- typescript-eslint(TypeScript 的 ESLint 和 Prettier 工具集)
- eslint-config-prettier(检查格式规则配置是否存在冲突)
- lint-staged(Git 暂存区代码检查)
- ESLint(可组装的 JavaScript 和 JSX 检查工具)
- ESLint couldn't determine the plugin uniquely.
- Prettier(An opinionated code formatter)
Module Federation
- Webpack / Module Federation
- Dynamic Remotes, Webpack Module Federation
- Module Federation: streamline your microfrontends
Babel
- Babel
- @vue/babel-preset-app(Vue CLI3 的 Babel 插件集)
- @babel/preset-env(Babel 插件集)
- Deploying ES2015+ Code in Production Today
- Why is Babel a monorepo?
构建工具
- 【webpack进阶】可视化展示webpack内部插件与钩子关系📈
- 揭秘webpack loader
- 揭秘webpack plugin
- Rspack
- parcel
- rollup-starter-lib
- esbuild(ES6+ 构建)
- esno(类似于 tsx 的 esbuild 增强)
- Vite(esbuild + Rollup)
- SWC(基于 Rust)
- minidev(支付宝小程序构建工具)
静态站点生成器
- dumi
- react-markdown
- react-static
- TSDoc
- JSDoc
- JSDoc 中文
- typedoc
- vuepress-plugin-typedoc
- typedoc-plugin-markdown
- Shields.io(徽章生成器)
- README Specification
- VuePress (Vue 驱动的静态网站生成器)
CI / CD
- Github Action Marketplace
- Learn YAML in five minutes!
- DingTalk Release Notify
- 大公司里怎样开发和部署前端代码?(张云龙)
- GitHub Actions
- GitHub Actions 入门教程(阮一峰)
- pm2(The Most Advanced Production Process Manager for Node.js)
- Jenkins
- Jenkins 记录二:远程构建
- Jenkins+Node.js 持续集成
- nginx
测试
- JavaScript 程序测试
- JavaScript unit testing frameworks in 2022: A comparison
- javascript-testing-best-practices
- ts-jest
- COVERALLS(测试报告上传平台)
- node-coveralls
- Puppeteer(无头浏览器)
- Jest
- javascript-testing-best-practices
- JavaScript 程序测试
- Nightwatch.js
- Mocha
- Chai
- Karma
- awesome-jest[Awesome]
- ui-testing-best-practices
Chrome DevTools
- Chrome DevTools Frontend 运行原理浅析
- 深入理解 Chrome DevTools
- 如何定制 chrome 开发者工具
- 玩转 Chrome DevTools,定制自己的调试工具
- Chrome DevTools 远程调试协议分析及实战
- DevTools debugging workflow
- Chrome DevTools 实现原理与性能分析实战
- Chrome DevTools 远程调试协议分析及实战
- Chrome DevTools Protocol
- Chrome DevTools Frontend 运行原理浅析
- Chrome DevTools 中文手册
- Chrome 开发工具指南
- Chrome 开发者工具中文手册
- chii(远程调试工具)
- devtool
- devtools-protocol
- chrome-remote-interface
- awesome-chrome-devtools[Awesome]
- devtools-frontend
调试
- 揭秘浏览器远程调试技术
- VS Code - Debugger for Chrome
- 远程调试原理及端智能场景下远程调试实现方案
- 利用 ADB 协议建立 PC 与手机端本地 unix 套接字的连接
- 了解 adb 的基本原理
- ADB 通信
- adb forward 的细节(1):原理概述
- San DevTools 技术解析(上)
- San DevTools 技术解析(中)
- San DevTools 技术解析(下)
- 移动端 WEB 真机调试全攻略
- 抖音小程序调试原理
- 云真机平台 H5 性能测试的设计与实现
- 揭秘浏览器远程调试技术
- 深入理解 Node.js 的 Inspector
- [译] 在 Chrome 开发者工具中调试 node.js
- Node 调试指南 - Inspector 协议
扩展
- 什么是微内核架构设计?
- 插件开发指南 | Vue CLI
- Chrome Extension 官方
- How to build a plugin system on the web and also sleep well at night
- 大型 Web 应用插件化架构探索
组件库
- React Flow
- Svelte Material UI
- Formliy(可拓展组件库的动态表单解决方案)
- form-render(动态表单解决方案)
- react-error-boundary(React 错误边界组件)
- ant-motion(React 动效库)
- pro-components(Ant Design Pro)
- Ant Design
- Element Plus(基于 Vue 3,面向设计师和开发者的组件库)
- Element (基于 Vue2.0 的饿了么桌面端组件库)
- Ant Design Vue
- Ant Design Pro (开箱即用的中台前端/设计解决方案)
- Antd ProComponents
- Salt UI (高效、简洁的移动端 UI 组件库)
- Ant Design Mobile 5.0
- ant-design-pro-vue (开箱即用的中台前端/设计解决方案)
- vue-antd-admin (一个开箱即用的中后台前端/设计解决方案)
- Fusion
- Muse-UI (基于 Vue 2.0 优雅的 Material Design UI 组件库)
- Vue Material
- Bootstrap
- Bootstrap Table
- Bulma
性能优化
- 前端性能优化之旅
- 使用 Proload/Prefetch 优化你的应用
- preload-prefetch-and-priorities-in-chrome
- Preload,Prefetch 和它们在 Chrome 之中的优先级
- 得物 App H5 秒开优化实战
- First Contentful Paint (FCP)
- Largest Contentful Paint (LCP)
- Faster page loads using server think-time with Early Hints
工程化
- Rollup 的基本使用
- Git 中文
- Webpack 中文
- Gulp 中文
- npm 中文
- yarn 中文
- 飞冰 - 基于 React 的研发解决方案
- 深入浅出 Webpack
- webpack-chain (生成和修改 Webpack 配置信息的链式 API 集)
- CKEditor 4(Smart WYSIWYG HTML editor)
- 75 Best Node.js Command Line Apps & Utilities | FireBear[Awesome]
- Node.js CLI modules
- rollup.js 中文
- gulp-typescript
- Module Federation
- Workspaces in Yarn
- Why you should use a single repository for all your company’s projects(多项目单仓库思考)
Monorepo
监控
运维
SSR
客户端
- Flutter 中文网
- Flutter 实战
- 简述 Chromium, CEF, Webkit, JavaScriptCore, V8, Blink
- 浅谈 Native、Web App、Hybrid、RN 和 Weex 优劣
- 用 JS 开发跨平台桌面应用,从原理到实践
- Hybrid 开发:JsBridge - Web 和客户端的桥
- JSBridge 实战
- 高并发 IM 系统架构优化实践
- 再学 Android 之 WebView
跨端
- Yoga 跨平台布局引擎
- Yoga Layout
- 跨平台布局引擎Yoga的学习和使用
- 【翻译】Yoga 教程: 使用跨平台布局引擎
- 在项目中使用Yoga 布局引擎
- 在项目中使用Yoga 布局引擎
- JavaScript Core
- Android 中 JNI 的使用:java 调用 C++ C++调用 JAVA
- OC 与 C++相互调用
- 移动端 JS 引擎哪家强?
- V8、JSCore、Hermes、QuickJS,hybrid 开发 JS 引擎怎么选
- 聊一聊桥接(JSBridge)的原理
- Android 中 JSBridge 的原理与实现
- Android JSBridge 原理与实现
- Android 混合开发之 JsBridge
- Android 多线程:手把手教你使用 HandlerThread
- JSI,V8 JS 引擎优化
- QuickJS
- Design Of V8 bindings
- Getting started with embedding V8
- JS Binding 技术基础
- JS Binding 技术进阶
- v8pp
- nbind
- rusty_v8
- J2V8
- LiquidCore
- nodejs-mobile
- emscripten
- binaryen
- Hummer
- lynx-native
- libuv
WebAssembly
- Webassembly 应用场景及其关键技术初探
- WebAssembly 生态及关键技术初探(续)
- c++项目转成 wasm 全过程
- 在 WebAssembly 中实现回调的方式
- WebAssembly 在 MOSN 中的探索与实践
- 深入 WebAssembly 之解释器实现篇
- 通过 WebAssembly 使用异步 Web API
- WebAssembly C++ 阻塞调用 JS 异步函数
- wasm3
- wasmer
- wasmtime
- WAVM
- wabt
- wasm-micro-runtime
- wasm-c-api(WebAssembly C++ 封装)
- WebAssembly Binding
微前端
- garfish(A powerful micro front-end framework)
- Micro Frontends: Building a modern webapp with multiple teams
- 一起探討 Micro Frontends 的世界
- 让 iframe 焕发新生
- 极致的微前端方案_无界的源码剖析
- 一文读懂微前端架构
- 微前端架构的几种技术选型
- 字节跳动是如何落地微前端的
- 微前端是否值得开发者采用?
- 微前端如何落地?
- 微前端的核心价值
- 将微前端做到极致-无界微前端方案
- 将微前端做到极致-无界微前端方案
- 如何在大型应用中架构设计微前端方案
- 微服务架构设计模式
- Why Not Iframe
- 沙箱逃逸
- Events not registered inside shadow dom
- 基于 iframe 的全新微前端方案
- 这种微前端设计思维听说过吗?
- 如何在大型应用中架构设计微前端方案
- [RFC]微前端样式隔离方案
- icestark
- import-html-entry(HTML Entry)
- single-spa
- single-spa-login-example-with-npm-packages
- micro-app
- micro-frontends
- micro-frontends
- proposal-shadowrealm(隔离提案)
- SES
- Endo (还在开发)
- LavaMoat(安全沙箱)
- Secure Modular Runtimes
- Import Maps 隔离提案
- Jailed — flexible JS sandbox(浏览器和 Node.js 沙箱库)
- 微前端的核心价值
- Thinking in Microfrontend (微前端的那些事儿)
- Micro Frontends
- qiankun
- single-spa
- 可能是你见过最完善的微前端解决方案
- 探索微前端的场景极限
- 微前端入门
- 了解什么是微前端
- [译] 微前端
Rust
- The Rust Programming Language
- Rust by Example
- The Rust Edition Guide
- The Rust Edition Guide
- The rustc book
- The rustdoc book
- Command line apps in Rust
- Rust and WebAssembly
- Rust error codes index
- Rust Is The Future of JavaScript Infrastructure
- TOML
- cargo
- rust-clippy
- Docs.rs
- Ray Tracing in One Weekend
- Yew
- Rust
- The Rust community’s crate registry
- Rust 程序设计语言(简体中文版)
- Rust by Example
- Command line apps in Rust
- rustfmt
低代码
IDE
风格指南
编程指南
- 函数式编程指北
- 可伸缩的同构 Javascript 代码
- 界面之下:还原真实的 MV* 模式
- 函数式编程初探
- 函数式编程入门教程
- Pointfree 编程风格指南
- 简明 JavaScript 函数式编程——入门篇
- 函数式编程,真香
- Java SPI 机制详解
- InversifyJS
- InversifyJS/ecosystem.md
- 如何基于 TypeScript 实现控制反转
- reflect-metadata
- Reflect
- Decorators for ES6 classes
- 编程范式(Programming Paradigm)
- What is the precise definition of programming paradigm?
- 主要的编程范例
- 再谈编程范式—程序语言背后的思想
- 面向接口编程详解(一)
- 那些年我们错过的响应式编程
- 响应式编程的实践
- 什么是响应式编程(Reactive Programming)
- 函数式编程 - 实现响应式框架
- Reactive 响应式/反应式编程
- 响应式编程到底是什么?
- 响应式编程总览
- 面向 Model 编程的前端架构设计
- Understanding JavaServer Pages Model 2 architecture
- GUI Architectures
- javascript 设计模式系列
解决方案
编译器相关
- acorn
- csstree
- astexplorer
- 前端编译原理浅析及应用场景(Babel、PostCSS)分析
- ANTLR 4 简明教程
- ANTLR
- MiniDecaf 编译实验
- antlr4
- grammars-v4
- antlr4ts
- riscv-pk
- minidecaf
- homebrew-riscv
- ANTLR:在浏览器中玩语法解析
- Antlr4 简介
- antlr4-demo
- Antlr4 简易快速入门
- Antlr4 前端应用与实践
- ANTLR:在浏览器中玩语法解析
Mac App
- Arc(提效浏览器)
- KeyCue(快速显示 App 的所有快捷键)
- keycastr(按键提示)
- Rectangle(窗口分屏工具)
- Karabiner-Elements(键盘映射)
- Keyboard Maestro(超级强大的键盘提效工具)
- XMind(思维导图)
- iHosts(域名代理)
- lightproxy(系统代理)
- ClashX(科学上网)
- whistle(抓包调试)
- Raycast(工作流)
- Magnet(窗口分屏)
- Alfred(工作流)
- dash
- uTools
- WoX
Chrome 插件
- Json Formatter
- React Developer Tools
- XSwitch(请求代理工具)
- Google 翻译
- Header Editor(请求头携带处理)
- Vue.js devtools
- Octotree
VS Code 插件
- Auto Rename Tag
- Code Spell Checker(单词拼写错误检查)
- Code Time
- Docker
- Document This(JS Doc 自动生成)
- GitHub Copilot(AI 代码生成)
- GitHub Copilot Chat
- GitLens — Git supercharged
- IntelliCode
- Jest
- Pretty TypeScript Errors(格式 TypeScript 错误)
- Search node_modules(快速搜索 NPM 库包)
- Svelte for VS Code
- Tailwind CSS IntelliSense
- Vetur
- open in browser
- markdownlint
- GitHub Actions
- ESLint
- Prettier
- Vuetur
终端
- Z shell
- zsh-z
- autojump
- zsh-autosuggestions
- zsh-completions
- zsh-syntax-highlighting
- ohmyzsh - Themes
- zplug
- Fish Shell
- POSIX Shell
- Shebang
- ngrok(内网穿透)
- mkcert
- hyper
- warp
- alacritty
- tabby
- Rio
- iTerm2-Color-Schemes
- Homebrew
- sindresorhus/emoj: Find relevant emoji from text on the command-line
- bash(1) - Linux man page
- iterm2
- ohmyzsh
- powerlevel10k