7 tsc lerna monorepo lint-staged
我有以下根 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"
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,使用这个设置,当我仍在处理文件时,我无法提交,为了解决这个问题,我可以使用 lint-staged 模块,我的问题是,如何设置它以便我当前拥有的命令仍然运行,但仅在暂存文件上运行,而不在每个项目中安装该命令的所有依赖项?测试命令也可能是一个问题,因为它tsc --noEmit在每个项目中运行,我可以强制它只检查暂存文件吗?
对此有一个替代解决方案,因为到目前为止,它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"
}
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,这一行:
{
"test:staged": "git stash -k --include-untracked; yarn test; git stash apply;"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14684 次 |
| 最近记录: |