书单

LiLiucan

LiLiucan

Web Developer

被业界称为“五部曲”的核心著作:“黑客圈简史”(A Brief History of Hackerdom)、“大教堂和大集市”(The Cathedral and the Bazaar)、“如何成为一名黑客”(How To Become A Hacker)、“开拓心智层”(Homesteading the Noosphere)和“魔法锅”(The Magic Cauldron)。

nodejs项目模块路径别名

LiLiucan

LiLiucan

Web Developer

可用的解决方案#

  1. Aliasing module paths in Node JS
  2. Node.js 配置别名 alias 的两种方法
  3. module-alias

module-alias 方案应用#

  1. 安装 module-alias
yarn add module-alias
  1. 在 src/index.ts 中注册 add module-alias
import 'module-alias/register';
  1. 在项目 package.json 中新增别名配置
"_moduleAliases": {
"@": "./bin"
},

Typescript 项目#

在项目 tsconfig.json 中增加如下配置

"paths": {
"@/*": ["./src/*"]
}

git commit message规范

LiLiucan

LiLiucan

Web Developer

Commit message格式#

每条commit message包含如下几部分:header、body和footer。header有一个固定的格式,包含三部分:type、scope和subject。

一条commit message的标准格式如下:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

header是必须的,header中的scope是可选的。 commit message的每一行文字最好不要超过100个字符,这样的话可以保证易读性。

Commit message类型#

commit message类型也就是上面说的type,有如下几种:

  • revert: 回退一个commit,subject中需要写明被回退的commit的hash,例如:revert: This reverts commit [hash]
  • feat: 新特定
  • fix:修复bug
  • docs:文档修改
  • style:一些对代码实际意义没有影响的修改(例如格式化,增加逗号,空格等等)
  • refactor: 既不是新特性也不是修复bug
  • perf:性能优化
  • test:单元测试或者集成测试相关的修改
  • chore:构建流程及工程化相关的修改

Scope#

scope为commit的影响范围,如果一个项目有多个模块,这个scope就可以对应一个模块。 以zzb-js-sdk这个项目的commit message为例:

chore(zzb-react-components): 打包配置新增externals配置,react和react-dom不打包进最终代码

Subject#

subject用于简明扼要的描述修改的内容:

  • 使用祈使句,比如:修改了...
  • 如果用英文,不要大写首字母
  • 结尾不要用标点

Body#

和subject一样,这部分应该尽量简明扼要。写清楚此次修改的动机以及和修改之前的差别。

Footer#

这部分用于说明破坏性的修改(Breaking Changes)以及需要关闭的github issuses。

我觉的不同的项目可以根据自己的实际情况定制这部分。我的做法是在这里放此次修改相关的jira链接(如果有的话)。

一个示例#

一个包含完整内容的commit message差不多是这个样子:

chore(zzb-utils): 优化打包配置
1. 升级zzb-react-components,优化打包后的代码体积
2. webpack配置中新增BundleAnalyzerPlugin
3. webpack配置中新增externals配置,解决将库代码打包进模块导致的代码体积过大的问题
jira: http://jira.xxxx.com/xxxxxx

前端常用设计模式

LiLiucan

LiLiucan

Web Developer

单例模式#

  • esmodoule 实现单例
  • 传统面向对象单例实现:懒汉模式和饿汉模式

观察者模式#

适配器(包装器)模式#

处理不同接口的兼容问题

  • 引用第三方接口的时候可以包装一层

装饰器模式#

  • React 高阶组件
  • Redux connect 方法
  • JS Decorator 语法
  • React 本身可以理解为一个 IOC 容器

控制反转

LiLiucan

LiLiucan

Web Developer

对于控制反转的理解,主要在于“反转”。 反转的是什么?是依赖。也就是管理依赖的方式不同。 一般管理依赖可以通过手动的方式。 控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。 经典案例就是Spring。

其实React也用到了IOC。

  • 不使用IOC大概应该这么写:

// 🔴 React 并不知道 Layout 和 Article 的存在。

// 因为你在调用它们。

ReactDOM.render(
Layout({ children: Article() }),
domContainer
)
  • 使用IOC,也就是React最终选择的方式:

// ✅ React知道 Layout 和 Article 的存在。

// React 来调用它们。

ReactDOM.render(
<Layout><Article /></Layout>,
domContainer
)

库、运行时和开发框架的区别

LiLiucan

LiLiucan

Web Developer

库(library)、运行时(runtime)和开发框架(framework)的区别#

库只是对外提供特定功能的接口 运行时负责解释上层的指令 开发框架应该运行与运行时之上,并对对于开发模式有一定的约束

分类示例#

  • #

    jQuery、lodash

  • 运行时#

    React

  • 框架#

    Gatsby、next.js

心智模型

LiLiucan

LiLiucan

Web Developer

“心智模式”是一种思维定式,我们这里所说的思维定式并非是一个贬义词,而是指我们认识事物的方法和习惯。

React Hooks

LiLiucan

LiLiucan

Web Developer

Class Components到hooks最重要的变化应该是心智模型的变化#

函数式组件#

Capture Value概念#

React和Vue的区别

LiLiucan

LiLiucan

Web Developer
  1. 状态变化到ui更新的过程不同#

    • Vue使用“反应式”的系统来支持细粒度的更新。
    • React任何在顶层的更新只会触发协调而不是局部更新那些受影响的组件。
  2. 编程范式不同#

  3. 心智模型不同#