1.commit阶段检测
安装lint-staged
npm i lint-staged
在package.json中配置规则
{
...
"lint-staged":{
"*.ts|*.tsx":[
"npx tsc --noEmit --allowJs",
"npx eslint",
}
"husky":{
"hooks":{
"pre-commit":"npx lint-staged",
}
}
}
配置之后,执行git commit则会触发校验。它只会对暂存区又称 staged(也就是已经被git add)的代码进行校验检查。
延伸还有哪些hooks?
post-commit:在 Git commit 命令执行完成后触发,可以用来做一些日志记录、通知等操作。
post-merge:在执行 Git merge 命令之后触发,可以用来做一些操作,比如更新依赖等。
pre-push:在执行 Git push 命令之前触发,可以用来做一些代码检查、测试等操作。
2.ci阶段检测
git merge-base 获取 1 和 2 的最新祖先commit id。
--name-only 只显示文件名列表(而不是显示具体内容)
#!/bin/bash
set -e
# 检测ci错误
PARENT_PATH="packages/order/ffa-order/"
DIFF_FILE_PATH_START_INDEX=${#PARENT_PATH}
COMMIT_ID=`git merge-base HEAD^ origin/master`
DIFF_FILES=`git diff --diff-filter=ACMR --name-only ${COMMIT_ID} '*.js' '*.jsx' '*.ts' '*.tsx'`
echo "commit id: ${COMMIT_ID}"
echo "diff js files: ${DIFF_FILES[*]}"
echo "js checking start"
for DIFF_FILE in ${DIFF_FILES[*]}; do
DIFF_FILE_PATH=${DIFF_FILE:DIFF_FILE_PATH_START_INDEX}
echo "> ${DIFF_FILE_PATH}"
npx tsc --noEmit --allowJs ${DIFF_FILE_PATH} || exit 1
npx eslint ${DIFF_FILE_PATH} || exit 1
done
echo "js checking done"
# 最简单的构建和部署脚本
# 1. 安装依赖
npm install
# 2. 构建项目
npm run build
# 3. 部署到服务器
SERVER=user@example.com
DEPLOY_PATH=/var/www/my-app
# 3.1. 删除服务器上旧的部署文件
ssh $SERVER "rm -rf $DEPLOY_PATH/*"
# 3.2. 上传新的构建产物到服务器
rsync -avz --progress ./build/ $SERVER:$DEPLOY_PATH