我有以下根package.json:
{
"name": "project",
"private": true,
"workspaces": [
"packages/*"
],
"scripts": {
"build": "lerna run build",
"dev": "lerna run start --stream --parallel",
"format": "yarn prettier --write",
"prettier": "prettier --ignore-path .gitignore \"**/*.+(ts|tsx|json)\"",
"test": "lerna run test --"
},
"husky": {
"hooks": {
"pre-commit": "yarn format && yarn test"
}
},
"devDependencies": {
"husky": "^4.2.5",
"lerna": "^3.22.1",
"prettier": "^2.0.5"
}
}
问题是使用此设置,当我仍在处理文件时无法提交,要解决此问题,我可以使用lint暂存模块,我的问题是,如何设置它以便命令我目前仍在运行,但仅在暂存文件上运行,而没有在每个项目中安装命令的所有依赖项?由于test命令在每个项目中都运行tsc --noEmit
,因此test命令也可能是一个问题,我是否可以强制它也仅检查已暂存的文件?
答案 0 :(得分:3)
对此有另一种解决方案,因为截至目前,lint-staged
在lerna
测试命令中还不能很好地发挥作用。
该解决方案涉及在git
中使用package.json
命令来存储未跟踪和未暂存的文件,执行测试,然后在测试后重新实现未跟踪和未暂存的文件。
此方法的一个例外是,git将文件更改作为合并冲突带回,因此需要手动合并。
以下是要进行的更改:
文件: ./package.json
{
"name": "project",
"private": true,
"workspaces": [
"packages/*"
],
"scripts": {
"build": "lerna run build",
"dev": "lerna run start --stream --parallel",
"format": "yarn prettier --write",
"prettier": "prettier --ignore-path .gitignore \"**/*.+(ts|tsx|json)\"",
"test": "lerna run test",
"test:staged": "git stash -k --include-untracked; yarn test; git stash apply;"
},
"lint-staged": {
"packages/**/*.{ts,js,json,md}": [
"prettier --write"
]
},
"husky": {
"hooks": {
"pre-commit": "yarn format && yarn test:staged"
}
},
"devDependencies": {
"husky": "^4.2.5",
"lerna": "^3.22.1",
"prettier": "^2.0.5"
}
}
更具体地说,这一行:
{
"test:staged": "git stash -k --include-untracked; yarn test; git stash apply;"
}