前端大仓库之下husky解决方案

391 阅读1分钟

前言

日常中前端开发是前端一个仓库,后端一个仓库,前后端分开部署。项目没有放在同一大仓库下,然后我们就可以按照网上很多husky教材进行团队代码的同一个校验。 随着业务的发展,前端项目开发的过程中,我们会遇到前端后端代码需要放在同一个仓库下,并且前端不仅仅只有一个项目,也许会有多个,大仓库的模式进行开发,例如微前端项目的开发

项目目录

A5B04012-155D-4D8B-9786-7F008E6F21C4.png

解决方案

步骤一,我们现在大仓库下面去初始化项目,并且安装husky

npm init // 初始化完,才去安装husky
npm i husky -D --registry=https://registry.npm.taobao.org

安装完成之后,当前项目的根目录会出现.husky的文件夹,在.husky文件下面建一个pre-commit 脚本文件内容如下:

###
 # @Author: Vinton
 # @Date: 2022-07-25 21:35:34
 # @Description: file content
### 
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

git status | grep modified | awk '{print $2}' > chanceList.txt
node script/husky.js

在项目的根目录创建一个script/husky.js 文件内容如下:

/*
 * @Author: Vinton
 * @Date: 2022-07-18 09:44:43
 * @Description: file content
 */
const fs = require('fs')
const shell = require('shelljs');
const path = require('path')
const subRepository = require('../package.json').subRepository // 需要到package.json自定义需要校验的项目目录字段
fs.readFile('chanceList.txt', (err, data) => {
    if (err) {
        throw err
    }
    subRepository.forEach(item => {
        if (data.toString().includes(`${item}/src/`)) { // 判断当前的变更的文件是否在src下面,需要触发去触发校验
            shell.cd(path.resolve(__dirname, `../${item}`))
            shell.exec('npx lint-staged') // 触发每个项目里面的前端lint-staged,如果是其他的校验触发,可以自行修改
        }
    })
})

然后你就可以各自去到不同的项目目录下面去安装自己需要的lint-stated,husky.js 去自定义需要的触发的条件和时机

实现思路

  1. 通过大仓库的husky获取变更文件,存入当前根目录下的changeList.txt(不提交git)
  2. 通过node触发脚本,拿到changeList.txt,git提交的文本记录,然后到对应的设定好的目录下面去执行校验

例子仓库传送门