通过 code 命令快速打开 VS Code
Windows 操作系统默认支持使用 code 命令在命令行中打开 VS Code,然在 MacOS 系统上,我们需要手动安装 code 命令,来支持该操作。
前提默认已安装 VS Code,未安装可前往 【Visual Studio Code】 下载安装。
安装 Code
打开 VS Code
键盘按下 Command + Shift + P
输入 install code
选择 Shell Command: Install 'code' Command in PATH
安装成功后,出现弹框提示
使用在你的工作文件夹中,打开 Terminal 终端,并输入 code path,如下:
123code ./或code ./blog
TODO: 如果提醒你需要授权给终端操作应用的权限,确认即可。
如何正确使用 Git rebase 指令
理解 Rebase 变基git rebase 命令的文档描述是 Reapply commits on top of another base tip,从字面上理解是「在另一个基端之上重新应用提交」,这个定义听起来有点抽象,换个角度可以理解为「将分支的基础从一个提交改成另一个提交,使其看起来就像是从另一个提交中创建了分支一样」,如下图:
假设我们从 Master 的提交 A 创建了 Feature 分支进行新的功能开发,这时 A 就是 Feature 的基端。接着 Matser 新增了两个提交 B 和 C, Feature 新增了两个提交 D 和 E。现在我们出于某种原因,比如新功能的开发依赖 B、C 提交,需要将 Master 的两个新提交整合到 Feature 分支,为了保持提交历史的整洁,我们可以切换到 Feature 分支执行 rebase 操作:
123git pull origin master --rebase或git rebase master
rebase 的执行过程是首先找到这两个分支(即当前分支 Feature、 rebase 操作的目标基底分支 Master) ...
什么是 OAuth 2.0 ?
因为工作的原因,需要提供一个根据用户代码仓库构建现代化应用的能力。当用户提交了代码,将自动拉取代码并触发构建部署的工作流。上诉场景让我接触到 OAuth App 的概念。
下文主要是针对 Oauth2.0 做一个介绍。
什么是 OAuthOAuth官方的简介是:
An open protocol to allow secure API authorization in a simple andstandard method from web, mobile and desktop applications.
随着大量开放平台的出现,建立在开放平台之上的各种第三方应用也在大量冒出,出于对安全性和统一标准的要求,于是出现了 OAuth 协议
简单来说,OAuth 是一种开放的协议,他能为桌面程序或者基于 BS 的 web 应用提供一种简单的标准方式去访问需要用户授权的 API(ApplicationProgramming Interface)服务,而且任何第三方都可以使用 OAuth 认证服务。在为第三方提供服务的过程中,他还能起到保护用户账号安全的作用。
OAuth 2.02010 ...
通过 @serverless-devs/s 部署静态网站到阿里云函数计算FC
介绍托管静态网站的云服务,目前市面上还是挺多的,可以参见之前的文章【静态网站托管服务】。适用类型:
如果你是一个后端开发者
如果你是一个前端开发者
如果你是一个接单小能手
如果你是一个创业公司
在对比了几款不同的云产品之后,决定使用阿里云的函数计算来托管构建出来的静态网站 FC。函数计算每月前 100 万次的免费函数调用额度,以及弹性实例自带的 500 Mb 存储空间对于大多数开发者而已,基本够用了,一般不会产生额外费用。
部署静态网站到 Custom Runtime 函数假设我们现在有如下结构的前端工程
12345/├ dist/ 待部署的构建产物│ └ index.html├ src/└ package.json
1、编写一个简单的 HTTP 服务器// app.js
12345678910111213141516const express = require("express");const app = new express();// 使用 dist 文件夹中的内容对外提供静态文件访问app.use(express.static('dist ...
正则表达式
语法
字符
描述
\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\”匹配“\”而“(”则匹配“(”。
^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^也匹配“\n”或“\r”之后的位置。
$
匹配输入字符串的结束位置。如果设置了 RegExp 对象的 Multiline 属性,$也匹配“\n”或“\r”之前的位置。
*
匹配前面的子表达式零次或多次。例如,zo能匹配“z”以及“zoo”。等价于{0,}。
+
匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
?
匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。
{n}
n 是一个非负整数。匹配确定的 n 次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个 o。
{ ...
了解 Github Webhooks 钩子
前言
Github Webhooks 允许我们构建或设置集成,以订阅 GitHub.com 上的某些事件。 当触发其中某个事件时,将向 Webhooks 配置 Paloyd URL 发送 HTTP POST 请求。可用于更新外部议题跟踪器、触发 CI 构建、更新备份镜像,甚至部署到生产服务器。
场景
个人博客如: 代码提交远程仓库 => 触发 Github Webhooks => 服务器触发器监听 => 同步更新博客
因本文重点在介绍 webhooks 的自动化功能,我们在此场景的基础上,简化一下步骤,将远程服务器改为本地服务器。如: 代码提交远程仓库 -> 触发 Github Webhooks -> 本地服务触发器监听 -> 拉取最新代码
开始配置 Shell 脚本
创建 blog_deploy.sh 文件
12345678910#!/bin/bashLOG_FILE="/Users/heiemooa/project/code/blog_ ...
抽象语法数(AST) -- babel 插件
介绍babel是 Javascript 的编译语法器,确切来说是源码到源码的编译器,通常也叫做“转换编译器(transpiler)。意思是说你为 Babel 提供一些 JavaScript 代码,Babel 更改这些代码,然后返回给你新生成的代码。
抽象语法数(AST)这个处理过程中的每一步都涉及到创建或是操作抽象语法树,亦称 AST。
123function square(n) { return n * n;}
这个程序可以被表示成如下的一棵树:
1234567891011121314151617181920- FunctionDeclaration: - id: - Identifier: - name: square - params [1] - Identifier - name: n - body: - BlockStatement - body [1] - ReturnStatement - argument - BinaryExpressio ...
用 commitizen 规范 git commit 提交说明
前言
Git 作为目前开源社区最为火热的分布式系统版本管理工具,当我们在提交代码之前,都是需要添加 Commit message(提交说明),否则就不允许提交。
1$ git commit -m "hello world"
上面代码的 -m 参数,就是用来指定 commit message的。
如果一行不够,可以只执行 git commit,就会跳出文本编辑器,让你写多行。如
1$ git commit
基本上,你写什么都行。
我们先来看下平时提交的 commmit 日志,只是简单的说明本次提交的信息,如
我们再来看下具有一定规范性的 commit 日志,是不是更加清晰明了,有了一定的规范,对提交类型做了区分。
一般来说,commit message 应该清晰明了,说明本次提交的目的。
目前,社区有多种 Commit message 的写法规范。这种是 Angular 规范,中文。这是目前使用最广的写法,是比较合理和系统化,并且有配套的工具。
作用
提供更多的历史信息,方便快速浏览。
可以过滤某些 commit(比如文档改动),便于快速查找信息。
可以直接从 ...
通过 Lerna 进行多个软件包的管理
前言
将大型代码仓库分割成多个独立版本化的软件包(package)对于代码共享来说非常有用。但是,如果某些更改 跨越了多个代码仓库的话将变得很 麻烦 并且难以跟踪,并且跨越多个代码仓库的测试将迅速变得非常复杂。为了解决这些(以及许多其它)问题,某些项目会将 代码仓库分割成多个软件包(package),并将每个软件包存放到独立的代码仓库中。
Lerna 是一种工具,针对 使用 git 和 npm 管理多软件包代码仓库的工作流程进行优化。
入门123npm install --global lerna // 全局安装 lernagit init hfs-lerna-test && cd hfs-lerna-test // 创建文件夹, hfs-lerna-test 仅代表当前例子文件夹名lerna init // 初始化一个lerna项目结构,如果希望各个包使用单独版本号可以加 -i | --independent
你的代码仓库目前应该是如下结构:
1234- ...
位运算相关知识
前言:计算机是用补码进行计算与存储
对于有符号数而言,二进制的最高位是符号位 ,0表示正数, 1表示负数;
正数的原码、反码、补码都一样;
负数的原码是其正数符号位为1,其他位和正数的二进制位相同;负数的反码等于负数原码符号位不变,其他位按位取反;负数的补码等于负数的反码+1;
go中的取反操作^,c、java、c++中取反操作~;
按位与 &运算,两个全为1,结果为1,否则为0;
按位或|运算,一个为1就为1;
按位异或^运算,两个不同,结果为1 ,相同则为0;
左移运算<<,符号位不变,低位补 0;
右移运算>>,低位溢出,符号位不变,并用符号位补溢出的高位;
go中位清除&^