采用以下Typescript箭头功能:
/**
* Returns a probably unique component name.
*
* @param baseName a suggested name to make unique.
* @returns a probably unique name.
*/
export const getUniqueComponentName = (
baseName
): string => {
return baseName + Math.round(Math.random() * 10000000)
}
Run Code Online (Sandbox Code Playgroud)
当Typescript配置tsconfig.json为这样时:
"noImplicitAny": true,
Run Code Online (Sandbox Code Playgroud)
这正确导致编译错误:
[ts]参数'baseName'隐式具有'any'类型.
Visual Studio Code也非常智能,可以在开发过程中告知您这个问题.
我的目标是创建一个precommit git hook,以防止此类错误在版本控制中结束.我试着这样做tslint,husky并lint-staged使用这个npm script:
"lint": "tslint --project tsconfig.json --config tslint.json"
Run Code Online (Sandbox Code Playgroud)
但是,这不会导致tslint显示编译错误.它被默默地忽略了.
然后我尝试在tslint.json中添加一条规则:
"typedef": [
true,
"arrow-parameter"
]
Run Code Online (Sandbox Code Playgroud)
虽然这确实让tslint抱怨,但它也开始抱怨匿名箭头函数,tsc …
我发现许多博客(包括 lint-staged 文档)介绍了一种使用 husky+ lint-staged 的方法,作为 package.json 中定义的以下代码:
{
"scripts": {
"precommit": "lint-staged"
},
"lint-staged": {
"src/**/*.js": ["prettier --write","eslint --fix", "git add"]
}
}
Run Code Online (Sandbox Code Playgroud)
由于存在“prettier”和“eslint --fix”都无法修复的错误,我们如何防止这种用法造成的错误提交?
如果husky hook 没有运行,我们需要执行命令chmod +x .husky/*。但我每次去新的分支机构都需要运行。chmod +x .husky/*否则,它会显示此错误:
提示:“.husky/pre-commit”挂钩被忽略,因为它未设置为可执行文件。
谁能告诉我如何解决这个问题?
我用的是哈士奇7.0.1
我有与赫斯基一起实施的预推钩.现在我想删除它.
问题是yarn remove huskygit钩子还在里面.git/hooks.
因为我每次想要提交或切换分支或提交时都会收到此错误,因此甚至无法提交 - >
.git/hooks/pre-commit: line 6: node_modules/run-node/run-node: No such file or directory
我知道我总是可以删除里面的每个钩子,.git/hooks但我怎么能远程推送这个更改?如何不让我的队友做同样的事情?
此外,我知道我可以使用-n标志,但我仍然不想这样做,我想干净的git提交.
我正在尝试使用预提交钩子在提交之前检测 eslint 错误。我正在使用 husky 和 lint-staged。但它对 src 中的所有文件运行 lint 命令,而不仅仅是对暂存文件运行。这是我的 package.json 文件。
"scripts": {
"test:ci": "cross-env CI=true react-scripts test --bail --passWithNoTests",
"lint": "eslint src/**/*.{js,jsx}",
"lint:fix": "eslint . --fix",
"precommit": "npm run lint && npm run test:ci"
}
Run Code Online (Sandbox Code Playgroud)
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
Run Code Online (Sandbox Code Playgroud)
"lint-staged": {
"*.js": [
"npm run precommit"
],
"*.jsx": [
"npm run precommit"
]
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以使它仅适用于暂存文件而不适用于目录中存在的其他文件?
pre-commit-hook eslint husky eslint-config-airbnb lint-staged
TLDR:git rev-parse -q --verify MERGE_HEAD不处于合并状态时会出错。当我们处于合并状态时,如何获得会出错的类似命令?
问题:当我将 master 合并到我的分支并且它存在冲突时,我必须手动更正它们,然后提交。但在某些情况下,我有太多来自 master 的更改,所以我宁愿跳过预提交挂钩。
部分解决方案:我可以运行git commit --no-verify并合并内容,但那是因为我知道该标志。其他开发人员可能不知道这一点,因此(1)他们花费了比需要更多的时间来等待预提交挂钩运行,并且(2)因为这可能需要很长时间,他们往往不太可能重新合并主节点(假设) 。
几乎确定的解决方案:我找到了一种通过使用 来检测我是否处于合并状态的方法git rev-parse -q --verify MERGE_HEAD。当处于合并状态时,它返回一个哈希值,当不处于合并状态时,它会出错。但我需要的恰恰相反。当我处于合并状态时,我需要它出错,因此我可以将它作为预提交挂钩添加到我的所有挂钩中。这会使他们在第一行失败,然后不执行以下命令。
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.js": [
"git rev-parse -q --verify MERGE_HEAD",
"eslint --max-warnings 0 --fix"
],
"*.scss": [
"git rev-parse -q --verify MERGE_HEAD",
"stylelint 'app/**/*.scss'"
],
"*.{js,json,yml,scss,md}": [
"git rev-parse -q --verify MERGE_HEAD",
"prettier --write"
],
"*": [
"bundle exec rubocop --auto-correct --force-exclusion"
]
}, …Run Code Online (Sandbox Code Playgroud) 今天我运行 eslint?two 脚本
"lint-staged": "lint-staged",
"eslint": "eslint --ext .tsx,.ts --fix ./src -c .eslintrc.js",
Run Code Online (Sandbox Code Playgroud)
当我运行时npm run eslint// 没关系 当我运行时npm run lint-staged// 它是错误的
lint-staged 的结果;
> lint-staged
? Running tasks for src/**/*.tsx
? eslint --fix [FAILED]
? git add
? eslint --fix :
Oops! Something went wrong! :(
ESLint: 7.10.0
Error: Error while loading rule '@typescript-eslint/dot-notation': You have used a rule which requires parserServices to be generated. You must therefore provide a value for the "parserOptions.project" property for …Run Code Online (Sandbox Code Playgroud) 我按照许多其他项目安装了(在 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 找不到此内容的任何其他原因吗?
当我在节点项目中使用 husky hooks 并尝试通过应用程序 SourceTree 提交到 git 时,我看到错误。挂钩在package.json中指定。我正在使用 nvm 来管理节点版本。
Can't find node in PATH husky > pre-commit hook failed
使用SourceTree进行git提交时,会报错。
一旦绕过这个错误,当使用 SourceTree 的嵌入式 git 通过 SourceTree 尝试提交时,husky 会报告另一个错误:“当前目录不是 git 目录!”。
我该如何解决这些错误?
我正在尝试为我公司的项目设置提交时的自动 linting,我见过的最好方法是 NPMhusky包。我正在按照、 、Husky的设置说明进行操作,但我一直遇到同样的问题,但我不知道如何解决。eslintprettierlint-staged
我的问题是我的项目是这样设置的:
\n- Parent Directory\n - .git\n - Working Project Directory\n - node_modules\n - package.json\nRun Code Online (Sandbox Code Playgroud)\n当我尝试安装 husky 时,出现错误,提示我缺少该.git文件,但它就在那里,只是文件结构中的上一级!
我在其他帖子中看到了一些有关使用以下技术来修复它的内容:
\n\n\n\n
npx mrm lint-staged这将失败,\xe2\x80\x99s 预期
\n\n然后修复 npm 准备脚本\n
\n"prepare": "husky install" -> "prepare": "cd .. && husky install some-folder/.husky"
\n\n然后运行
\nnpm i
然而它对我不起作用。
\n我也尝试在中安装 husky,parent directory但它不太有效,并且它使我们项目的安装过程变得更加困难
有没有人有什么建议?
\n编辑:这是我收到的错误消息:
\n% …Run Code Online (Sandbox Code Playgroud) husky ×10
lint-staged ×6
eslint ×3
git ×2
git-husky ×2
javascript ×2
frontend ×1
git-commit ×1
githooks ×1
hook ×1
macos ×1
npm ×1
package.json ×1
pre-commit ×1
tslint ×1
typescript ×1