我按照许多其他项目安装了(在 Mac OS11 上)husky@4。lint-staged终端命令流程git add .和git commit -m 'something'流程工作正常:Husky 的预提交挂钩和lint-staged命令已成功获取。然而,Github Desktop 预提交挂钩似乎没有表现。
我尝试查看该文件.git/hooks/pre-commit,它就在那里:
#!/bin/sh
# husky
# Created by Husky v4.3.8 (https://github.com/typicode/husky#readme)
# At: 3/7/2021, 12:09:26 PM
# From: /Users/admin/devProj/prject/node_modules/husky (https://github.com/typicode/husky#readme)
. "$(dirname "$0")/husky.sh"
Run Code Online (Sandbox Code Playgroud)
命令:
...
"husky": "^4.3.8",
"lint-staged": "^10.5.4",
...
"husky": {
"hooks": {
"pre-commit": "tsc --noEmit && lint-staged"
}
},
"lint-staged": {
"**/*.(js|jsx|ts|tsx)": [
"npm run lint:fix",
"prettier --write"
]
}
Run Code Online (Sandbox Code Playgroud)
GitHub Desktop 找不到此内容的任何其他原因吗?
我使用 Vue CLI 创建了一个新的 Vue3 应用程序,并为我的 linter 配置选择了 Prettier。我想使用 commitlint、husky 和 lint-staged 来验证提交消息并在推送代码之前检查代码。
\n我做了什么
\n基于https://commitlint.js.org/#/guides-local-setup我用 husky 设置了 commitlint
\nnpm install --save-dev @commitlint/{cli,config-conventional}\necho "module.exports = { extends: [\'@commitlint/config-conventional\'] };" > commitlint.config.js\n\nnpm install husky --save-dev\nnpx husky install\nnpx husky add .husky/commit-msg \'npx --no -- commitlint --edit $1\'\nRun Code Online (Sandbox Code Playgroud)\n基于https://github.com/okonet/lint-staged#installation-and-setup我设置了 lint-staged
\nnpx mrm@2 lint-staged\nRun Code Online (Sandbox Code Playgroud)\n在 package.json 中我替换
\n"lint-staged": {\n "*.js": "eslint --cache --fix"\n}\nRun Code Online (Sandbox Code Playgroud)\n和
\n"lint-staged": {\n "*": "npm run lint"\n}\nRun Code Online (Sandbox Code Playgroud)\n问题 …
当我npx lint-staged在终端中使用时,一切看起来都正常。
例如:
\nPS E:\\Projects\\sample-project> git status\nOn branch main\nYour branch is up to date with \'origin/main\'.\n\nChanges to be committed:\n (use "git restore --staged <file>..." to unstage)\n new file: .husky/commit-msg\n new file: .husky/pre-commit\n new file: .lintstagedrc.json\n modified: .prettierrc\n new file: commitlint.config.js\n modified: nx.json\n modified: package-lock.json\n modified: package.json\n\nPS E:\\Projects\\sample-project> npx lint-staged\n\xe2\x88\x9a Preparing lint-staged...\n\xe2\x88\x9a Running tasks for staged files...\n\xe2\x88\x9a Applying modifications from tasks...\n\xe2\x88\x9a Cleaning up temporary files...\nPS E:\\Projects\\sample-project> \nRun Code Online (Sandbox Code Playgroud)\n但是当我的哈士奇pre-commit钩子运行相同的命令时:
#!/usr/bin/env sh\n. "$(dirname "$0")/_/husky.sh"\n\nnpx lint-staged\n …Run Code Online (Sandbox Code Playgroud) 我正在使用lint-staged和Jest测试框架来测试上次提交中已更改的文件,如本博客所述.
我的配置如下:
"src/**/*.{ts}": [
"prettier --write",
"tslint --fix --project .",
"jest --bail --findRelatedTests",
"git add"
]
Run Code Online (Sandbox Code Playgroud)
我还想为仅更改的文件生成coverage报告.为此,我必须将更改的文件列表放在多个位置.
jest --bail --findRelatedTests <spaceSeparatedListOfSourceFiles> --collectCoverageFrom=<glob>
使用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在每个项目中运行,我可以强制它只检查暂存文件吗?
我有一个未格式化的json文件,它存储在我的应用程序中,结构如下
src
/forms
/test
- abc.json
Run Code Online (Sandbox Code Playgroud)
我正在使用prettierhusky并lint-staged在预提交时使用 prettier 和 linting。配置位于 my 中package.json,如下所示
"husky": {
"hooks": {
"pre-commit": "lint-staged --relative",
"pre-push": "tsc"
}
},
"lint-staged": {
"src/**/*.{ts, json}": [
"prettier --write",
"eslint --fix"
]
},
....
..
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,abc.json当我将代码推送到 github 时,该文件永远不会被格式化。我缺少什么?
当我执行git commit -m "commit message"命令时,lint-staged 显示此错误:
我在 package.json 中的配置:
"husky": {
"hooks": {
"pre-commit": "npm run validate && lint-staged"
}
},
"lint-staged": {
"*.+(js|ts|tsx)": [
"eslint"
],
"**/*.+(js|json|ts|tsx)": [
"prettier --write"
]
},
Run Code Online (Sandbox Code Playgroud)
它在mac上运行良好,但windows-10显示此错误。谁能告诉我windows出了什么问题?
例如,我在 .rb 和 .js 文件上匹配了它。
例如**/*.{js,rb}
例如,还想匹配Gemfile。Rakefile
问题示例:
? npx mrm lint-staged
npx: installed 298 in 9.141s
Preset “default” not found.
We’ve tried to load “mrm-preset-default” and “default” npm packages.
Run Code Online (Sandbox Code Playgroud)
无法运行此命令,我不知道为什么!
我有一个使用 git 和 Visual Studio Code 的 Angular 应用程序。我设置了 ESLint 并使用 husky 来运行lint-staged我设置了 ESLint 并使用 husky在预提交挂钩中
当我第一次设置它时,失败提交中的待处理更改就会消失,我了解到它们被隐藏了:https ://stackoverflow.com/a/60335168/11991371。
我不明白为什么它会默认隐藏我的更改,而不是让我纠正 linting 错误并再次尝试提交。坦率地说,这似乎很奇怪。这会让每一个遇到它的开发人员感到恐慌。所以我添加了--no-stash标志,这样就不会这样做。
/.husky/预提交:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged --no-stash
Run Code Online (Sandbox Code Playgroud)
但现在我偶然发现了另一个问题案例。脚步:
如果您碰巧打开了该文件,您也许可以通过 IDE 中的“撤消”来恢复更改,但这是一个大问题。 如何防止因提交被拒绝而丢失工作,同时也不会自动隐藏工作?
lint-staged ×10
husky ×4
javascript ×4
git-husky ×3
eslint ×2
git ×2
prettier ×2
typescript ×2
git-commit ×1
jestjs ×1
json ×1
lerna ×1
lint ×1
monorepo ×1
npx ×1
tsc ×1
vue.js ×1